带溢出和减法的MIPS乘法

带溢出和减法的MIPS乘法,mips,Mips,乘法结果存储在mips high和low中的两个不同寄存器中 例如:在本例中,为了方便起见,我将高和低作为4位寄存器 li $t0,12 mult $t0,$t0 12*12=144 1100*1100=10010000 所以高的是1001,低的是0000。现在如果我想从结果中减去12。我该怎么做 我不能用 mflo $t1 subi $t2,$t1,12 因为low包含所有的零,结果可能是错误的。在这种情况下,我如何执行减法。当两个数字是32位整数时,乘法会导致溢出。比如 2^30 * 2

乘法结果存储在mips high和low中的两个不同寄存器中

例如:在本例中,为了方便起见,我将高和低作为4位寄存器

li $t0,12
mult $t0,$t0
12*12=144

1100*1100=10010000

所以高的是1001,低的是0000。现在如果我想从结果中减去12。我该怎么做

我不能用

mflo $t1
subi $t2,$t1,12
因为low包含所有的零,结果可能是错误的。在这种情况下,我如何执行减法。当两个数字是32位整数时,乘法会导致溢出。比如 2^30 * 2^4 - 14 使用高位寄存器。

MIPS寄存器为32位(或64位,但在本例中不会改变结果),因此乘法后,您将有hi=
0x00000000
和lo=
0x00000090
。也就是说,8位产品适合32位
lo
刚刚好


从0x90中减去12后,您应该会看到t2=
0x84

为什么它是错误的?144-12=132或1000 0100二进制我只是举12为例,因为…它会导致4位乘法溢出。在MIPS上没有4位乘法(或在大多数现代处理器上,直到低端8位微控制器上)。所有操作都是使用32位或64位寄存器完成的,即使您的操作数只适合几位。结果也是寄存器大小的,所以在您的情况下不会有溢出。@程序员8您是在问如何从hi/lo寄存器对中的结果中减去一个数字吗?如果是这样的话,看看这个答案