ARM汇编的37个通用寄存器

37个通用寄存器示意图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gxs2q6vS-1635731778473)(en-resource://database/963:1)]

1.每种模式下看到的寄存器不一样 每种模式下最多看到18个寄存器 其他的寄存器名字相同但是当前模式看不见。 2.影子寄存器。如图的r14在arm中有6个r14(也叫sp)的寄存器,每种特定处理器模式下只有一个r14可以被看到,这种设计叫影子寄存器(banked register)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-djGVeYNm-1635731778480)(en-resource://database/962:1)]

    ARM共有37个寄存器,都是32位长度 37个寄存器中30个为“通用”型,1个固定用作PC,一个固定用作CPSR,5个固定用作5种异常模式下的SPSR。

CPSR 程序状态寄存器

重要的 判断 程序状态的 具体的32位

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UZ7RDR6c-1635731778486)(en-resource://database/964:1)]

    条件位: N = Negative result from ALU Z = Zero result from ALU C = ALU operation Carried out V = ALU operation oVerflowed Q 位: 仅ARM 5TE/J架构支持 指示饱和状态 J 位 仅ARM 5TE/J架构支持 J = 1: 处理器处于Jazelle状态 中断禁止位: I = 1: 禁止 IRQ. F = 1: 禁止 FIQ. T Bit 仅ARM xT架构支持 T = 0: 处理器处于 ARM 状态 T = 1: 处理器处于 Thumb 状态 Mode位: 处理器模式位 - 对应七种工作模式

补充说明:

    CPSR中各个bit位表明了CPU的某些状态信息,这些信息非常重要,和后面学到的汇编指令息息相关(譬如BLE指令中的E就和CPSR中的Z标志位有关) CPSR中的I、F位和开中断、关中断有关 CPSR中的mode位(bit4~bit0共5位)决定了CPU的工作模式,在uboot代码中会使用汇编进行设置。

PC(r15只能是r15) 程序控制寄存器

    PC(Program control register)为程序指针,PC指向哪里,CPU就会执行哪条指令(所以程序跳转时就是把目标地址代码放到PC中) 整个CPU中只有一个PC(CPSR也只有一个,但SPSR有5个)。

SPSR:程序状态保存寄存器

SPSR用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态。 SPSR用来进行异常处理,有以下功能:

    保存ALU中的当前操作信息。 控制允许和禁止中断。 设置处理器的运行模式。
经验分享 程序员 微信小程序 职场和发展