当前位置: 代码迷 >> 汇编语言 >> 编译语言(王爽)第二版里9.8实验8疑惑
  详细解决方案

编译语言(王爽)第二版里9.8实验8疑惑

热度:6715   发布时间:2013-02-26 00:00:00.0
汇编语言(王爽)第二版里9.8实验8疑惑
源码
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 后面的三条指令只是为了凑数。
  相关解决方案