2016-11-11 69 views
-1

8086条件跳转和无条件跳转是否从当前指令签名位移(是8位还是16位?)还是指定从代码段寄存器到标签的偏移量?跳转声明偏移或位移?

e.g,当我写:

label1: 
.. 
.. 
jmp label1 (unconditional) 

这是否会LABEL1署名位移来代替或代码段偏移?

cmp ex, 0 
je label2 (conditional) 

这是否会LABEL2署名位移来代替或代码段偏移?

此外,当我使用如下的loop指令:

loop1: 
.. 
.. 
loop loop1 

将这个LOOP1将由符号位移代替(它是8位或16位2)或从代码段偏移?

+0

为什么不查阅指令集引用,它清楚地回答了这些问题? –

回答

0

在所有这些情况下,使用的标签将由当前指令尾部的有符号偏移量替换。所以与代码段的开始无关。

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

  • 使用8位签名,使用16位有符号偏移

的条件跳转je label2偏移

  • 和循环指令loop loop1只使用8位有符号偏移量。 (这在8086上是正确的。后来的处理器给出了有条件的跳转也是16位有符号偏移。)