2016-10-10 133 views
0

我已閱讀了一些有關MIPS簽名和未簽名添加的溢出異常的帖子,但它對我仍然不清楚。MIPS溢出異常

1)溢出異常是什麼意思?它是什麼時候發生的? 2)什麼時候忽略無符號加法溢出?

假設我有兩個數字,讓我們開始與簽約4位,然後去4位無符號

Signed negative addition 

    1010 -6 
+ 1101 -3 
    ------ 
1 0111 +7 with a carry(overflow) of 1, but result should have been -9. 

Signed positive addition 

    0110 +6 
+ 0011 +3 
-------- 
    1001 -7 with no carry(probably an overflow of 1), but actual result should have been +9. 

Next is an unsigned addition 

    1111 +15 
+ 1010 +10 
--------- 
1 1001 +9 with an overflow/carry of 1, but actual result is +25. 

請讓我知道在這種情況下,我們是否忽略溢出異常,並在這種情況下,我們提高溢出異常和原因。我讀到的是無符號的,我們總是忽略溢出,但如果結果不正確(9而不是25),爲什麼我們忽略溢出?

回答

1

MIPS有符號和無符號附加指令的區別在於,如果2的補碼溢出,對於有符號添加,會生成整數溢出異常,對於未經簽名的異常不會產生異常。

說明在這裏描述:MIPS - Integer - Arithmetic。因此,在你的例子中,兩個「帶符號的加法」(例如,ADD指令)將產生異常,因爲和2的補碼溢出發生,並且「無符號加法」(例如ADDU指令)不會,即使通過結果在這裏也是錯誤的。程序員可以控制何時產生2的補碼溢出和異常。但是,指令集不允許32位無符號加法,因此如果您真的需要最後一位,請執行64位算術運算。

看到這些帖子也:

+0

感謝您的鏈接和解釋!你可以用我發佈的例子來解釋我嗎?另外,發生這種異常時,在硬件中採取的操作是什麼? –

+1

答案更新了3個示例的註釋。對於[MIPS異常處理](https://duckduckgo.com/?q=mips+exception+handling&t=h_&ia=web),Internet上有很多可以找到的東西。 –