2015-10-14 82 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上)。 –