我正在尝试将此段c代码转换为64位nasm
int gcd ( int a, int b )
{
int c;
while ( a != 0 ) {
c = a;
a = b%a;
b = c;
}
return b;
}
但是我不确定我的错误在哪里,我想也许有一些关于堆叠的东西,我不知道 这就是我做的事情
调用
push word[max]
push word[min]
call gcf
pop word[num1_ones]
堆叠功能
gcf:
mov ebp, esp
while:
cmp word[ebp+4], 0
je return
mov dx, 0
mov ax, word[ebp+6]
mov bx, word[ebp+4]
div bx
mov word[ebp+4], dx
mov word[ebp+6], bx
jmp while
return:
ret 2
当我跑步时,我明白了:
答案 0 :(得分:0)
缺少的显而易见的事情是EBP的推/弹。
另外,您是以16位还是32位模式运行?这会影响CALL推送的返回地址的大小,这会影响您的抵消...在您阐明如何构建/运行此规则之前,我无法说出更具体的内容。
我建议使用调试器来查看寄存器/内存。