Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 汇编以64位返回两个32位数字的总和_Assembly_X86_Sum_Nasm - Fatal编程技术网

Assembly 汇编以64位返回两个32位数字的总和

Assembly 汇编以64位返回两个32位数字的总和,assembly,x86,sum,nasm,Assembly,X86,Sum,Nasm,A+B都是32位。 该函数将返回64位的值 我必须做什么?假设堆栈上有输入,并按照正常惯例生成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 我该怎么办?指定体系结构并显示您得到了什么。一般来说,将操作数扩展到64位并相加。这是我的问题。如何将操作数扩展到64位?

A+B都是32位。 该函数将返回64位的值
我必须做什么?

假设堆栈上有输入,并按照正常惯例生成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

我该怎么办?指定体系结构并显示您得到了什么。一般来说,将操作数扩展到64位并相加。这是我的问题。如何将操作数扩展到64位?架构是x862 32位数字,最坏的情况是33位数字,只需从那里扩展符号。32位加法的进位标志将显示在其他32位中输入的内容,可以是全1,也可以是全零。这可能会使我打赌会导致add后面跟着带进位的add的练习失败……您的代码是32位还是64位?你看过指令集参考了吗?你的号码是有符号的还是无符号的?你在用哪个汇编程序?我的代码是32,无符号数!在NASMOr中,使用adc edx、edx保存一个字节,因为它已经归零。不过,要阅读源代码就更难了。或者setc dl在英特尔CPU上的速度可能更快,其中adc解码为两个UOP,但前提是不立即使用edx,在前置haswell上使用部分寄存器惩罚。