ARM汇编基础
本文最后更新于 2025年9月24日 晚上
ARM汇编基础
基础
CPU、寄存器、内存、指令的关系
CPU用于处理各种指令,寄存器用于暂时存放各种指令所需要的参数,内存相当于一个大寄存器,用于长期存储指令所需要的各种数据
ARM架构家族
ARM Architecture (ARMv7,ARMv8,ARMv6-M等):是一套指令集架构(ISA),定义了基本的指令,寄存器,异常模型和内存模型
Cortex Series:基于架构实现的具体处理器核心设计
| 特性 | Cortex-A**(Application)** | Corter-M**(Microcontroller)** | Cortex-R (Real-time) |
|---|---|---|---|
| 运行的OS | Linux,Android,Windows | FreeRTOS, Zephyr, μC/OS | RTOS (有MPU) |
| 架构版本 | ARMv7-A,ARMv8-A,ARMv9-A | ARMv6-M, ARMv7-M, ARMv8-M | ARMv7-R, ARMv8-R |
| 核心特征 | 有内存管理单元(MMU) | 无MMU,有MPU (内存保护单元) | 有MPU,强调高实时性 |
| 应用举例 | 手机、平板、电视 | IoT传感器、智能家居设备、穿戴设备、电机控制 | 硬盘控制器、汽车刹车系统、通信基带 |
ARM状态与Thumb状态
ARM状态
指令集:执行ARM指令集
指令长度:32位,4个字节长度
Thumb状态
指令集:执行Thumb指令集
指令长度:每条指令是16,2个字节长度
特点:
1.代码密度高:其大小是ARM代码的65%,极大降低存储成本
| 特性 | ARM 状态 | 传统 Thumb 状态 | Thumb-2 技术 |
|---|---|---|---|
| 架构版本 | ARMv4T 及之后 | ARMv4T 至 ARMv5TE | ARMv6T2, ARMv7 及之后 |
| 指令长度 | 32位 | 16位 | 混合:16位 & 32位 |
| 代码密度 | 低 (~100%) | 高 (~65%) | 很高 (~74%), 接近纯Thumb |
| 性能 | 高 | 较低 | 非常高,接近纯ARM |
| 主要应用 | 早期高性能应用 | 极致追求代码密度的v5/v6设备 | 现代主流:Cortex-A, R, M系列 |
| 状态切换 | 需要与Thumb切换 | 需要与ARM切换 | 在Cortex-M上无状态概念,只有一种模式 |
大端小端
小端:低位字节存放在低地址
1 | |
大端:低位字节存放在高地址
1 | |
| 特性 | 小端模式 (Little-Endian)(当前主流) | 大端模式 (Big-Endian) |
|---|---|---|
| 存储顺序 | 低位字节在低地址 | 高位字节在低地址 |
| 人类可读性 | 反直觉,需从后往前读 | 直观,与书写顺序一致 |
| 主流架构 | Intel x86, ARM (默认) | 网络字节序, Motorola 68k |
静态分析
寄存器专题
R0-R3:参数/结果寄存器
功能:用于向函数传递前4个参数,如果参数超过4个,多余的会通过栈传递,R0在函数返回时,通常用于存放函数的返回值
R4-R8,R10-R11:变量寄存器
功能:用于函数内部的局部变量,如果一个函数要使用他们比如使用前保存其值(压入栈),并在函数返回前恢复原值
R7:帧指针,指向栈帧底部
R9:取决具体ABI,可能是变量寄存器,也可以有其他用途
R12:内部过程调用临时寄存器
R13:栈指针SP,指向栈帧顶部
R14:又叫LR(Link Register),用于保存函数的返回地址
R15:PC,程序计数器,指向下一条执行的指令
指令集专题
数据传输指令
1 | |
算数运算指令
1 | |
比较与分支命令
1 | |
ARM汇编基础
http://example.com/2025/09/13/ARM汇编基础/