-
ARM体系结构
在ARM处理器中,除了用户模式是普通模式,剩下的几种工 作模式都属于特权模式。
应用程序如果要读写磁盘上的音频数据,驱 动声卡播放音乐,往屏幕写数据显示歌词,则要首先通过系统调用或软 中断进入处理器特权模式,运行操作系统内核或硬件驱动代码,才能对 底层的硬件设备进行读写操作
- ARM处理器中的寄存器可分为通用寄存器和专用寄存器两种。
- 寄存器R0~R12属于通用寄存器,除了FIQ工作模式,在其他工作模式下这些寄存器都是共用、共享的:
R0~R3通常用来传递函数参数,
R4~R11用来保存程序运算的中间结果或函数的局部变量等,
R12常用来作为函数调用过程中的临时寄存器。
- 有一些寄存器在各自的工作模式下是独立存在的,如R13、R14、R15、CPSP、SPSR寄存器,在每个工作模式下都有自己单独的寄存器。
- R13寄存器又称为堆栈指针寄存器 (Stack Pointer,SP),用来维护和管理函数调用过程中的栈帧变化,R13总是指向当前正在运行的函数的栈帧,一般不能再用作其他用途。
- R14寄存器又称为链接寄存器(Link Register,LR),在函数调用过程中主要用来保存上一级函数调用者的返回地址。
- 寄存器R15又称为程序计数器(Program Counter,PC),CPU从内存取指令执行,就是默认从PC保存的地址中取的,每取一次指令,PC寄存器的地址值自动增加。
- 在ARM三级流水线中,PC指针的值等于当前正在运行的指令地址+8,后续的32位处理器虽然流水线的级数不断增加,但为了简化编程,PC指针的值继续延续了这种计算方式。
- 当前处理器状态寄存器(Current Processor State Register,CPSR)主要用来表征当前处理器的运行状态。除了各种状态位、标志位,CPSR寄存器里也有一些控制位,用来切换处理器的工作模式和中断使能控制。
- 在每种工作模式下,都有一个单独的程序状态保存寄存器(Saved Processor State Register,SPSR)。当ARM处理器切换工作模式或发生异常时,SPSR用来保存当前工作模式下的处理器现场,即将CPSR寄存器的值保存到当前工作模式下的SPSR寄存器。当ARM处理器从异常返回时,就可以从SPSR寄存器中恢复原先的处理器状态,切换到原来的工作模式继续运行
- 为了快速响应中断,减少中断现场保护带来的时间开销,在FIQ工作模式下,ARM处理器有自己独享的R8~R12寄存器。
-
ARM汇编指令
一个完整的ARM指令通常由操作码+操作数组成,指令的编码格式如下:
指令格式的具体说明如下:
- 使用<>标起来的是必选项,使用{ }标起来的是可选项。
- <opcode>是二进制机器指令的操作码助记符,如MOV、ADD这些汇编指令都是操作码的指令助记符。
- cond:执行条件,ARM为减少分支跳转指令个数,允许类似BEQ、BNE等形式的组合指令。
- S:是否影响CPSR寄存器中的标志位,如SUBS指令会影响CPSR寄存器中的N、Z、C、V标志位,而SUB指令不会。
- Rd:目标寄存器。
- Rn:第一个操作数的寄存器。
- operand2:第二个可选操作数,灵活使用第二个操作数可以提高代码效率。
-
ARM寻址方式
-
ARM伪指令
-
ARM汇编程序设计
-
C语言和汇编语言混合编程
-
GNU ARM汇编语言