ARM 内核采用精简指令集结构(RISC,Reduced Instruction Set Computer)体系结构。其目标是设计出一套能在高时钟频率下单周期执行、简单而有效的指令集,RISC 的设计重点在于降低硬件执行指令的复杂度,这是因为软件比硬件容易提供更大的灵活性和更高的智能。与其相对的传统复杂指令级计算机(CISC)则更侧重于硬件执行指令的功能性,使 CISC 指令变得更复杂。
Thumb 指令集
ARM 处理器根据 RICS 原理设计,但是由于各种原因,在低代码密度上它比其他多数 RICS 要好一些,然
而它的代码密度仍不如某些 CISC 处理器。在代码密度重要的场合,ARM 公司在某些版本的 ARM 处理器
中加入了一个称为 Thumb 结构的新型机构。Thumb 指令集是原来 32 位 ARM 指令集的 16 位压缩形式,并
在指令流水线中使用了动态解压缩硬件。Thumb 代码密度优于多数 CISC 处理器达到的代码密度。
互锁
在典型的程序处理过程中,经常会遇到这样的情形,即一条指令的结果被用做下一条指令的操作数。如例
2.4 所示。
【例 2.4】
有如下指令序列:
LDR r0,[r0,#0]
ADD r0,r0,r1 ;在 5 级流水线上产生互锁
从例 2.4 中可以看出,流水线的操作产生中断,因为第一条指令的结果在第二条指令取数时还没有产生。
第二条指令必须停止,直到结果产生为止。
在 ARM9TDMI 中使用了典型的 5 级流水线。ARM9TDMI 的组织结构如图 2.7 所示。
5 级流水线包括下面的流水线级:
取指(fetch):从存储器中取出指令,并将其放入指令流水线。
译码(decode):指令被译码,从寄存器堆中读取寄存器操作数。在寄存器堆中有 3 个操作数读端口,
因此,大多数 ARM 指令能在 1 个周期内读取其操作数。
执行(execute):将其中一个操作数移位,并在 ALU 中产生结果。如果指令是 Load 或 Store 指令,则
在 ALU 中计算存储器的地址。
缓冲/数据(buffer/data):如果需要则访问数据存储器,否则 ALU 只是简单地缓冲一个时钟周期。
回写(write-back):将指令的结果回写到寄存器堆,包括任何从寄存器读出的数据。