【Cortex-M4分支跳转指令、内存访问指令、ARM AAPCS规则、异常处理】

分支跳转指令

B跳转指令

BL跳转指令

BX跳转指令

BLX跳转指令

IT指令

内存访问指令

LDR/STR指令

LDM/STM指令

IB/DA为ARM指令集中的

PUSH/POP指令

ARM AAPCS规则

为了使不同编译器编译的程序之间能够相互调用,必须为子程序间的调用规定一定的规则。AAPCS就是这样一个标准。AAPCS中定义了ARM寄存器使用规则如下:

1.子程序间通过寄存器R0-R3传递参数。如果参数多于4个,则多出的部分用堆栈传递。被调用的子程序在返回前无须恢复寄存器R0-R3的内容。AAPCS 规定返回值存放在R0(如果是64位值,则用R0-R1)。

2.在子程序中,使用寄存器R4-R11保存局部变量。如果在子程序中使用到了寄存器R4-R11中的某些寄存器,子程序进入时必须保存这些寄存器的值,在返回前必须恢复这些寄存器的值;对于子程序中没有用到的寄存器则不必进行这些操作。在Thumb程序中,通常只能使用寄存器R4-R7来保存局部变量。

3.寄存器R12用做子程序间scratch寄存器(用于暂存临时值),记作IP。使用后无需恢复。

4.寄存器R13用做数据栈指针,记作SP。在子程序中寄存器R13不能用做其他用途。寄存器SP在进入子程序时的值和退出子程序时的值必须相等。

5.寄存器R14称为连接寄存器,记作LR。它用于保存子程序的返回地址。如果在子程序中保存了返回地址,寄存器R14则可以用做其他用途。

6.寄存器R15是程序计数器,记作PC。它不能用做其他用途。

异常处理

相关推荐
oshan20121 天前
零基础STM32入门教程--10-PWM 呼吸灯
stm32·单片机·嵌入式硬件
Messy create1 天前
【BMS-AFE-温度检测】
stm32·单片机·能源
桃蹊、1 天前
串口/网络透传实战:FreeRTOS 多任务架构与连接池设计
stm32·物联网·wifi·freertos
新晨单片机设计1 天前
S001A-基于STM32单片机超声波视力保护仪【Proteus仿真+Keil程序+原理图】
stm32·单片机·proteus
星河单片机1 天前
STM32驱动Y01-3IN1空气质量模块+OLED显示完整教程
stm32·单片机·嵌入式硬件·空气质量·甲醛检测·二氧化碳检测·tvoc检测
玩转单片机与嵌入式1 天前
深入浅出TinyML 21:INT8量化改变了模型中的哪些数据?
stm32·深度学习·tinyml
别催小唐敲代码1 天前
stm32_mpu6050_滤波教程
stm32·单片机·嵌入式硬件
一条破秋裤1 天前
STM32 学习笔记:GPIO 输出实验——LED 闪烁、流水灯与蜂鸣器
笔记·stm32·学习
一条破秋裤1 天前
STM32 学习笔记:GPIO 输出原理与硬件设计
笔记·stm32·学习
单片机仿真设计1 天前
【proteus仿真设计】基于 STM32 单片机火灾监测报警系统设计(仿真图+程序)
stm32·单片机·嵌入式硬件·proteus·毕设