ARM汇编:栈帧、宏与C交互的深入解析
1. 栈帧的使用
在编写汇编代码时,当编写的函数较小时,可利用可用的寄存器完成所有工作,无需额外的内存。然而,当编写较大的函数时,常常需要比寄存器所能容纳更多的内存来存储变量。此时,为避免在 .data 段中造成混乱,可将这些变量存储在栈上。
但直接使用 PUSH 指令将变量压入栈并不实际,因为通常需要以随机顺序访问这些变量,而 PUSH/POP 指令遵循严格的后进先出(LIFO)协议。为在栈上分配空间,可使用减法指令将栈指针向下移动所需的字节数。
例如,若需要三个32位整数变量 a 、 b 和 c ,则需要在栈上分配12字节的空间(3个变量 × 4字节/字),可使用以下指令:
SUB SP, #12
此指令将栈指针向下移动12字节,为变量提供了栈上的内存区域。假设 a 存储在 R0 中, b 存储在 R1 中, c 存储在 R2 中,可使用以下指令将它们存储到栈上:
STR R0, [SP] @ Store a
STR R1, [SP, #4] @ Store b
STR R2, [SP,
超级会员免费看
订阅专栏 解锁全文
2304

被折叠的 条评论
为什么被折叠?



