共计 2378 个字符,预计需要花费 6 分钟才能阅读完成。
ARM 是 Advanced RISC Machine 的缩写,能够了解为一种处理器的架构,还能够将它作为一套残缺的处理器指令集。
RISC(Reduced Instruction Set Computing) 精简指令集计算机:一种执行较少类型计算机指令的微处理器。
处理器指令集: 计算机解决命令的指令汇合。ARM 指令集是一组提供一整套运算的 32 位指令。
ARM 处理器是典型的 RISC 处理器,因为它们执行的是加载 / 存储体系结构。只有加载和存储指令能力拜访内存。数据处理指令只操作寄存器的内容。
目前市面上的安卓手机绝大多数的 CPU 都是基于 ARM 架构的,然而也有多数采纳了英特尔 X86 架构的 CPU。
对于应用 ARM 处理器的 Android 手机来说,它最终会生成相应的 ARM elf (so)可执行文件,剖析软件的外围性能只能从 elf(so)文件动手。
1、ARM 汇编语言 (armasm) 是一门低级语言,它与零碎的底层打交道,间接拜访底层硬件资源。
2、ARM 汇编语言与 C 语言共用同一套原生程序开发的 API 接口。
3、寄存器是 CPU 的组成部分,是和存储器交互的桥梁,它们可用来暂存指令、数据和地址。
ARM 寄存器
ARM 微处理器 共有 37 个 32 位寄存器,其中 31 个为通用寄存器,6 个为状态寄存器。
ARM 寄存器 分为 2 类,一般寄存器和状态寄存器。通用寄存器总共 16 种,别离为 R0 到 R15;状态寄存器共 2 种,别离为 CPSR 和 SPSR。
16 种通用寄存器:(总个数 31)
- R15 别名 PC(program counter)程序计数器:保留以后正在执行的指令在内存中的地址,当指令执行完结后,PC 的值主动 +1,即主动指向下一条行将执行的指令在内存中的地位。因为当程序通过汇编指令实现了对 PC 寄存器的赋值操作的时候,其实就是实现了一次无条件跳转。
- R14 别名 LR(linked register)链接寄存器:用于寄存子程序的返回地址,它是 ARM 程序实现子程序调用的关键所在。
- R13 别名 SP(stack pointer)栈指针寄存器:用于寄存堆栈的栈顶地址的。当咱们进行出栈和入栈的时候,都将依据该寄存器的值来决定拜访内存的地位(即出入栈的内存地位),同时在出栈和入栈操作实现后,SP 寄存器的值也应该相应减少或缩小。
R0-R12 是一般的数据寄存器,可用于任何中央。
- R12 外部调用临时寄存器。被调用函数在返回之前不用复原。
- R4-R11 罕用来寄存函数的局部变量。被调用函数返回之前必须复原这些寄存器的值。
- R0-R3 罕用来传入函数参数,传出函数返回值
2 种状态寄存器:(总个数 6)
- CPSR(1 个)(current program status register)状态寄存器:用于保留程序的以后状态。
- SPSR(5 个)(saved program status register)备份程序状态寄存器:异样返回后复原异样产生时的工作状态。
下面的知识点有点多,须要记住 ARM 微处理器有 37 个寄存器,其中 31 个通用寄存器 总共 16 种(R0-R15),6 个状态寄存器 总共两种(CPSR,SPSR)
ARM 处理器状态
ARM 汇编下有两种 工作状态, 个别状况下是 ARM 状态,带状态切换的跳转指令 BX,当地址值的最初一位是 1 时, 进入 Thumb 状态。
- ARM 状态:32 位,ARM 状态执行字对齐的 32 位 ARM 指令。
- Thumb 状态,16 位,执行半字对齐的 16 位指令。
- Thumb- 2 状态,新的 thumb- 2 内核技术兼有 16 位及 32 位指令,实现了更高的性能,更无效的功耗及更少地占用内存
- 调试状态,ARM 处理器停机时进入调试状态。
ARM 和 Thumb 两种状态之间的切换不影响处理器的工作模式和寄存器的内容。
ARM 处理器在解决异样时,不论处理器处于什么状态,则都将切换到 ARM 状态
ARM 处理器工作模式
除用户模式之外,其余所有模式统称为特权模式。它们具备对系统资源的齐全拜访权限,并可随便更改模式。
须要工作爱护的应用程序通常在用户模式下执行。有些嵌入式应用程序可能完 全运行在超级用户模式或零碎模式下。
进入除用户模式之外的模式是为了解决异样或拜访特许资源。
ARM 指令集简介
ARM 指令集是指计算机 ARM 操作指令系统,在 ARM 中有两种形式能够实现程序的跳转:
- 一种是跳转指令
- 另一种是间接向 PC 寄存器(R15)中写入指标地址值
所有 ARM 指令的长度都是 32 位。这些指令是按字对齐形式存储的,因而在 ARM 状态下,指令地址的两个最低无效位始终为零。
而 Thumb、Thumb-2 指令的长度是 16 位或 32 位。这些指令按半字对齐形式存储。其中有些指令应用最低无效位来确定跳转到的指标代码是 Thumb 代码还是 ARM 代码。
ARM 处理器指令集能够分为跳转指令、数据处理指令、程序状态寄存器 (PSR) 解决指令、加载 / 存储指令、协处理器指令和异样产生指令六大类。
跳转指令
此类指令用于:
- 向后跳转以形成循环
- 在条件构造中向前跳转
- 跳转到子例程
- 在 ARM 状态和 Thumb 状态之间转换处理器状态
数据处理指令
此类指令用于对通用寄存器执行运算,它们可对两个寄存器的内容执行加法、减法或按位逻辑等运算,并将后果寄存到第三个寄存器中。它们还能够对单个寄存器中的值执行运算,或者对寄存器中的值与指令中提供的常数执行运算。
寄存器加载和存储指令
用于从内存加载单个寄存器的值,或者在内存中存储单个寄存器的值
协处理器指令
此类指令反对一种用于扩大 ARM 体系结构的通用形式。用于加重零碎微处理器的特定解决工作。ARM 微处理器可反对多达 16 个协处理器用于各种协解决操作。
程序状态寄存器 (PSR) 解决指令
用于在程序状态寄存器和通用寄存器之间传送数据,程序状态寄存器拜访指令包含以下两条:
- MRS 程序状态寄存器到通用寄存器的数据传送指令
- MSR 通用寄存器到程序状态寄存器的数据传送指令
异样产生指令
ARM 微处理器所反对的异样指令有如下两条:
- SWI 软件中断指令
- BKPT 断点中断指令