Chapter 3 Procedures

#CSAPP
使用汇编语言支持 Procedures 需要实现以下机制

传递控制

Passing Control Instructions.png
call 指令将下一条指令的地址(返回地址)压入栈中,并跳跃到 Label 指定的内存段开始执行
ret 将栈顶的返回地址弹出并跳跃到返回地址(需要保证 %rsp 正确地处在返回地址处)

传递数据

Data Transfer.png
对于简单的基础类型数据的传入而言

对于基础数据类型的数据的返回,储存在 %rax 中

Assembly Operand Specifier.png

局部内存分配

局部内存包括栈和寄存器。各个 procedures 的栈帧是互不重叠的,直接增减 %rsp 进行分配和释放即可,而寄存器是公用的,需要一些额外的规则来保证 caller 储存的数据不会再 callee 中被毁坏。

必须储存在栈空间上的情况

注意栈空间上的所有数据储存必须满足对应数据长度的对齐要求