將以下C代碼翻譯爲MIPS程序集的最佳解決方案是什麼?最佳解決方案:add或addu
x = A[i];
注意x ⇨ $t0
,A[] ⇨ $s0
,i ⇨ $s1
。
隨着add
:
sll $t0, $s1, 2
add $t0, $t0, $s0
或addu
:
sll $t0, $s1, 2
addu $t0, $t0, $s0
我知道add
和addu
之間的difference,但我不明白何時使用一個或另一個。
將以下C代碼翻譯爲MIPS程序集的最佳解決方案是什麼?最佳解決方案:add或addu
x = A[i];
注意x ⇨ $t0
,A[] ⇨ $s0
,i ⇨ $s1
。
隨着add
:
sll $t0, $s1, 2
add $t0, $t0, $s0
或addu
:
sll $t0, $s1, 2
addu $t0, $t0, $s0
我知道add
和addu
之間的difference,但我不明白何時使用一個或另一個。
C代碼不會在整數溢出時拋出異常。所以組裝也不應該,使用addu
。
add
in MIPS在上發生異常溢出。
讓我們假設你想索引到一個大數組中,並且數組在(signed)INTPTR_MAX
和(signed)INTPTR_MIN
之間交叉。如果你使用add
,這會引發一個異常,儘管你可能已經在數組邊界內。
你在數組索引中更需要關注的是無符號的溢出,從(unsigned)UINTPTR_MAX
跨越到zero
,但MIPS不幫你在那裏,AFAIK。
如果你瞭解不同之處,那麼你應該明白什麼時候使用它們。你想要一個陷阱溢出或不? –
我不知道。如果我想要一個陷阱,我必須選擇什麼樣的基礎? –
如果您需要詢問是否需要溢流閥,則不需要溢流閥。 – markgz