2014-07-07 161 views
2

將以下C代碼翻譯爲MIPS程序集的最佳解決方案是什麼?最佳解決方案:add或addu

x = A[i]; 

注意x ⇨ $t0A[] ⇨ $s0i ⇨ $s1

隨着add

sll $t0, $s1, 2 
add $t0, $t0, $s0 

addu

sll $t0, $s1, 2 
addu $t0, $t0, $s0 

我知道addaddu之間的difference,但我不明白何時使用一個或另一個。

+2

如果你瞭解不同之處,那麼你應該明白什麼時候使用它們。你想要一個陷阱溢出或不? –

+0

我不知道。如果我想要一個陷阱,我必須選擇什麼樣的基礎? –

+3

如果您需要詢問是否需要溢流閥,則不需要溢流閥。 – markgz

回答

2

C代碼不會在整數溢出時拋出異常。所以組裝也不應該,使用addu

0

add in MIPS在上發生異常溢出。
讓我們假設你想索引到一個大數組中,並且數組在(signed)INTPTR_MAX(signed)INTPTR_MIN之間交叉。如果你使用add,這會引發一個異常,儘管你可能已經在數組邊界內。
你在數組索引中更需要關注的是無符號的溢出,從(unsigned)UINTPTR_MAX跨越到zero,但MIPS不幫你在那裏,AFAIK。