2011-10-15 186 views
5

大多數編譯器如何在32位環境中對64位操作數(例如long int)執行操作?換句話說,是否有辦法在單個步驟中實現這些操作,或者我們需要訪問多個內存位置來實現這些操作?32位體系結構中的64位操作數的操作?

+0

或多個寄存器而不是 –

回答

5

它們使用兩個寄存器來保存一個64位值。一個用於較低的32位,另一個用於高32位。

對於x86,64位加法/減法是用做附加有進位加減法,與借款說明:

add %eax, (lower 32-bits of operand) 
adc %edx, (upper 32-bits of operand) 

64位乘法要複雜得多,但使用也做32位乘法和32位帶附加指令的組合。 (類似於2位長乘法)

對於加載和存儲,是的,需要將兩個32位值加載到/從兩個寄存器存儲/存儲。

類似地,可以在64位硬件上實現128位整數。 GCC支持這個擴展。

+0

32位(x86)硬件上的128位整數是什麼? – 2011-10-15 23:17:23

+1

它變得醜陋。在這一點上它與多精度算術沒什麼兩樣。另外,你會鏈接3'adc'指令。 (不要忘記你對進位標誌有依賴性,可能會導致你的流水線癱瘓)。對於乘法運算,你必須做16×32位乘法和一堆'add'和'adc'。 ..我不知道任何支持這一點的編譯器。 – Mysticial

相關問題