"); //-->
###################嵌入式体系结构基础###############
一、指令集:
1.数据传输指令--
mvn r0,r2 ;r0 = ~r2
mvns r0,r2 ;影响cpsr
2.逻辑指令--
add r0,r1,r2 ;r0 = r1 & r2
orr r0,r1,r2 ;r0 = r1 | r2
eor r0,r1,r2 ;r0 = r1 ^ r2
bic r0,r1,r2 ;r0 = r1 & ~r2
3.比较指令--主要用于循环;用完它,下面就要bne了,有点循环的测试条件部分;
cmp r1,r2
tst r1,r2 ;根据r1&r2的结果设置cpsr
teq r1,r2 ;根据r1^r2...
4.算术指令--
adc r0,r1,r2 ;r0 = r1 + r2 + carry//??????????????
5.程序状态访问指令--当需要修改cpsr/spsr的内容时,
首先要读它的值到一个通用寄存器,-- mrs r0,cpsr
然后修改某些位后,在将数据写回状态寄存器;--msr cpsr,r0
6.单数据访存指令--
ldr r0,[r1,#0xfff] ;将内存r1+0xfff地址的内容读到r0中。
str r0,[r1,-r2,LSL#31] ;将r0的内容写到r1-(r2<<31)的内存单元中去。
7.多数据访存,和模拟栈--
1)stmdb == stmfd ;压栈PUSH
stmfd sp!,{r0-r12,lr} ;将所有寄存器包括返回地址压栈
2)ldmia == ldmfd ;出栈POP
ldmfd sp!,{r0-r12,pc} ;恢复所有寄存器包括PC
二、异常、中断
1.ARM模式分类:
########################################################
usr/system | SVC | Abort | Undef | IRQ | FIQ
r0 r0 r0
r1 r1 r1
r2 r2 r2
r3 r3 r3
r4 r4 r4
r5 r5 r5
r6 r6 r6
r7 r7 r7
r8 r8 r8 r8_FIQ
r9 r9 r9
r10 r10 r10
r11 r11 r11
r12 r12 r12
r13 r13_SVC r13_ABORT r13_UNDEF r13_IRQ
r14 r14_SVC r14_ABORT r14_UNDEF r14_IRQ
PC PC PC
CPSR CPSR CPSR
SPSR_SVC SPSR_ABORT
######################################################
2.CPSR/SPSR
1)条件标志
-N = ALU计算结果为负
-Z = ALU计算结果为零
-C = ALU计算结果进位
-V = ALU计算结果溢出
2)中断禁止位
-I = 1 ;关IRQ
-F = 1 ;关FIQ
-T:
T = 0 ;处理器当前处于ARM状态
T = 1 ;处理器当前处于THUMB状态
3.异常和异常向量表
1)异常向量表 -- 0x18是IRQ;
2)优先级:
-RESET ;
-DATA ABORT ;
-FIQ
-IRQ
-Prefetch
-SWI/Undef
异常的产生:
1)外部异常:复位,FIQ,IRQ
2)间接异常:数据终止(在LOAD和STORE数据访存时的存储器故障)
3)直接异常:软件中断,未定义指令和预取指令
3.异常时的模式切换
异常发生后
################在跳到异常向量表前硬件做得事情###################
-将CPSR拷贝到SPSR_<MODE>
-设置将要用在异常模式的CPSR中的适当位
清除CPSR中的Thumb位(异常进入后就均为ARM STATUS,不可能是Thumb);
修改相应的模式位;
关中断(如果是RESET OR FIQ异常,还要关FIQ)
-映射相应模式寄存器;
-将PC保存LR_<MODE>,用于返回;
-将PC指向异常向量表的某个地址;
##################处理异常中...#################################
......
...
..
.
.
#########异常处理结束,异常返回##################################
-从SPSR_<MODE>中恢复CPSR
-用LR_<MODE>恢复PC /* 注意流水线的影响 */
SO,我们讨论一下在各种异常返回时,因为流水线的原因,对返回地址的调整;
-SWI/UND: movs pc,r14_swi/und
- FIQ/IRQ/Prefetch: subs pc,r14_<mode>,#4
- DataABR: subs pc,r14_ABORT,#8
###############################END###########################
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。