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 存对应内存地址。
相关推荐
森G3 小时前
七、04ledc-sdk--------makefile有变化
linux·c语言·arm开发·c++·ubuntu
VekiSon7 小时前
Linux内核驱动——杂项设备驱动与内核模块编译
linux·c语言·arm开发·嵌入式硬件
AI+程序员在路上8 小时前
Nand Flash与EMMC区别及ARM开发板中的应用对比
arm开发
17(无规则自律)14 小时前
深入浅出 Linux 内核模块,写一个内核版的 Hello World
linux·arm开发·嵌入式硬件
梁洪飞1 天前
内核的schedule和SMP多核处理器启动协议
linux·arm开发·嵌入式硬件·arm
代码游侠2 天前
学习笔记——Linux字符设备驱动
linux·运维·arm开发·嵌入式硬件·学习·架构
syseptember2 天前
Linux网络基础
linux·网络·arm开发
代码游侠2 天前
学习笔记——Linux字符设备驱动开发
linux·arm开发·驱动开发·单片机·嵌入式硬件·学习·算法
程序猿阿伟2 天前
《Apple Silicon与Windows on ARM:引擎原生构建与模拟层底层运作深度解析》
arm开发·windows
wkm9562 天前
在arm64 ubuntu系统安装Qt后编译时找不到Qt3DExtras头文件
开发语言·arm开发·qt