第1课-ARM家族大检阅

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


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

参考《ARM架构参考手册》

User

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

FIQ

快速中断模式

IRQ

通用中断模式

SVC

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

Abort

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

Undefined

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

System

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

第3课-ARM寄存器

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


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

第4课-ARM寻址方式

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

立即数寻址

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

ADD R0, R0, #0x3f  ;R0<-R0 + 03f

寄存器寻址

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

ADD R0, R1, R2    ;R0<-R1 + R2

寄存器间接寻址

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

LDR R0, [R2]      ;R0<-[R2]

基址变址寻址

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

LDR R0, [R1, #4] ;R0<-[R1 + 4]

相对寻址

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

BL    NEXT    ;跳转到子程序NEXT处执行
...
NEXT:
...
MOV PC, LR ;从子程序返回

  • 无标签