堆叠在NASM装配中

时间:2016-10-04 21:27:25

标签: assembly x86 stack nasm

我正在尝试将此段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

当我跑步时,我明白了:
terminal output

1 个答案:

答案 0 :(得分:0)

缺少的显而易见的事情是EBP的推/弹。

另外,您是以16位还是32位模式运行?这会影响CALL推送的返回地址的大小,这会影响您的抵消...在您阐明如何构建/运行此规则之前,我无法说出更具体的内容。

我建议使用调试器来查看寄存器/内存。