汇编学习5
汇编函数
今天用汇编完成一个函数,还是计算两个数的和
函数流程概述
- 函数调用者将参数压入栈中
- 被调用函数创建自己的栈帧
- 函数执行,完成计算
- 函数返回,清理栈帧并返回结果
代码示例
1 | section .text |
代码解释
主程序部分(_start)
push dword 5和push dword 3:将参数 5 和 3 压入栈中call add_two_numbers:调用add_two_numbers函数add esp, 8:清理栈中压入的参数(每个参数 4 字节,共 8 字节)
函数部分(add_two_numbers)
push ebp和mov ebp, esp:创建新的栈帧,保存上一个栈帧的基址mov eax, [ebp+8]:从栈帧中获取第一个参数mov ebx, [ebp+12]:从栈帧中获取第二个参数add eax, ebx:将两个参数相加,结果存入eaxmov esp, ebp和pop ebp:恢复之前的栈帧ret:返回到调用者
栈帧结构
调用 add_two_numbers 函数时,栈的结构如下
1 | 高地址 |