我正在编写一个16位虚拟机,它运行我自己设计的指令集和编码
我无法理解如何在指令中编码负位移(例如[reg-0x100])。它是使用两个补码还是只是一个标志?
答案 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