一、ARM的工作状态
CPU执行的是汇编编译后的机器码。ARM处理器支持两套汇编指令,一套是ARM汇编指令,另外一套THUMB汇编指令。
ARM汇编 ----> 32bits(默认)
THUMB汇编 --->16bits 汇编指令相同的,使用的编译器不同。
1、ARM状态:(32bits的ARM状态)
当ARM处理器执行ARM汇编指令的时候,工作ARM状态。
2、Thumb状态:
当ARM处理执行THUMB汇编指令的时候,工作THUMB状态
Thumb-2状态:(ARM和THUMB混合)。
=========================================================
二、基本数据类型
1、字节 char ---->8bits
2、半字 short ---->16bits
3、字 int ---->32bits
4、长字 long ---->和CPU的字长是一致的:64bits或32bits
三、存储格式
1、大端格式--->大字节序-->大尾格式--->big endian
2、小端格式--->小字节序-->小尾格式--->littile endian(默认使用)
如何由可执行程序得到反汇编文件:
$ arm-linux-objdump -D main.elf > main.dis
一个反汇编的文件:
四、ARM的工作模式
ARM处理器在处理不同的内容的时候,处理器就会处于不同的工作模式。工作模式有7种。
不同的内容:
1、FIQ模式(fiq):FIQ中断(fast Interrupt request)
2、IRQ模式(irq):IRQ中断(Interrupt request) ,FIQ和IRQ是中断的两种不同类型
3、管理模式(svc):处理器的配置权限比较高的模式。配置cache、MMU,配置内核。当ARM处理器复位,处理器是处于管理模式。
4、用户模式(usr):一般运行用户的应用程序
5、系统模式(sys):运行操作系统的任务
6、未定义模式(und):当处理器在运行指令的时候,发现有一个条指令不认识。处理器就会报错,就进入未定义模式。
7、中止模式:数据访问中止--->向一个地址下写数据,但是这个地址不存在或者这个地址是只读。 指令预取中止 --->当处理器从某个地址下读取指令的时候,这个地址不存在或者这个地址禁止访问。
五、ARM的流水线
ARM处理器将一条指令的执行过程分成了几个步骤,在不同的时钟周期来处理不同的步骤,这样看起来在同一时刻处理器在处理多条指令,提高处理器的执行效率。
ARM7:三级流水线----> 取指、译码、执行
ARM9:五级流水线----> 取指、译码、执行、寄存器访问、存储器回写
=========================================================
六、ARM内核中的寄存器
ARM处理器中的寄存器可以分成两类:
内核的寄存器:只能用汇编访问
R0~R15、CPSR、SPSR --->通用寄存器 + 状态寄存器
外围模块的寄存器:可以使用C来访问
SFR ---- > GPJ2CON、GPD0_CON、GPH2DAT
SFR的访问时通过地址来访问。
ARM中寄存器的主要作用:
1、R0~R3:在C和汇编混合编程的时候,用来传递参数或返回值。ATPCS规则
第一个参数通过R0传递,第二参数通过R1传递,超过4个的参数就通过stack
来传递。
2、R4~R12:一般使用存放局部变量。C语言register关键字。
3、R13:SP---Stack Pointer栈的指针寄存器。指向stack的地址。
4、R14:LR ---Link Register链接寄存器:用来保存程序的返回地址。
5、R15,PC---Program counter,取值那条指令的地址。
注意:
以上寄存器都是32bits。
这些寄存器只能使用汇编语言来访问。
一般在嵌入式平台最开始执行的那段程序(bootloader-->u-boot)是使用汇编语言编写。
6、CPSR---Current Program Status Register 当前程序状态寄存器,反应ARM当前的状态。
1)ARM工作模式位
2)状态位
查看ARM的工作状态:0-->ARM状态
1--> THUMB状态
3)中断的使能位--F/I
1 --->IRQ或FIQ是关闭的
0 --->IRQ或IRQ是打开的
4)条件标志位
算术运行的逻辑结果。NZCV
7、SPSR ---- Saved Program Status Register备份程序状态寄存器
当ARM的工作模式切换的时候,用来保存CPSR。