我查看了ISA规范并在互联网上搜索了答案,但我找不到它。
在RISC-V ISA中,负数应该用一个补码表示还是两个补码?或者,这个决定是留给实施者的吗?
我问的原因是我正在写一个RV32I模拟器,这会影响我在模拟内存中存储负数的方式,例如。
答案 0 :(得分:2)
user-level ISA manual(第13页)注意到extension Request
可以执行按位NOT rd, rs1
,如果我看到正确的话,这将暗示两个补码:XORing with the -1的一个补码不会反转最低有效位,而它可以在两个补码中正确工作。
答案 1 :(得分:1)
RISC-V架构需要二进制补码整数运算。这可以从它指定单个加法指令而不是一对有符号和无符号加法指令的事实中最直接地看出。在二进制补码算法中,有符号和无符号加法是相同的运算;在一个补码(和符号幅度)中它们是不一样的。
在我看来,浏览体系结构手册时,作者认为选择二进制补码整数运算太明显了,无法提及。至少有25个CPU没有制造使用其他任何东西的年份。
答案 2 :(得分:0)
是的,RISC-V指令集体系结构(ISA)要求two's complement:
基本整数指令集对有符号整数值使用二进制补码表示。
(第1.3节RISC-V ISA概述,第4页,The RISC-V Instruction Set Manual. Volume I,2019年6月8日已批准)
通用寄存器x1-x31保存的值被各种指令解释为布尔值的集合,或者作为两个补码的有符号二进制整数或无符号二进制整数。
(基本Integer ISA的第2.1节“程序员模型”,第13页,The RISC-V Instruction Set Manual. Volume I,2019年6月8日已批准)