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 存对应内存地址。
相关推荐
斑马1392 小时前
ARM学习笔记(二)——ARM汇编基础
汇编·arm开发·arm
ARM&开发(Haidong)1 天前
ADRV9026 Linux驱动文档详解
arm开发
斑马1391 天前
ARM学习笔记(一)——基本概念
arm开发·arm
斑马1391 天前
ARM学习笔记(三)——i.MX6ULL—LED点灯
arm开发
Awh-1 天前
ARM 裸机开发 day02 学习笔记
linux·arm开发·arm
M78佐菲1 天前
ARM学习笔记(四)
linux·arm开发·笔记·嵌入式硬件·学习
昌原的儿子LEO1 天前
i.MX6ULL 裸机开发 C 语言驱动与 BSP 工程管理学习总结
linux·arm开发·学习
AAA代码批发商2 天前
Days 46 i.MX6ULL 裸机开发|从内核切入外设,汇编点亮 LED(补充)
arm开发·嵌入式·裸机开发
xx~t2 天前
嵌入式——ARM——汇编2
linux·汇编·arm开发·嵌入式硬件·启动代码
M78佐菲2 天前
ARM学习笔记(三)
linux·arm开发·笔记·嵌入式硬件·学习