Arm学习总结之 32位和64位寄存器

本文详细介绍了32位和64位ARM架构中的寄存器分配与使用情况。32位ARM拥有15个通用寄存器及专门的程序计数器(PC)等;而64位ARM则拥有32个寄存器,并阐述了不同模式下寄存器的变化。此外还解释了函数参数和返回值如何通过寄存器进行传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

32位

arm在任何模式(9种)下 都有的以下寄存器

  • 15个通用寄存器,包括R0-R12, SP(the Stack SP), LR(Link Register)
  • 1 个PC(Program Counter)
  • 1 一个APSR(Application Progrem Status Register)、
  • 其中R0~R3 用于函数调用入参,32位最多支持4个入参,当多于4个入参是将通过压栈方式进行传递。栈的方式为先进后出,估参数大于4个时 入栈顺序与参数顺序正好相反,子程序返回前无需回复R0~R3的值
  • R4~R11用于保存局部变量。函数进入后首先第一件事就是将R4~R11入栈保存(看局部变量用了多少个,不一定所有都需要入栈),然后才能用于本函数使用,本函数使用完之后,要将之前栈保存的数据恢复到R4~R11中。
  • R13为SP,时刻指向栈顶,当有数据入栈或出栈时,需要更新SP
  • R14为链接寄存器,主要是用作保存子程序返回的地址
  • R15为PC寄存器,指向将要执行的下一条指令地址
  • 程序返回值如果是32位 则用R0进行返回,为64位时则R0返回低位, R1返回高位

寄存器在各个模式下的分布:

 

 由上图可知:

  • 除了systerm和Hyp模式下,其他模式都有各自的 SP和LD寄存器
  • FIQ模式下,将会有R8_fiq,R9_fiq,R10_fiq,R11_fiq,R12_fiq,SP_fiq,LR_fiq等7个寄存器
  • Hyp模式下,有一个SP_hyp寄存器
  • 7 个SPSR寄存器
  • 1个 ELR_hyp寄存器(Hyp模式下)

综上所述,实际上共有43个寄存器。

64位 

 64位模式下,arm有32个寄存器

  • X0~X7:用于函数入参,最多支持8个函数入参,多余采用入栈方式
  • X0:用于返回函数结果,为64位,如果要返回128位X0为低位, X1为高位
  • X8 :主要用于子程序地址
  • X9~X15:用作临时变量寄存器,用于保存局部变量
  • X16~X17:为子程序内部调用寄存器
  • X18:平台寄存器,尽量少用
  • X19~X28:临时寄存器,使用时需要保存
  • X29:为PC指针寄存器
  • X30:为链接寄存器
  • X31为SP寄存器或者

参考资料 

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0801a/CJACFHCC.html 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Huo的藏经阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值