ARM基础知识2

一、立即数

(1)立即数的定义

ARM 汇编中的立即数特指12 位立即数(imm12),是指令中直接包含的常量数值,无需从寄存器或内存读取,可直接参与 ADD、SUB、MOV 等指令的运算。

(2)12位立即数的判断标准

1.将待判断数值展开为 32 位二进制形式。

  1. 尝试对其进行偶数次(2N,N∈0-15)循环右移。

  2. 如果存在一种移位方式,使得移位后的数值满足「高 24 位全为 0,低 8 位为有效数据」,则该数为合法 12 位立即数;否则为非法。

二、b,bl,bx指令的区别

指令 英文全称 中文名称 核心功能与特点
B Branch 无条件分支指令 单纯执行地址跳转,修改 PC 寄存器值,无任何附加操作
BL Branch with Link 带链接的分支指令 跳转 + 自动保存返回地址,修改 PC 寄存器值
BX Branch and Exchange 带状态切换的分支指令 跳转 + 处理器指令集切换,修改 PC 寄存器值

三、ARM内核采用栈

ARM 内核(ARM7/ARM9/Cortex-A/R/M 全系列)统一采用【满递减栈 FD (Full Descending)】这是 ARM 的标准规定、默认配置、唯一主流栈模式。

满栈 (Full):SP(R13) 栈指针寄存器,永远指向「栈顶的有效数据」,不是空闲地址;

递减栈 (Descending):ARM 的栈空间从高地址分配,数据入栈时地址越来越小,栈向低地址生长。

四、CPSR中条件标志位

标志位 中文名称 置位条件
N 负数标志位 运算结果的最高位 (bit31) 为 1 时,N 被置位
Z 零标志位 运算的最终结果等于 0 时,Z 被置位
C 进位 / 借位标志位 1.无符号数加法:运算结果产生进位(超过 32 位,最高位向外溢出 1) 2. 无符号数减法:运算时没有产生借位(被减数 ≥ 减数
V 溢出标志位 针对有符号数的加减运算,出现 正溢出 或 负溢出 时,V 被置位

五、arm汇编调用c语言函数以及c语言函数调用汇编编写的函数,函数参数和返回值如何处理

两者相互调用严格遵循 ATPCS 标准,规则完全通用,无差异。

1.函数参数传递规则

  • 函数的第 1 个参数 → R0 、第 2 个参数 → R1 、第 3 个参数 → R2 、第 4 个参数 → R3;
  • 第 5 个及更多参数:剩余参数入栈传递;

2.函数返回值传递规则

  • 唯一规则:无论返回值是整型 / 字符 / 指针(32 位内),统一通过 R0 寄存器返回;超过 32 位的返回值,R0 存对应内存地址。
相关推荐
myy-learn2 天前
ARM-I2C 驱动优化与 LM75 温度传感器读取实践
arm开发·单片机·嵌入式硬件
kkkkkkkkkk_Z2 天前
新手自学嵌入式 | 学习日记:ARM内核启动代码、时钟系统(PLL/Prescaler/PFD)与IMX6ULL时钟配置
arm开发·学习
Tronlong创龙2 天前
IoTGateway可以让网关开发速度快一倍?
arm开发·嵌入式开发·硬件开发·工业控制·工业开发板
陌上花开缓缓归以3 天前
系统启动失败纪要
arm开发
我是场3 天前
我的NPI项目之-Touch的EE特性
android·arm开发
陌上花开缓缓归以3 天前
arm linux ddr 内存布局
linux·arm开发
女神下凡3 天前
芯参谋(43):DDR4_电路设计指南
arm开发·单片机·嵌入式硬件·设计规范
晚枫歌F4 天前
DPDK原理以及解析tcp/udp协议包
arm开发
szxinmai主板定制专家4 天前
基于 ARM+FPGA 雕刻机控制系统的设计
arm开发·人工智能·fpga开发·rk3576·半导体设备
女神下凡4 天前
芯参谋(41):DDR2_电路设计指南
arm开发·单片机·嵌入式硬件·设计规范