专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 汇编语言

紧急跪求 王爽《汇编语言》中的小小疑点

发布时间:2010-06-14 15:51:22 文章来源:www.iduyao.cn 采编人员:星星草
紧急跪求 王爽《汇编语言》中的小小问题
问题:

(1)编程,向内存0:200~0:23f依次传递数据0~63(3fh),程序中只能使用9条指令,9条指中包括“mov ax,4c00h”和“int 21h”。
 
(2)下面的程序功能是将“mov ax,4c00h"之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果。

答案:

assume cs:code  
code segment  
  mov ax, code ;或mov ax, cs 
  mov ds,ax  
  mov ax,0020h  
  mov es,ax  
  mov bx,0  
  mov cx, 18h ;或mov cx, 17h ;或sub cx,5
  s: mov al,[bx]  
  mov es:[bx],al  
  inc bx  
  loop s  
  mov ax,4c00h  
  int 21h  
code ends  
end
看不懂这段程序为什么能将数据0-23传递到内存0:200—0:23f之中??
(1)最主要的是这句指令: mov al,[bx] .这句指令执行时就相当于将ds:bx或者说cs:bx或者说code:bx中的内容转移到al之中。这句指令第一次执行时为什么ds:bx或者cs:bx或者code:bx中存贮的是数据0呢???不一定吧???
(2)循环次数的这句指令 mov cx, 18h ;或mov cx, 17h ;或sub cx,5为什么是18h或者17h或者sub cx 5啊,我千思不得其解啊????
(3)我是大菜,希望高人们用最通俗易懂的,简单的,入门级的语言解释一下问题(1) (2)和其中向关联的知识。多谢啦!


------解决方案--------------------
1.mov al,[bx]之前有 mov bx,0,所以ds:bx存贮的是数据0。
这是指取ds:0000中的数据。注意[]是以bx中的值为地址,去取那个地址中的值。
2.循环次数的这句指令 mov cx, 18h 就是16+8=24次。就是 0-23。
“;或mov cx, 17h ;或sub cx,5”应该是多余的。


------解决方案--------------------
首先,
程序取得内容是用ds:[ bx ],给al,然后al再给es:[ bx ]

ds指向的是code段,或者说的cs段地址,
es指向的是0020h(根据 mov ax,0020h mov es,ax )

这样就清楚了,ds指向的是代码段,es搭配偏移地址指向0:200~0:23f,
也就是将ds(程序代码段),复制到es指向的(0:200~0:23f)段中




另:不知道楼主的标准答案是从哪里来的,我翻了一下我那儿的标准答案,下面是我找到的:



(2) 编程,向内存0:200~0:23F依次传送数据0~63(3FH),程序中只能使用9条指令,9条指令中包括“mov ax,4c00h”和“int 21h”。

程序如下:

Assembly code

assume cs:codesg

codesg segment

     mov ax,0020h

     mov ds,ax

     mov bl,0

     mov cx,40h

s:   mov [bx],bl

     inc bl

     loop s

 

     mov ax,4c00h

     int 21h

 

codesg ends

end

------解决方案--------------------
这个我也刚看完,学习了,那个循环次数和楼上后面说的一样。先假设,然后debug里看的。。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: