【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。它不能用做其他用途。

异常处理

相关推荐
不做无法实现的梦~11 小时前
STM32解析PPM协议
stm32·单片机·嵌入式硬件
番茄灭世神12 小时前
MCU开发常见软件BUG总结(持续更新)
c语言·stm32·单片机·嵌入式·gd32
Ar-Sr-Na13 小时前
STM32现代化AI开发指南-VSCode环境配置(macOS)
c语言·人工智能·vscode·stm32·嵌入式硬件·硬件工程
世微 如初14 小时前
AP5125 宽压大功率 LED 恒流驱动器:技术参数与应用设计指南
stm32·单片机·嵌入式硬件
弄曲幽篁16 小时前
stm32 USB虚拟串口
stm32·单片机·嵌入式硬件
学嵌入式的小杨同学16 小时前
STM32 进阶封神之路(四十一)FreeRTOS 中断管理、软件定时器、内存管理与低功耗模式|工业级实战完整版
vscode·stm32·单片机·嵌入式硬件·mcu·智能硬件·嵌入式实时数据库
yu859395816 小时前
基于MSP430 LaunchPad的蔬菜基地分布式无线低功耗温湿度监测系统
分布式·stm32·嵌入式硬件
学嵌入式的小杨同学16 小时前
STM32 进阶封神之路(四十)FreeRTOS 队列、信号量、互斥锁精讲|任务通信、同步、资源保护(超详细图文版)
c++·stm32·单片机·嵌入式硬件·mcu·架构·硬件架构
爱分享的阿Q2 天前
STM32现代化AI开发环境搭建:从Keil到VSCode+AI的范式转移
人工智能·vscode·stm32
bubiyoushang8882 天前
利用STM32实现Modbus通信(RTU从机方案)
stm32·单片机·嵌入式硬件