第九章:转移指令的原理04
让编程改变世界
Change the world by program
根据位移进行转移的意义
前面我们讲到:jmp short 标号
jmp near ptr 标号
jcxz 标号
loop 标号
等几种汇编指令,它们对 IP的修改是根据转移目的地址和转移起始地址之间的位移来进行的。 在它们对应的机器码中不包含转移的目的地址,而包含的是到目的地址的位移距离。 这样设计,方便了程序段在内存中的浮动装配。 例如: [caption id="attachment_364" align="aligncenter" width="243"] 根据位移进行转移的意义[/caption] 这段程序装在内存中的不同位置都可正确执行,因为 loop s 在执行时只涉及到 s的位移( - 4,前移 4个字节,补码表示为FCH),而不是s的地址。 如果loop s的机器码中包含的是s的地址,则就对程序段在内存中的偏移地址有了严格的限制。 因为机器码中包含的是 s 的地址,如果 s 处的指令不在目的地址处,程序的执行就会出错。 而loop s的机器码中包含的是转移的位移,就不存在这个问题了。 因为,无论 s处的指令的实际地址是多少,loop指令的转移位移是不变的。