我查看了 ISA 规范并在互联网上搜索了这个问题的答案,但我找不到它。
在 RISC-V ISA 中,负数应该用一个补码还是二进制补码表示?或者,这个决定是留给实施者的吗?
我问的原因是我正在编写一个 RV32I 模拟器,例如,这会影响我在模拟内存中存储负数的方式。
我查看了 ISA 规范并在互联网上搜索了这个问题的答案,但我找不到它。
在 RISC-V ISA 中,负数应该用一个补码还是二进制补码表示?或者,这个决定是留给实施者的吗?
我问的原因是我正在编写一个 RV32I 模拟器,例如,这会影响我在模拟内存中存储负数的方式。
RISC-V 架构需要二进制补码整数运算。从它指定单个加法指令,而不是一对有符号和无符号加法指令的事实可以最直接地看出这一点。在二进制补码算术中,有符号和无符号加法是相同的运算;在一个补码(和符号大小)中,它们是不一样的。
在我看来,略读架构手册,作者认为二进制补码整数算术的选择太明显了,无需提及。 至少有 25 年没有制造出使用其他任何东西的 CPU。
用户级 ISA 手册(第13 页)指出,按位NOT rd, rs1
可以由 执行XORI rd, rs1, -1
,如果我没看错的话,这意味着二进制补码:与 -1 的补码进行异或运算不会反转最低有效位,而它会起作用在二进制补码中正确。
是的,RISC-V 指令集架构 (ISA) 要求补码:
基本整数指令集使用二进制补码表示有符号整数值。
(第 1.3 节 RISC-V ISA 概述,第 4 页,RISC-V 指令集手册。第 I 卷,2019-06-08,已批准)
通用寄存器 x1–x31 保存各种指令解释为布尔值集合或二进制补码有符号二进制整数或无符号二进制整数的值。
(第 2.1 节 Programmers' Model for Base Integer ISA,第 13 页,RISC-V 指令集手册。第 I 卷,2019-06-08,已批准)