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 存对应内存地址。
相关推荐
Emtronix英创1 天前
RK3568 CAN驱动测试及使用说明
linux·arm开发·rk3568·全国产主板
时空自由民.3 天前
Arm Coretex-M核MCU做IAP/OTA升级时候为什么要做中断向量表地址偏移?
arm开发·单片机·嵌入式硬件
黑猫学长呀3 天前
存储宝典第1篇:Nand SCA是什么
arm开发·arm·nand·存储芯片·nandflash·onfi
Freak嵌入式3 天前
WIZnet-EVB-Pico2开始,用MicroPython玩转以太网开发
arm开发·人工智能·python·嵌入式硬件·机器人·嵌入式·micropython
振南的单片机世界3 天前
推挽输出:上管推、下管拉,驱动强但不“合群”
arm开发·stm32·单片机·嵌入式硬件
沃普天科技5 天前
USB显示器多屏异显多屏拼接IF8032 IT690 VL171 8801 RTD2556
arm开发·驱动开发·算法·计算机外设·音视频·硬件工程·pcb工艺
凉、介5 天前
ARM GICv3 学习笔记(一)
arm开发·笔记·学习·嵌入式
jake·tang5 天前
深度解析 VESC 参数辨识源码:电阻、电感与磁链
arm开发·c++·嵌入式硬件·算法·数学建模·傅立叶分析
星恒讯工业路由器5 天前
星恒讯4G工业级无线数传模组选型指南:接口、环境适配与典型应用场景
arm开发·嵌入式·无线通信·4g模组
代钦塔拉6 天前
CPU架构篇:Intel、AMD与x86、x64、ARM全解析
arm开发·架构