通用寄存器
ARM 64包含31个64bit寄存器,记为X0~X30,32位寄存器为W0~W30。

- X0~X7:八个寄存器用来存放函数调用的8个参数,其中X0还用来存放函数的返回值,若参数个数大于8,就采用栈来传递。
- X29:Frame Pointer (FP),栈帧寄存器(等同于rbp),在每次进入函数时更新,用于记录每个函数的栈帧位置,方便函数操作变量和参数
- X30:Link Register (LR),用来存储函数调用时的返回地址。在调用函数时会将下一条指令的地址放入X30寄存器
专用寄存器
ARM架构中的专用寄存器主要包括
- 程序状态寄存器(CPSR)
- 备份的程序状态寄存器(SPSRs)
其中SPSR是用来保存中断前的CPSR中的值
寻址方式
和x86架构一样,都采用[ ]来表示内存单元地址,采用LDR(load reg)和STR(store reg)来寻址
- LDR W0,[addr] 读取32位的地址
- LDR X0 ,[addr] 读取64位的地址
- STRB W0,[addr] 将W0低8位的值放入addr中(byte)
- STRH W0,[addr] 将W0低16位的值放入addr中(half word)
- STRW W0,[addr] 将W0的值放入addr中(word)
- LDR W0,[addr,#12] 变址寻址 ,将读取addr+12地址处32位的值给W0
- LDR W0,[X1] 变址寻址 ,将读取X0所指地址处32位的值给W0
- LDR W0,[X1,#1] ! 前变址寻址 ,更新X1为X1+1,再将读取X0所指地址处32位的值给W0
- LDR W0,[X1], #1 后变址寻址 ,读取X1所指地址处32位的值给W0,再更新X1为X1+1
无条件转移和条件转移
无条件转移
- B (Branch):无条件跳转到指定的标签位置。
- BL (Branch with Link):跳转到指定位置并保存返回地址(PC+4)到链接寄存器(LR)。常用于函数调用。
- BX (Branch and Exchange):跳转到寄存器中指定的地址,并根据地址的低位决定是使用 ARM 还是 Thumb 模式。可以实现函数的动态调用。
- BLX (Branch with Link and Exchange):跳转并保存返回地址,且根据地址的低位决定使用 ARM 或 Thumb 模式。
条件转移
- BEQ 相等
- BNE 不等
- BPL 非负
- BMI 负
- BCC 无进位
- BCS 有进位
- BLO 小于(无符号数)
- BHS 大于等于(无符号数)
- BHI 大于(无符号数)
- BLS 小于等于(无符号数)
- BVC 无溢出(有符号数)
- BVS 有溢出(有符号数)
- BGT 大于(有符号数)
- BGE 大于等于(有符号数)
- BLT 小于(有符号数)
- BLE 小于等于(有符号数)
待更。。
Comments NOTHING