ARM硬件架构 程序员

ARM处理器的Programmers’ Model

2018-05-21  本文已影响26人  赵国开

ARM手册中都会有一些Programmers’ Model章节。那么什么是Programmers’ Model,Programmers’ Model是从编程者的角度来看,处理器提供了哪些可用的特性给编程人员。这里以ARM7TDMI-S 为基础来介绍一些基本的模型,对最新的内核也适用。想了解最新的可以参阅ARMv8-A的架构手册,里面可以看到有应用级和系统级的Programmers’ Model(分别有64位架构和32位架构的),有很多的特性。

数据类型

ARM7TDMI-S 可以支持下列的数据类型

处理器运行状态

处理器在运行时处于下面两种状态之一:

需要注意的是两种状态的之间的切换并不会影响到寄存器的内容和处理器的模式。

切换状态

可以通过BX指令进行切换,格式如下:

Thumb state:  
  BX Rn
ARM state:      
  BX{condition} Rn

Rn可以是任何寄存器。也可以是PC寄存器,但是不建议,因为有可能导致非预期的结果,比如跳转到非对齐的地址。

进入THUMB状态有两种方式

image.png

同理进入进入ARM状态也有两种方式,第一种是通过BX Rn,Rn的最低有效位是0。或者在触发异常时,自动切换入ARM状态(这种情况,PC会被自动保存到进入的异常模式对应的链接寄存器,并且指令从异常向量对应的地址开始执行)

指令长度

ARM状态指令是32位,THUMB状态指令是16位的

存储格式

ARM7TDMI-S 支持大端和小端两种存储格式(如何解释存储在存储器中的word)

操作模式

image.png

模式的切换可以通过软件的方式控制,也可以由外部中断/异常引起。大部分应用程序执行在User模式。除了User模式,其他模式都处于特权模式。特权模式为中断/异常异常服务的,以获得对受保护的资源的访问。

寄存器

ARM7TDMI-S总共有如下寄存器:

备注:这些寄存器是32位的,并且有处理器状态和操作模式决定哪些寄存器可供编程者使用。

ARM状态的寄存器组织结构如下图所示:

image.png

在ARM状态任何时候都可以看到R0~R15、CPSR这些寄存器
几个用于特殊用途的寄存器,包括R13,R14

备注:ARM7TDMI是流水线架构,如下图所示:

image.png

这意味着在一个机器周期中一个指令被提取(fetch),另一个指令被解码(decode),而另一个指令被执行(execute)。而PC存储的是正在fetch的指令地址,而不是正在执行的地址。通常编程人员不需要访问PC寄存器,除非需要一些特殊的操作,比如从异常恢复,在内存中进行远距离跳转。

THUMB状态的寄存器是ARM状态的一个子集,寄存器组织结构如下图所示:

image.png

能直接访问的寄存器只有 R0–R7,PC,SP,LR,CPSR及对应模式分组备份寄存器(图中带三角形阴影部分)

ARM状态和THUMB状态寄存器映射关系见下图:

image.png

备注: 在THUMB状态,R8–R15 (Hi registers)访问受限(只有MOV,ADD和CMP指令可访问)。

程序状态寄存器

ARM7TDMI-S有一个CPSR+5个SPSR(异常模式使用),这些寄存器:

CPSR/SPSR的格式如下图


image.png

CPSR/SPSR有两大块重要的域:

所有的cpsr位域都可以在特权模式被读/写。
在用户模式只有flags域可以被写,但其他域都是可以读的。

Condition code flags

• N = ALU运算为负数( Negative)
• Z = ALU运算结果为0(Zero)
• C = ALU运算结果进位(Carried out)
• V = ALU运算结果溢出(Verflowed)

备注:这些位在算术或者逻辑操作之后可能改变,在ARM状态指令可以被有条件的执行,这些位可以用来测试一条指令是否可以执行。但在THUMB状态只有分支指令才具备条件执行的能力

control bits

备注:软件不应该去改变CPSR中的T位,否则处理器会产生非预期的结果。

模式位如下表所示,在表中未出现的值不应该被使用,否则会出现进入不可恢复的状态,只能复位系统:

image.png

异常

异常向量入口地址如下表所示:


image.png

备注:并不是所有的异常都能同时发生,6中的Undefined Instruction和Software interrupt 没法同时发生

备注:异常处理只能在ARM状态进行处理,如果异常之前是THUMB状态,发生异常时会自动切换到ARM状态,异常处理完会自动切换回THUMB状态,不需要手动去处理。


参考文献

【1】ARM7TDMI-S Programmer’s Model
【2】ARM Assembly Language Fundamentals and Techniques (2nd ed.)

上一篇 下一篇

猜你喜欢

热点阅读