简图记录-ARM嵌入式基础(概念、工作模式、寄存器、寻址)

ARM 160浏览

简图记录学习~

参考:国嵌教学视频arm相关、s3c2440用户手册

一、概念

ARM芯片/ARM处理器:各芯片厂商(如三星)获得arm公司授权生产的带arm核的处理器。(如三星 s3c2440 6410 210)

ARM核心:arm公司设计的CPU运算处理核心,分成如arm7、arm9、arm11、Armcoretx等几个家族。(2440对应arm9、6410对应arm11、210对应armcortexa8)

ARM指令架构版本:每个ARM核心都对应着一个指令集版本(如arm9对应armV4、arm11对应armV6、armA8对应armV7)

ARM芯片特点:使用RISC精简指令集、支持16bitthumb和32bitarm指令、低功耗

RISC精简指令集:关注常用指令简单高效、指令等长 汇编简单、面积小功耗低,适合专用电路(向对应CISC复杂指令集:指令丰富 处理特殊任务高效、功能强大 适合通用机)

二、ARM工作模式和工作状态

工作状态:arm支持大小端(默认小端-低地址地位字节数据)、arm支持16bit thumb指令和32bit arm指令(默认arm指令)

工作模式:不同工作模式下 可访问的寄存器和指令集有差异,主要用于区分运行权限保护系统(由运行异常、中断或者软件主动触发切换模式)

工作模式分类(7种):用户模式usr(低权限-用户进程工作)、快速中断FIQ、普通中断IRQ、保护模式supervisior(高权限-操作系统运行)、地址或内存访问错误Abort、指令未定义Undefined、系统特权任务模式system(较少用)

三、ARM寄存器

共37个通用寄存器:R0-R7不分组(各个模式使用同一个)、R8-R14分组(R13、R14不同模式有自己的、FIQ模式全都有自己的)、R15程序计数器PC

6个程序状态寄存器:CPSR当前程序状态寄存器(各个模式用同一个)、SPSR异常程序状态保存寄存器(除了user和system其他模式各一个)

CPSP寄存器内容(0~7控制 8~27保留、28~31条件标志):

控制:0到4bit表示工作模式类型、5bit T位表示使用1:thumb还是0:arm指令、6bit F位表示FIQ禁止位、7bit I位表示IRQ禁止位】

条件标志:28bit V位表示溢出位 29bit C位表示进位/借位、30bit Z位表示零位、31bit N位表示 负/小于 位

四、ARM寻址方式(处理器根据指令信息找到操作数的方式)

1、立即数寻址(操作数直接在指令中 mov R1,#3:将3放到R0)

2、寄存器寻址 (操作数放在寄存器中 mov R0,R1:将R0的值放到R1中)

3、寄存器间接寻址(操作数在寄存器值为地址指向的内存中 mov R0,[R2]:将R2中的值为地址指向内存中的数放到R0中)

4、寄存器位移寻址 (当第二个数为位移方式时、将寄存器的值先位移处理得到操作数 mov R0,R1,lsl#3:将R1中值左移3位放到R0中)

5、寄存器基址寻址(也叫基址变址寻址)(由间接寻址发展而来,先对寄存器中的值进行计算再以结果为地址取其指向内存值为操作数 LDR R0,[R1, #4]:先将R1中的值加4 然后以结果为地址 对应的内存操作数放到R0)

6、多寄存器寻址(一条指令传送多个(最多16个)寄存器值 STMIA R0!,{R2-R7,R12}:将R2到R7和R12放到R0指向的地址中)

7、相对寻址(以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址 BL NEXT:跳转到NEXT标签处)

8、拷贝寻址(将连续的寄存器值进行操作 STMIA R0! ,{R1-R7}:将R1~R7的数据保存到R0指向的地址中)

9、堆栈寻址(将栈用于操作数保存或者导出的操作 STMFD SP!,{R1-R7,LR}:将R1~R7,LR入栈,SP更新。满递减堆栈)