汇编语言根据位移进行转移的意义

前面我们讲到:

jmp  short  标号
jmp  near  ptr  标号
jcxz  标号
loop  标号

等几种汇编指令,他们对ip的修改是根据转换目的地址和转换起始地址之间的位移来进行的。在他们对应的机器码中不包含转移的目的地址,而包含的是到目的地址的位移。

这种设计,方便了程序段在内存中的浮动装配

例如:

mov cx,6
mov ax,10h
s:  add ax,ax
loop s

这段程序装在内存中的不同位置都可正确执行,因为loop s在执行时只涉及s的位移(-4,前移 4 个字节,补码表示为FCH),而不是s的地址。如果loop s的机器码中包含的是s的地址,则就对程序段在内存中的偏移地址有了严格的限制,因为机器码中包含的是s的地址,如果s处的指令不在目的地址处,程序的执行就会出错。而loop s的机器码中包含的是转移的位移,就不存在这个问题了,因为,无论s处的指令的实际地址是多少,loop指令的转移位移是不变的。


发布日期:

所属分类: 编程 标签:  


没有相关文章!