2014-04-23 169 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