我对堆栈有疑问

时间:2010-09-02 03:00:03

标签: assembly

我有分配计算GCD的两个号码。通过使用堆栈框架&我为此编写代码 -

.text 

GCD:
     push ebp
     mov ebp,esp

1:   cmp ebx,eax
     je  3f

      ja 2f

      sub ebx,eax
      jmp 1b

2:    sub eax,ebx
      jmp 1b

3:    leave
      ret

我得到了这段代码的答案,但我有一个问题,没有像[ebp+8]内存位置如何运行程序或程序如何执行?

2 个答案:

答案 0 :(得分:1)

使用__fastcall调用约定,您可以要求在寄存器中传递参数。除非你创建基于堆栈的变量以便以后使用,否则这应该使你的函数序言(推送ebp等)和结尾(离开)变得冗余。

Visual C ++有一个__fastcall实现,但GCC也处理它。有关调用约定的信息,请参阅this document

只是注意 - 如果赋值要求您使用堆栈帧,则需要使用__cdecl或__stdcall调用约定来获取计算GCD的参数。

答案 1 :(得分:0)

好吧,你的函数实际上在eaxebx中使用它的参数,而不是使用压入堆栈的参数。如果这不是您想要的,请在mov ebp, esp

之后加上这两条说明
mov eax, [ebp + 8]
mov ebx, [ebp + 12]