8086条件和无条件跳转是否有来自当前指令的符号位移(是8位还是16位?)还是它们指定了从代码段寄存器到标签的偏移量?
例如,当我写:
label1:
..
..
jmp label1 (unconditional)
这个 label1 是否会被代码段的带符号位移或偏移替换?
cmp ex, 0
je label2 ( conditional)
这个 label2 是否会被代码段中的有符号位移或偏移所取代?
另外,当我使用loop
指令时如下:
loop1:
..
..
loop loop1
这个 loop1 是否会被有符号的位移(是8位还是16位?)或代码段的偏移所取代?
答案 0 :(得分:0)
在所有这些情况下,使用的标签将被当前指令后面的带符号偏移量替换。所以与代码段的开头无关。。
无条件跳转jmp label1
有两种形式:
条件跳转je label2
和循环指令loop loop1
仅使用8位有符号跳转。 (在8086上也是如此。后来的处理器给出条件跳转也是16位有符号偏移。)