0

我是汇编新手,我想知道为什么这个添加两个 64 位整数的函数不能正确计算:

add.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

4

1 回答 1

3

汇编功能对我来说看起来不错。我强烈怀疑说明%Ld符是错误的。-1863462912 是 200000000000 的低 32 位。

试试%lld

于 2013-11-09T19:21:30.110 回答