如何从2-补码转换为基数10?MIPS

如何从2-补码转换为基数10?MIPS,mips,Mips,我知道如何用手把2的补码转换成10的基数 如链接所示。你可以通过第一位来判断一个数字是负数还是正数,所以我的想法是,因为这个数字是8位,所以我会用1000 0000除以二进制或十六进制0x00000080 有没有人有更好的解决方案,因为现在这对我来说并不奏效,我的代码在底部。寄存器1是二者的补码所在的位置 lis $8 .word 0x00000080 div $1, $8 mflo $9 jr $31 首先,您可以创建变量的NOT。MIPS没有内置的NOT,但您可以使用XOR来获取它

我知道如何用手把2的补码转换成10的基数

如链接所示。你可以通过第一位来判断一个数字是负数还是正数,所以我的想法是,因为这个数字是8位,所以我会用1000 0000除以二进制或十六进制0x00000080

有没有人有更好的解决方案,因为现在这对我来说并不奏效,我的代码在底部。寄存器1是二者的补码所在的位置

lis $8
.word 0x00000080

div $1, $8

mflo $9

jr $31

首先,您可以创建变量的NOT。MIPS没有内置的NOT,但您可以使用XOR来获取它(使用addi将寄存器的值设置为-1,使用寄存器上的XOR与其中包含-1的寄存器求反,该寄存器存储所有1)


之后很简单,只需将1添加到它。

从右侧开始,除以10,取余数,添加字符0(零)。对商进行重复,直到商为零。通常,对于有符号的数字,您首先将其转换为正号,然后在转换完成后应用该符号。然而,可以通过简单的除法产生一个“10的补码”结果,直到商都是1或0,而不需要对符号进行特殊处理。注释中带-1的寄存器之所以都是1,是因为符号扩展。这意味着寄存器将作为1的掩码进行询问,并且由于当掩码为1时XOR逻辑运算符的工作方式,原始寄存器将反转,相当于使用NOT运算符。