2009-12-29 44 views
10

當我嘗試在MIPS無符號整數工作,每個操作我做的結果仍然簽署了(也就是整數都在2的補數),儘管我每次執行操作是一個無符號之一:addumultu等第四...爲什麼MIPS在無符號數字上的操作會給符號結果?

當我在[2^31, 2^32 - 1]範圍內打印數字時,我得到了它們的「溢出」負值,就好像它們被簽名一樣(我猜他們是)。

雖然,當我嘗試這樣的事:

li $v0, 1 
li $a0, 2147483648    # or any bigger number 
syscall 

印刷數量總是2147483647 (2^31 - 1)

我很困惑...我缺少什麼? PS:我沒有包括我的代碼,因爲它不是非常可讀的(這是彙編代碼),拋開這個問題, 似乎工作正常。如果有人覺得有必要,我會馬上加入!

回答

14

Wikipedia

的MIPS32指令集指出,作爲無符號添加的部分單詞和減指令,是用詞不當。 命令的符號和無符號版本之間的差異是不操作數的符號擴展(或缺乏),而是陷阱控制是否在溢出執行(例如添加)或溢出被忽略(無符號添加)。這些指令的立即操作數CONST始終是符號擴展的。

MIPS Instruction Reference

所有算術立即值符號擴展[...]符號和無符號指令之間的唯一區別是,簽署指令可以產生溢出異常和未簽名的指令可以不。

+0

我一直在尋找所有過網的答案...任何地方,但明顯。謝謝! – dankilman 2009-12-29 21:12:26

+0

那麼爲什麼他們使用的術語「符號和無符號」,而不是像「檢查,並取消選中」? – dan04 2011-02-02 02:48:39

+0

這是一個用詞不當。閱讀第一個報價。 – 2011-09-19 15:23:20

1

它看起來像我真正的問題是你用來打印數字的系統調用。它看起來總是把你通過的東西解釋爲簽名,並且可能會被綁定。

相關問題