我在汇编程序(nasm)中编写代码,我想要包含函数,目前我已经
function0:
code
jmp return0
Run Code Online (Sandbox Code Playgroud)
函数通过跳转到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
Run Code Online (Sandbox Code Playgroud)
调用约定规定EAX寄存器应包含返回值.另请注意,__ cdecl调用约定会在堆栈上获取参数.请查看上述链接页面中的示例.NASM功能将设置其堆栈帧并从堆栈中获取参数以便在函数中使用.该值存储在EAX.
| 归档时间: |
|
| 查看次数: |
15854 次 |
| 最近记录: |