繁体   English   中英

在32位WinXP下使用64位数字

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM