嵌入式硬件第五弹——ARM(2)

(续接上篇)

1.7 立即数

立即数:直接写在指令里的数值,不需要从寄存器、内存里读取。

判断规则:

  • 数值范围0~0xFF(一定是);
  • 二进制最高位1与最低位1之间位数不超过8位;
  • 二进制序列凑够8位后右边偶数个0。

2. 汇编指令

2.1 指令

2.1.1 ldr & str

ldr

  • 功能1:向寄存器中加载非立即数
  • 功能2:将RAM中的数据加载到寄存器

str

  • 功能:将寄存器中的数据写入RAM指定空间中

2.1.2 bic & orr

bic: 将寄存器中的值某几位清零(取决于立即数哪几位为1)

orr:将寄存器中的值某几位值1(取决于立即数哪几位为1)

2.1.3 b指令

无条件跳转

  • bl:函数调用时,会将返回地址保存到lr寄存器
  • b:函数调用时,无法将返回地址保存到lr寄存器
  • bx:跳转到lr寄存器对应返回地址

汇编调用C语言传参时:

  • 如果参数少于或等于4个时,可以通过通用寄存器R0 - R3进行传参
  • 当参数超过4个时,必须通过栈进行传参(入栈保护 出栈恢复)
  • C语言函数返回的结果保存到R0寄存器

2.1.4 cpsr寄存器操作

  1. 将cpsr寄存器中的值读到通用寄存器中R0

  2. 将R0寄存器中低5位的值先清0 bic

  3. 将R0寄存器中的低5位置设置为:10000 orr

  4. 将R0寄存器中的值回写到CPSR寄存器

2.1.5 mrs & msr

mrs指令:读取某个特殊寄存器的值到通用寄存器

msr指令:将某个通用寄存器的值写入到特殊寄存器

2.2 栈的分类

满减栈(ARM默认使用)、空减栈、满增栈、空增栈

  • 减栈:入栈时sp向下移动,地址变小;
  • 增栈:入栈时sp向上移动,地址变大;
  • 满栈:sp指向栈顶有效数据;
  • 空栈:sp指向栈顶下一个空位置。
相关推荐
星游路6 小时前
14单片机:LCD12864
单片机·嵌入式硬件
兴通物联科技7 小时前
SMT PCB 微小 DataMatrix 码扫不动问题分析 兴通 XT8601B 600 万像素工业读码器落地实践
大数据·人工智能·单片机·嵌入式硬件·算法·计算机视觉
国科安芯9 小时前
轨道供电韧性:ASP4644四通道降压架构在低轨卫星平台电源管理中的适用性分析
运维·网络·数据库·嵌入式硬件·架构·状态模式·低轨卫星星座
天空'之城12 小时前
单片机基础核心知识点汇总(十七)
单片机·嵌入式硬件
我不管我就要叫小猪13 小时前
STM32——SPI
stm32·单片机·嵌入式硬件
Ryan.F13 小时前
电容(capacitance)
单片机·嵌入式硬件
LCG元15 小时前
【实战】STM32 从零实现 Modbus RTU 从站:寄存器映射、CRC 校验与串口中断解析
stm32·单片机·嵌入式硬件
尼喃15 小时前
PW1555平芯微代理商,DFN3X3-10封装耐受30V浪涌非持续工作
嵌入式硬件
云泽80815 小时前
深入浅出 STM32(十九):从寄存器原理到 volatile 避坑实战
stm32·单片机·嵌入式硬件
喜欢吃燃面16 小时前
Linux网络编程深度解析:从Socket API到自定义协议设计
linux·网络·arm开发