私はアセンブリが初めてで、2 つの 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 32ビットで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
か?