C与汇编(NASM) (1)

DYLARIS / 2024-10-13 / 原文

C代码

int main()
{
  return 0;
}

nasm风格的汇编代码

section .text  ; 定义代码段
  global main  ; 声明main是一个全局符号,以便链接器能够找到
  extern exit  ; 引入exit函数

main:          ; 定义main函数
  push rbp     ; 保存当前基址指针,即保存调用者的栈帧
  mov rbp, rsp ; 将栈顶指针的值赋给基址指针,设置新的栈帧

  mov eax, 0   ; 返回值0存储在eax寄存器中

  pop rbp      ; 恢复基址指针
  ret          ; 返回调用者,从栈中弹出返回地址,并将程序计数器 RIP 设置为该地址,即返回调用处继续执行

总结

  • 入口函数main的声明与定义
  • 栈帧的设置和恢复,即栈帧管理
  • 准备返回值,存储在eax寄存器中,一种约定