首先回答问题:实验8完全可以争取返回。
解释:
因为源程序编译为机器码后,相应的转移指令被翻译成的机器代码中包含的跳转信息是位移。
这里举个例子来说明:
小王的右边是小李,小李的右边是小周,小周的右边是小韩。
即 小王-》小李-》小周-》小韩。
小王手里有个苹果,老师让小王把苹果传给他右边第二位同学,此时苹果会传给,小周。
这时小王手里有个橘子,但是同时小王跟小李调换下位子:
即 小李-》小王-》小周-》小韩。
老师依然让小王把苹果传给他右边的第二位同学,那么橘子会传到谁手里呢?显然是 小韩。
两次虽然老师的命令是一样的(传给右边第二位同学),为什么结果不一样呢? 是因为小王的位置变化了!
对于题目 源程序有标号,说明转移的位置,但是编译后的机器代码是位移也就是相对位置。
对于命令 jmp short s1 的机器码(EBF6)包含信息是跳转到F6位置。此时jmp short s1 是在原位置;而通过命令 mov ax,cs:[si] mov cs:[di],ax 此命令被复制到 s:标号处,但是复制的是机器码(ebf6),当执行s:标号出的指令(EBF6)时,依然是跳转f6位置,但是此时是相对于 s:标号的位置。
看代码:
s1:mov ax,0
int 21h
mov ax,0
s2: jmp short s1 (EBF6)
这里 当程序执行到s2处指令时,cpu运行指令ebf6 会跳转到 s1
------------------------------
mov ax,4c00h
int 21h
start: mov ax,0
s: jmp short s1 (EBF6)
这里当程序执行到s 处指令时,cpu运行的指令ebf6会跳转到 指令 mov ax,4c00h
--- 以上就是解释了什么是位移,其实就是相对位置。
以上是对本题的解释! |