绝对跳跃 - 意外行为

时间:2016-12-25 19:25:33

标签: assembly x86 x86-16

我试图弄清楚如何跳转到绝对地址,偶然发现了FF 26操作码,或者跳过[addr]"。我试图在Turbo Debugger中使用它,并发现了一个特殊问题:绝对跳转实际上从未让我到达我指定的地址。我尝试将cs显式指定为段,即使cs和ds指向我的测试中的同一段,因此[addr]应该与cs:[addr]相同。只是为了澄清,跳跃仍然是绝对的。使用相同的操作数和从不同位置跳转仍然让我到同一个地方。问题是我通过这些绝对跳转到达的位置似乎与我在操作数中指定的内存位置没有任何关系。我附上了一些Turbo Debugger的截图。

顶行显示使用的指令,我尝试显式指定段寄存器。 The top line shows the instruction used, where I tried explicitly specifying the segment register.

The result of the first instruction. As you can see, I jumped to address [20CD] instead of [0000].

第二次尝试,这次跳到[0002]。 The second attempt, this time jumping to [0002].

第二次尝试的结果。如你所见,我达到[9D7D]而不是[0002]。 The result of the second attempt. As you can see, I reached [9D7D] instead of [0002].

关于绝对跳跃我错了什么以及他们为什么把我带到错误的地方的任何解释都将受到赞赏。另外,我最终会在8086代码中使用它。如果这在8086中有所不同,你能解释一下它有何不同?

0 个答案:

没有答案