2015-10-14 81 views
-3

A + B(均爲32位)。 該函數將返回一個64位的值 我該怎麼辦?以64位組合返回兩個32位數的和

+1

_What我必須做的_指定的架構,並顯示你得到了什麼。通常,將操作數擴展到64位並添加它們。 – Jester

+0

這是我的問題。我如何將操作數擴展到64位?該體系結構是x86 – mystery

+1

2 32位數字導致33位數字最壞的情況,只是從那裏擴展。 32位增加的進位標誌會告訴你如何將其他32位全部或全部置零。這可能是擊敗了我打賭導致加入,然後加上隨身攜帶的練習... –

回答

2

假設在edx棧和結果上輸入:eax按照正常的慣例:

xor edx, edx  ; high dword 
mov eax, [esp + 4] ; 1st arg 
add eax, [esp + 8] ; add 2nd arg 
adc edx, 0   ; handle carry 
ret 
+0

或者用'adc edx,edx'保存一個字節,因爲它已經歸零了。儘管如此,難以閱讀來源。或者''setc dl'在Intel CPU上可能會更快(其中'adc'解碼爲兩個uops),但前提是您沒有立即使用edx(部分寄存器懲罰在haswell上)。 –