恭喜你捕获了一只野生的脏羊!
分类: IT职场
2014-09-04 23:46:59
(1)了解嵌入式处理器的结构特点及分类,熟悉ARM处理器的技术特点P48,工作状态及工作模式P53。
结构特点:
按指令集分为复杂指令集结构CISC及精简指令集结构RISC;
按存储机制分为冯诺依曼结构及哈佛结构;
按字长分为8位、16位、32位、64位结构
按不同内核系列可以分为51、AVR、PIC、MSP430、PowerPC、Coldfile、ARM
技术特点:
1)单周期操作 2) 采用加载/储存指令访问内存 3)固定的32位字长 4)三地址指令格式 5)指令流水线技术
工作状态:ARM状态,Thumb/Thumb-2状态,调试状态
工作模式:7种。
工作模式 |
功能说明 |
可访问的寄存器 |
CPSR[M4:M0] |
用户模User |
程序正常执行工作模式 |
PC,R14-R0,CPSR |
10000 |
快速中断模式FIQ |
处理高速中断,用于高速数据传输或通道处理 |
PC,R14_fiq-R8_fiq, R7-R0,CPSR,SPSR_fiq |
10001 |
外部中断模式IRQ |
用于普通中断处理 |
PC,R14_irq-R13_irq, R12-R0,CPSR,SPSR_irq |
10010 |
管理模式SVC |
操作系统的保护模式,处理软中断SWI |
PC,R14_svc-R13_svc, R12-R0,CPSR,SPSR_svc |
10011 |
中止模式ABT |
处理存储器故障,实现虚拟存储器和存储器保护 |
PC,R14_abt-R13_abt, R12-R0,CPSR,SPSR_abt |
10111 |
未定义指令模式UND |
处理为定义的指令陷阱,用于支持硬件协处理器仿真 |
PC,R14_und-R13_und, R12-R0,CPSR,SPSR_und |
11011 |
系统模SYS |
运行特权及的操作系统任务 |
PC, R14-R0,CPSR |
11111 |
(2)了解ARM处理器的寄存器结构P54,理解ARM处理器的异常处理P56、数据类型P59和存储格式P58,以及存储器管理单元MMU和存储器保护单元MPU的含义和功能P59。
寄存器结构:ARM处理器共有37种寄存器,包括31个通用寄存器(含PC)和6个状态寄存器。
无论何种模式,R15均作为PC使用;CPSR为当前程序状态寄存器;R7-R0为公用的通用寄存器。所有通用寄存器均为32位结构。
程序状态寄存器的格式:
31 30 29 28 27 26……8 7 6 5 4 3 2 1 0
N |
Z |
C |
V |
Q |
状态保留 |
I |
F |
T |
M4 |
M3 |
M2 |
M1 |
M0 |
条件码标志含义如下:
N为符号标志位,N=1为负数,N=0为正数。
Z为全0标志位,运算结果为0,则Z=1,否则Z=0;
C为进借位标志,有进/借位时C=1,否则C=0.
V为溢出标志,加减法运算结果溢出时V=1,否则V=0.
Q为增强的DSP运算指令溢出标志,溢出时Q=1,否则Q=0.
控制位含义如下:
I为中断禁止控制位,I=1禁止IRQ中断,I=0,允许中断。
F为禁止快速中断FIQ的控制位,F=1禁止FIQ中断,F=0允许。
T为ARM和Thumb指令切换,T=1时执行Thumb指令,否则执行ARM指令。
M4-M0为模式选择位
异常处理:
异常类型 |
优先级 |
工作模式 |
异常向量地址 |
复位RESET |
1 |
管理模式 |
0x00000000 |
未定义的指令UND |
6 |
未定义指令中止模式 |
0x00000004 |
软件中断SWI |
6 |
管理模式 |
0x00000008 |
指令预取中止PABT |
5 |
中止模式 |
0x0000000C |
数据访问中止DABT |
2 |
中止模式 |
0x00000008 |
外部中断请求IRQ |
4 |
外部中断模式 |
0x00000010 |
快速中断请求FIQ |
3 |
快速中断模式 |
0x0000001C |
数据类型:字节8位,半字16位,字32位,每种分有无符号,共六种。
存储格式:大端,小端(小端字节序低位低地址)。
MMU:1)虚拟地址到物理地址映射2)存储器访问权限受限3)虚拟存储空间缓冲特性设置
MPU:允许ARM处理器4GB地址空间定义8对域,分别控制8个指令和8个数据内存区域。每个域的首地址和届均可编程。带MPU的ARM处理器使用不同的域来管理和控制指令内存和数据内存。
(3)了解若干典型ARM处理器(ARM9、Cortex-A、Cortex-M、Cortex-R)内核的技术特点及主要应用领域。
1)Cortex-A系列是面向高端嵌入式应用的处理器核:具有MMU、Cache、最快频率、最高性能、合理功耗。
2)Cortex-R系列是面向实时控制的处理器:具有MPU、Cache、实时响应、合理性能、较低功耗。
3)Cortex-M系列是面向低端微控制器的处理器,没有MMU但有MPU,极高性价比、最低成本,极低功耗。
(4)了解ARM的指令类型及指令格式,掌握移位操作实现数据变换以及简单乘除操作的方法,熟悉寻址方式,掌握ARM指令系统中的常用指令。(指令格式、寻址方式、指令集、伪指令、语句格式与程序结构、ARM汇编语言及C的混合编程。)
(1)指令格式
指令一般格式
指令格式说明:
项目 |
含义 |
备注 |
|
指令的操作码 |
即助记符,如MOV、ADD、B等 |
{cond} |
条件域,满足条件才执行指令 |
可不加条件即可省略条件,如EQ、NE等 |
{S} |
指令执行时是否需要更新CPSR |
可省略 |
Rd |
目的寄存器 |
Rd可为任意通用寄存器 |
Rn |
第一个源操作数 |
Rd可为任意通用寄存器,可以与Rd相同 |
Op2 |
第二个源操作数 |
可为#imm8m、寄存器Rm及任意移位寄存器 |
关于#imm8m的说明:#表示立即数,其后可以是十进制或十六进制数
对于ARM指令集,#imm8m表示一个由8位立即数经循环右移任意偶数位次形成的32位操作数。
对于Thumb指令集,#imm8m表示一个由8位立即数经左移任意位次形成的32位操作数。
指令的条件码
条件码 |
助记符 |
标 志 |
含 义 |
0000 |
EQ |
Z置位 |
相等 |
0001 |
NE |
Z清零 |
不相等 |
0010 |
CS |
C置位 |
无符号数大于或等于 |
0011 |
CC |
C清零 |
无符号数小于 |
0100 |
MI |
N置位 |
负数 |
0101 |
PL |
N清零 |
正数或零 |
0110 |
VS |
V置位 |
溢出 |
0111 |
VC |
V清零 |
未溢出 |
1000 |
HI |
C置位Z清零 |
无符号数大于 |
1001 |
LS |
C清零Z置位 |
带符号数小于或等于 |
1010 |
GE |
N等于V |
带符号数大于或等于 |
1011 |
LT |
N不等于V |
带符号数小于 |
1100 |
GT |
Z清零且N等于V |
带符号数大于 |
1101 |
LE |
Z置位或N不等于V |
带符号数小于或等于 |
1110 |
AL |
忽略 |
无条件执行 |
(2)寻址方式
1)立即寻址(立即数寻址)
例如:MOV R0,#0x1212121212
ADC R0,R0,#100 ;R0 R0+100+C
2)寄存器寻址(执行效率较高)
例如:ADD R0,R1,R2 ;R0 R1+R2
3)寄存器间接寻址
寄存器间接转址就是以寄存器中的值作为操作数地址,而操作数本身存放在存储器中。用间接寻址的寄存器必须用[ ]括起来。
例如:LDR R5,[R4] ;R5 [R4],间接寻址的寄存器是R4
STR R1,[R2] ;[R2] R1,间接寻址的寄存器是R2
4)基址加变址寻址
常见的几种形式:
LDR R0,[R1,#4] ;R1+4形成地址,取其中内容放入R0中
STR R1,[R2,#8] ;R2+8形成地址,取R1中内容放入该地址
LDR R0,[R1,#4]! ;R1+4形成地址,取其中内容放入R0 且 R1中的内容+4
LDR R0,[R1],#4 ;R1中内容形成地址,取地址中内容放入R0中,且R1中内容+4
LDR R0, [R1, R2] ;R1+R2后形成地址,取地址中内容(操作数)放入R0中
STR R0, [R1, R2] ;R1+R2后形成地址,取R0中内容放入地址中
5)相对寻址
相对寻址以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加后得到操作数的有效地址。
下列程序中跳转指令BL利用相对寻址方式:
BL Subroutine_A ;跳转子程序Subroutine_A处执行
…
Subroutine_A:
…
MOV PC ,LR ;从子程序返回
6)堆栈寻址:满递增、满递减、空递增、空递减
7)块拷贝寻址(多寄存器寻址):一条指令最多传送16个通用寄存器的值。
LDMIA R0,{R1,R2,R3,R4} ;R0->R1 ;R0+4 ->R2 ; R0+8->R3 ;R0+12->R4
STMIA R0,{R1-7} ;R1->R0 ;R2->[R0+4]
P75常用指令
(5)了解ARM汇编语言常用的伪指令,熟悉ARM汇编语言程序结构,掌握ARM汇编语言程序设计的方法并能设计和阅读理解简单的汇编语言程序。
关于ARM汇编语句可以参考fishc.com上小甲鱼的零基础学汇编的视频,确实很有帮助。不过关于三级考试,汇编指令考不得多,会基本的运算即可。