实验4 第3问 求助
实验4 和loop的使用(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 , 就是这里我没看懂,我想知道 这个cx的值是怎么计算出来的 是通过 IP的值 算出来的么???主要是 inc bx 和 loop s 两条指令占多少不知道,我按答案里面给的mov用在寄存器之间传送数据的指令是2个字节,用在寄存器和立即数之间是3个字节 算出 感觉不对啊
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的长度)
感谢小甲鱼无私的分享
感谢帮助过我的人们
本帖最后由 jhq999 于 2022-2-18 18:28 编辑
23=17h
assume cs:code
code segment
mov ax, code ;3
mov ds,ax ;2
mov ax,0020h ;3
mov es,ax ;2
mov bx,0 ;3
mov cx, 18h;3
s: mov al, ;2
mov es:,al ;2
inc bx ;1
loop s ;2
mov ax,4c00h
int 21h
code ends
end 当你debug时,用r调试时,cx的数值表示这个程序的长度,减去mov ax,4c00h ,int 21h的长度,你可以按u查看下他的长度。
页:
[1]