实验八
实验八代码:
assume cs: code
code segment
mov ax, 4c00H
int 21H
start : mov ax, 0
s : nop
nop
mov di, offset s
mov si, offset s2
mov ax, cs:
mov cs:, ax
s0: jmp short s
s1: mov ax, 0
int 21H
mov ax, 0
s2: jmp short s1
nop
code ends
end start
为什么能让程序结束呢?
起初我怎么想也不明白,听了小甲鱼老师的指点,我就明白了,在这里非常的感谢小甲鱼老师。
当s2的代码被复制到s处执行时,因为转移的距离是位移,就是所谓的标号处的地址 - jmp指令后一个字节的地址,用debug可以得到:
可以看出s1处的地址为18,s处的地址为8,相减得到10,因为他原本是在s2处的,所以应该是-10,所以向前转移10单元,所以程序会正常结束 复制过去的是机器码{:10_256:} 看看 kankan
页:
[1]