2014-04-23 134 views
0

乘法结果存储在两个不同的寄存器中,单位为mips高和低。MIPS与溢出相乘,然后减法

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

li $t0,12 
mult $t0,$t0 

12 * 12 = 144

1100 * 1100 = 1001 0000

所以具有高1001和低0000具有现在如果我想从结果中减去12。我怎么做?

我不能使用

mflo $t1 
subi $t2,$t1,12 

,因为低了所有的零和结果将是wrong.How做我在这个case.when执行减法两个数字是32个整数和乘法会导致overflow.say东西如 2^30 * 2^4 - 14 使用高寄存器。

+0

为什么错了? 144 - 12 = 132或1000 0100二进制 –

回答

1

MIPS寄存器是32位(或64位,但在这种情况下不会改变结果),所以在乘法之后,您将有hi = 0x00000000和lo = 0x00000090。即8位产品适合32位lo就好了。

从0×90,你应该会看到T2减去12后= 0x84

+0

我只给了12个例子,因为...它会导致4位乘法溢出。 – programer8

+0

在MIPS(或大多数现代处理器到低端8位微控制器)上没有4位乘法这样的事情。所有的操作都使用32位或64位寄存器完成,即使您的操作数只适合几位。结果也是寄存器大小的,所以你的情况没有溢出。 – ArtemB

+0

@ programer8你问的是如何从hi/lo * pair寄存器中的结果中减去一个数字?如果是这样的话,看到这个答案http://stackoverflow.com/questions/3940524/double-precision-integer-subtraction-with-32-bit-registersmips – ArtemB