【发布时间】:2020-07-04 22:21:49
【问题描述】:
假设我有一个像这样的 nasm 函数:
inc:
mov rax,[rsp + 8]
add [rax],BYTE 1
ret
我这样调用这个函数:
push some_var
call inc
我想通过堆栈将参数传递给函数,所以我推送some_var,然后调用我的函数。在函数中,我的项目在堆栈中排在第二位,因此我将其视为:mov rax,[rsp+8]
我的问题是:调用函数后,我应该以某种方式从堆栈中弹出我的参数吗?如果是这样,我可以以某种方式从堆栈中删除它,我的意思是弹出它,但不注册? (因为我不再需要这个参数了。)
更新:我发现我可以简单地add rsp,8,这就是我可以从堆栈中删除项目的方法。但这是好的做法吗?调用函数后从堆栈中删除参数?
【问题讨论】:
-
您可以将参数从堆栈中弹出或增加堆栈指针以将其删除。两者都很好并且被编译器使用。
标签: assembly x86-64 nasm callstack calling-convention