跳转语句偏移或位移?

时间:2016-11-11 05:12:59

标签: loops assembly conditional x86-16 transfer

8086条件和无条件跳转是否有来自当前指令的符号位移(是8位还是16位?)还是它们指定了从代码段寄存器到标签的偏移量?

例如,当我写:

label1: 
..
..
jmp label1 (unconditional)

这个 label1 是否会被代码段的带符号位移或偏移替换?

cmp ex, 0
je label2 ( conditional)

这个 label2 是否会被代码段中的有符号位移或偏移所取代?

另外,当我使用loop指令时如下:

loop1:
..
..
loop loop1

这个 loop1 是否会被有符号的位移(是8位还是16位?)或代码段的偏移所取代?

1 个答案:

答案 0 :(得分:0)

在所有这些情况下,使用的标签将被当前指令后面的带符号偏移量替换。所以与代码段的开头无关。

无条件跳转jmp label1有两种形式:

  • 使用8位有符号偏移
  • 使用16位有符号偏移量

条件跳转je label2和循环指令loop loop1仅使用8位有符号跳转。 (在8086上也是如此。后来的处理器给出条件跳转也是16位有符号偏移。)