arm公司的介绍就省略掉了,网上有很多
1、ARM数据和指令类型
}
ARM
采用的是
32
位
架构,这表明地址空间是2的32次方,4G。
ARM 约定:
Byte:8 bits
Halfword: 16 bits (2 byte)
Word :32 bits (4 byte)
Doubleword:64-bits(8byte)(Cortex-A处理器)
大部分ARM core 提供:
ARM 指令集(32-bit)
Thumb指令集(16-bit )
Cortex-A处理器
16位和32位Thumb-2指令集
16位和32位ThumbEE指令集
指令集的16位和32位差异体现在那里?简单来说就是32位指令集能够操作32位数,而16位指令集只能操作16位数。一个简单的例子,同样执行0X111111111和0X22222222的加法,32位指令集可以一次执行完毕,而16位指令集只能
高16位和低16位拆开运算。就向小时候我们学习加法,一开始我们只会个位数加法(十进制1位加法),后来我们会100以内的加法(十进制2位加法)。
在CORETEX-A中我们都用32位ARM指令集
2、处理器工作模式
ARM 有8个基本工作模式:
User:非特权模式,大部分任务执行在这种模式
FIQ:当一个高优先级(fast) 中断产生时将会进入这种模式
IRQ:当一个低优先级(normal) 中断产生时将会进入这种模式
Supervisor:当复位或软中断指令执行时将会进入这种模式,上电时处于这种模式,权限最高。
Abort:当存取异常时将会进入这种模式
Undef:当执行未定义指令时会进入这种模式
System:使用和User模式相同寄存器集的特权模式
Cortex-A特有模式:
Monitor:是为了安全而扩展出的用于执行安全监控代码的模式,也是一种特权模式
对于不同模式,
可以用一句话来总结:特定的模式执行特定的代码,完成特定的功能,具有特定的权限。
模式之间可以通过软件控制进行转换,也可以通过外部中断或异常处理过程进行切换。
3、流水线
为增加处理器指令流的速度,ARM7 系列使用3级流水线允许多个操作同时处理,而非顺序执行
指令执行过程中取址、译码、执行三个阶段使用的硬件电路相互独立
当对N地址中的指令进行取址时译码器可以对N-4地址的指令进行译码
运算器可以对N-8地址中的指令进行执行,从而形成了三级流水线结构
这种结构降低了指令执行的平均周期。
ARM处理器中当前取指的指令由PC决定,所以当前执行的指令的地址是PC-8
不管多少级流水线PC指向的永远是当前取址的指令,当前执行的指令是PC-8地址处的指令(这一点提一句,在实际的代码执行时,我们通过PC寄存器实际上看不出这种效果,我们看到的PC寄存器仍是指向要执行的指令地址,但要明白真实工作的情况。另外可以通过LDR伪指令来理解这种流水线,这里不展开讲了)
当对N地址中的指令进行取址时译码器可以对N-4地址的指令进行译码
运算器可以对N-8地址中的指令进行执行,从而形成了三级流水线结构
这种结构降低了指令执行的平均周期。
ARM处理器中当前取指的指令由PC决定,所以当前执行的指令的地址是PC-8
不管多少级流水线PC指向的永远是当前取址的指令,当前执行的指令是PC-8地址处的指令(这一点提一句,在实际的代码执行时,我们通过PC寄存器实际上看不出这种效果,我们看到的PC寄存器仍是指向要执行的指令地址,但要明白真实工作的情况。另外可以通过LDR伪指令来理解这种流水线,这里不展开讲了)
4、CORETEX-A寄存器概要
40个32位寄存器,其中33个通用寄存器,6个状态寄存器
带三角的是特定模式下的专用寄存器。
CPSR是状态寄存器