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 存对应内存地址。
相关推荐
szxinmai主板定制专家18 小时前
ARM+FPGA 数控机床控制器:选 CODESYS SoftMotion CNC,还是基于 LinuxCNC 自研搭建?架构、授权、实时性、量产风险深度对比
arm开发·fpga开发·codesys·数据采集卡·linuxcnc·rk3576
女神下凡18 小时前
芯参谋(79):嵌入式学习进阶_(硬件与软件)深入实践指南
arm开发·单片机·嵌入式硬件·学习·fpga开发·设计规范
abc light18 小时前
ARM 裸机开发(1)——ARM 体系结构
c语言·arm开发
abc light20 小时前
ARM 裸机开发(2)——ARM 汇编与启动代码
汇编·arm开发
女神下凡2 天前
芯参谋(77):裸机(无 OS)存储驱动开发指南
arm开发·单片机·嵌入式硬件·设计规范·1024程序员节
女神下凡2 天前
芯参谋(76):电源监控复位芯片电路设计指南
arm开发·单片机·嵌入式硬件·fpga开发·设计规范
陌上花开缓缓归以2 天前
liteos 内存分布
arm开发
u0109053593 天前
(永久免费)树莓派 / 香橙派等开发板,安装神卓互联巴比达内网穿透安装教程(Linux ARM 版 V9.4.1)
linux·运维·arm开发
打工仔折腾 AI3 天前
后端部署避坑:吃透IPv4地址、网络接口与CIDR前缀的实际应用
arm开发·人工智能·后端·python·性能优化
工控存储研习4 天前
嵌入式设备启动时间优化:从上电到应用就绪,每一毫秒怎么抠
arm开发