|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
实验(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,[bx]
mov es:[bx],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的长度)
|
|