首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

2012-02-29 
紧急跪求 王爽《汇编语言》中的小小问题问题:(1)编程,向内存0:200~0:23f依次传递数据0~63(3fh),程序中只能使

紧急跪求 王爽《汇编语言》中的小小问题
问题:

(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:codesgcodesg segment     mov ax,0020h     mov ds,ax     mov bl,0     mov cx,40hs:   mov [bx],bl     inc bl     loop s      mov ax,4c00h     int 21h codesg endsend
[解决办法]
这个我也刚看完,学习了,那个循环次数和楼上后面说的一样。先假设,然后debug里看的。。

热点排行