我正在设计一个简单的玩具指令集和随附的模拟器,我正在试图找出支持的指令。在算术方面,我目前有无符号加,减,乘和除。但是,我似乎无法找到以下问题的明确答案:哪些算术运算符需要签名版本,哪些是无符号和两个补码签名版本等效?
因此,例如,二进制补码中的1111等于-1。如果你加1并假装它是一个无符号数,你得到0000,即使把它想象为-1也是正确的。但是,这适用于所有数字吗?那么其他三个操作(减法,乘法,除法)怎么样?
答案 0 :(得分:2)
对于有符号和无符号2s补码,加法和减法是相同的,假设您将以正常方式处理大多数CPU的溢出/下溢,即只是环绕。乘法和除法是不同的。因此,无论符号如何,您只需要一个加法例程和一个减法例程,但您需要单独的有符号和无符号乘法和除法。
答案 1 :(得分:2)
加法,减法和乘法是相同的:
分工不同。
许多指令集提供乘法运算,其中输出大于输入,对于有符号和无符号,这些操作也是不同的。
此外,如果您使用C编写模拟器,则需要注意一些语言的错误。
答案 2 :(得分:0)
您的所有操作都需要溢出检查,否则在某些情况下会返回错误的值。这些检查的无符号版本与签名版本不同,因此您需要单独实施每个例程。