嵌入式硬件第五弹——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指向栈顶下一个空位置。
相关推荐
u1521096484913 小时前
S.S.Audio PRO A2音频隔离器
嵌入式硬件·音视频·实时音视频·视频编解码·视频
zd84510150013 小时前
RS485 总线详解
单片机·嵌入式硬件
半条-咸鱼14 小时前
【STM32】I2C协议原理、HAL读写与OLED显示操作
嵌入式硬件·c·信息与通信
wohoo_wangzi15 小时前
苏州晟雅泰电子:关于W25Q128JVSIQ这个芯片物料的参数,规格及应用领域
嵌入式硬件
科芯创展17 小时前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件
AndyHeee17 小时前
【SVC、PendSV(系统异常) 与 外设 IRQ 、NVIC笔记】
arm开发
集芯微电科技有限公司17 小时前
四通道2A输出集成功率电感降压模块专为紧凑型方案设计
人工智能·单片机·嵌入式硬件·生成对抗网络·计算机外设
踏着七彩祥云的小丑17 小时前
嵌入式测试学习第 37 天:异常场景测试:断电、拔插、干扰、非法指令
单片机·嵌入式硬件·学习
望眼欲穿的程序猿18 小时前
读取芯片内部温度传感器
嵌入式硬件·rust
望眼欲穿的程序猿18 小时前
ADC 模拟电压采集
嵌入式硬件·rust