woshixy1 发表于 2022-2-8 02:36:53

实验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 17:14:53

本帖最后由 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

publicwhore 发表于 2022-3-4 16:21:40

当你debug时,用r调试时,cx的数值表示这个程序的长度,减去mov ax,4c00h   ,int 21h的长度,你可以按u查看下他的长度。
页: [1]
查看完整版本: 实验4 第3问 求助