源码
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:[si]
mov cs:[di],ax
s0:jmp short s
s1:mov ax,0
int 21h
mov ax,0
s2:jmp short s1
nop
code ends
end start
我的理解是顺序执行到s0时,s的语句是jmp short s1即s2的内容,此时执行s2,再执行s1,以后就是s1和s2循环,但实验结果却不是这样,s的语句是jmp 0000,请高人解答,谢谢。
------解决方案--------------------------------------------------------
你可以重新看一下jmp指令对应的本章第三章;
看看jmp语句对应的机器码;传递指令反映到机器码上是传递相应的机器码EB加上位移。
用debug一步一步执行指令,看一看运行结果。
------解决方案--------------------------------------------------------
s2:jmp short s1
这里 s1 表示的不是一个绝对地址,而是一个相对地址。具体说就是向后 10 个字节。该指令所占用的 2 字节被 mov 到 s: 处后,从该处重新计算得到的目标地址就是 mov ax,4c00h 这条指令的地址。
s0 是个多余的标号,s1 后面的三条指令只是为了凑数。