如何在x86中编码负位移?

时间:2016-06-18 23:52:16

标签: assembly x86 cpu cpu-architecture

我正在编写一个16位虚拟机,它运行我自己设计的指令集和编码

我无法理解如何在指令中编码负位移(例如[reg-0x100])。它是使用两个补码还是只是一个标志?

2 个答案:

答案 0 :(得分:0)

将位移视为有符号值(是,二进制补码)。另外,请务必绕过地址溢出。

答案 1 :(得分:0)

在x86程序集中不能负位移。 x86 ISA只是不支持此功能。

您只能通过添加太大而无法容纳特定地址大小的值来使环绕。例如 - 在8位地址空间(最多255) - 如果要从地址3 = 254中减去0xFE的值,则应添加253 = 0xFD

254  +    253  = 
254  +      2  = 0   (wrap around, because max is 255)  
0    + (253-2) = 251 
= 254-3