版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

第1课-ARM家族大检阅

ARM公司定义了ARMV1~ARMV8共8套指令集,在每个指令集下有众多版本的ARM核心,ARM芯片会在其芯片内部包含一个或多个ARM核心并配以外围模块。
Image Modified
Image Modified
Image Modified

第2课-ARM处理器工作模式

参考《ARM架构参考手册》

User

普通用户模式,linux应用程序运行在该模式

:-------

:---:

FIQ

快速中断模式

IRQ

通用中断模式

SVC

管理模式,上电之后默认的模式,用于操作系统运行,比如Linux内核

Abort

终止模式,用于虚拟内存管理和内存数据访问保护,当用户访问非法地址时会进入该模式,比如segment fault

Undefined

未定义模式,用于支持硬件协处理器的软件仿真,CPU在指令的译码阶段不能识别该指令操作时,会进入该模式

System

ARMv4及以上才有,运行特权级别的操作系统任务

第3课-ARM寄存器

ARM共有7组共37个寄存器,其中有31个通用状态寄存器,以及6个程序状态寄存器。

Image Modified
R13通常用来保存栈地址(SP),R14用来保存子函数的返回地址(LR),或是异常发生时的异常跳转地址。
CPSR程序状态寄存器,SPSR用于在异常模式下保存CPSR的值,便于在异常结束后恢复CPSR的值。
Image Modified

第4课-ARM寻址方式

根据指令中给出的信息来找到指令所需要操作数的方式。

立即数寻址

操作数本身就在指令中,以#号开头

代码块
languagenone
themeConfluence
linenumberstrue
collapsefalse
ADD R0, R0, #0x3f  ;R0<-R0 + 03f

寄存器寻址

操作数放在寄存器中,效率较高

代码块
languagenone
themeConfluence
linenumberstrue
collapsefalse
ADD R0, R1, R2    ;R0<-R1 + R2

寄存器间接寻址

寄存器中存放的是操作数在内存中的地址

代码块
languagenone
themeConfluence
linenumberstrue
collapsefalse
LDR R0, [R2]      ;R0<-[R2]

基址变址寻址

将寄存器中的内容(基地址)与指令中给出的地址偏移量相加,从而得到操作数在内存中的地址

代码块
languagenone
themeConfluence
linenumberstrue
collapsefalse
LDR R0, [R1, #4] ;R0<-[R1 + 4]

相对寻址

PC指针的当前值作为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址

代码块
languagenone
themeConfluence
linenumberstrue
collapsefalse
BL    NEXT    ;跳转到子程序NEXT处执行
...
NEXT:
...
MOV PC, LR ;从子程序返回

目录