好一根鸭翅膀 发表于 2018-12-20 22:05:01

王爽汇编4.9实验(3)的2个问题

实验(3)里要求填两个空,一个是代码起始地址,另一个是代码长度问题。其中,第一个问题答案里中说把cs赋给ds,这我完全可以理解,因为debug加载这个程序之后会把cs自动指向程序的第一条指令,但是另外一个备选答案即code,如果它是指cs中的代码值,那在加载这个程序之前我怎么知道它被加载之后第一行命令储存在哪个内存单元从而无法知道cs的值啊。第二个问题中那两个长度的具体值怎么来的,自己把每行指令的长度加起来人为设置的吗?


附上原题和答案:

(3)下面的程序功能是将“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,   

   mov es:,al   

   inc bx   

   loop s   

   mov ax,4c00h   

   int 21h   

code ends   

end



此题有多个答案,因为mov用在寄存器之间传送数据的指令是2个字节,用在寄存器和立即数之间是3个字节

答案1:mov ax,cs(占2个字节)

   mov cx,17

答案2:mov ax,code (占3个字节)

   mov cx,18

答案3:mov ax,cs 或mov ax,code

   把mov cx,   改成 sub cx,5

(因为在载入程序时,cx保存程序的长度,减去5是为减去mov ax,4c00h和int 21h的长度)

好一根鸭翅膀 发表于 2018-12-24 20:13:24

哈哈,我已经明白了

好一根鸭翅膀 发表于 2018-12-25 21:49:55

麻烦管理员删除这个帖子,我已经明白了@小甲鱼
页: [1]
查看完整版本: 王爽汇编4.9实验(3)的2个问题