[英]Working with 64bit numbers under 32bit WinXP
我是组装的新手,我想知道为什么添加两个64位int的此函数无法正确计算:
添加.asm
bits 32
section .text
global _add64
_add64: ; adding a and b
enter 0,0
mov eax,[ebp+8] ; la
mov edx,[ebp+12] ; ha
add eax,[ebp+16] ; la+= lb
adc edx,[ebp+20] ; ha+= hb with cf
leave
ret
我在WinXP 32bit下使用NASM编译器,编译为
nasm -f win32 add.asm
与C程序一起使用
add64.c
#include <stdio.h>
long long add64(long long a, long long b);
void main() {
printf("%Ld",add64(100000000000LL,100000000000LL));
}
在gcc下一起编译为
gcc add64.obj add64.c -o add64.exe
结果是-1863462912
如何以及如何做才能获得预期的200000000000
?
组装功能在我看来还可以。 我强烈怀疑%Ld
说明符是错误的。 -1863462912是200000000000的低32位。
尝试%lld
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.