我有分配计算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]
内存位置如何运行程序或程序如何执行?
答案 0 :(得分:1)
使用__fastcall调用约定,您可以要求在寄存器中传递参数。除非你创建基于堆栈的变量以便以后使用,否则这应该使你的函数序言(推送ebp等)和结尾(离开)变得冗余。
Visual C ++有一个__fastcall实现,但GCC也处理它。有关调用约定的信息,请参阅this document。
只是注意 - 如果赋值要求您使用堆栈帧,则需要使用__cdecl或__stdcall调用约定来获取计算GCD的参数。
答案 1 :(得分:0)
好吧,你的函数实际上在eax
和ebx
中使用它的参数,而不是使用压入堆栈的参数。如果这不是您想要的,请在mov ebp, esp
:
mov eax, [ebp + 8]
mov ebx, [ebp + 12]