gpt4 book ai didi

assembly - 在汇编器中编写函数

转载 作者:行者123 更新时间:2023-12-04 14:25:30 32 4
gpt4 key购买 nike

我正在用汇编器(nasm)编写代码,而现在我想包含函数

function0:

code

jmp return0

通过跳转到function0调用该函数,返回链接到调用该函数的标签下方,
但是这仅在函数被调用一次的情况下有效,还有更好的方法吗?

最佳答案

(假设NASM x86)

使用call可以调用该函数,并使用ret从该函数返回。

当您键入call时,将发生下一条指令的地址被push写入堆栈的情况。当ret被命中时,它将在栈外寻址pop并将jmp指向该地址。

func:
xor eax, eax
mov eax, 10
add eax, 5
ret ;// essentially identical to: pop [register] -> jmp [register]


_start:
call func
mov ebx, eax ;// Address of this instruction is pushed onto the stack
;// ebx is now 15

调用约定规定 EAX寄存器应包含返回值。另请注意, __cdecl calling convention在堆栈上使用参数。看一下前面链接页面中的示例。 NASM功能将设置其堆栈框架并从堆栈中获取参数,以便在该功能中使用。该值存储在 EAX中。

关于assembly - 在汇编器中编写函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35735403/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com