处理器的工作模式:
8
种工作模式:
user
模式: 大部分时间, 处理器工作在该模式, 不是特权模式
fiq
模式:
快中断模式
特权模式
irq
模式:
中断模式
特权模式
supervisor
模式:
特权模式
reset
后,处理器进入该模式
abort
模式:
存取异常, 特权模式,
undef
模式:
未定义指令模式, 特权模式
system
模式:
特权模式,
user
模式不能执行的指令,
system
模式下可以执行
monitor
模式:
cortex-a
处理器独有的模式 ,
监视模式
复位:
上电复位
reset
按钮复位
看门狗复位
中断: 硬件产生的,
异常:软件产生的,
流水线:
arm7:
冯。诺伊曼架构
3
级流水线
3
级流水线:
fetch -------------
抓取机器码到
cpu pc
decode -----------
译码,
pc-4
execute-------------
执行
pc-8
cpi --------- cycles per instruction
每条指令的周期数
arm9
:
哈佛架构
5
级流水线
哈佛架构相比冯。诺伊曼架构:
增加了可用的存储器宽度
指令存储器接口
数据存储器接口
可以实现对指令和数据存储器的同时访问
arm
指令:
cpsr
:
当前程序状态寄存器
cmp r0, r1 // r0 - r1 -------------->
会影响
cpsr
的
n
,
z
,
c
,
v
sub r2,r3,r4 // r3-r4--->r2
mov r0,3 //3----->r0
比较指令一定影响
cpsr
的
n z c v
其他指令后跟
s
会影响
cpsr
的
n z c v
指令机器码:
mov r1,r2,lsl #2
指令机器码
0xe1a01102
r2
寄存器的值逻辑左移
2
位 到
r1
寄存器
(r2 << 2) -----------> r1
查看
arm
手册 ,了解到该条指令的机器码的构成如下
bit31---bit28
:条件码
1110
bit27---bit21: 0001 101
bit20:
(指令后跟
s
)
0
bit19---bit16: 0000
bit15---bit12
: 目的寄存器的序号
0001
bit11---bit7:
左移的立即数
00010
bit6--bit4: 000
bit3---bit0:
第二操作寄存器的序号
0010
bit31-----------------------bit0:
1110 0001 1010 0000 0001 0001 0000 0010 --------------0xe1a01102
数据处理指令:
算术指令:
ADD ADC SUB SBC RSB RSC
sbc r5,r1,r3 ========== r1-r3-!c------------->r5
rsb -----------------
逆向减法
rsb r0,r1,#100 ============= 100 - r1 ------------> r0
逻辑指令:
AND ORR EOR BIC
and
位与
orr
位或
eor
位异或
bic
位清除
比较指令:
CMP CMN TST TEQ
cmp r0,r1 //r0 -r1 --------->cpsr
cmn r0,r1 //r0 +r1 --------->cpsr
tst r0,#
(
1 << 15) //r0 and r1 ----------------> cpsr
通常可以判断寄存器
r0
的某些位是
1
还是
0
?
teq r0,r1 // r0 ^ r1 -------------->cpsr
相等测试
数据搬移:
MOV MVN
mov r0,#1 1------------------->r0
mvn r0,#1 (~1) -------------------------->r0
指令格式:
<
指令
>{}{S} Rd, Rn, Operand2
任何指令后可以跟条件码, 指令后可以跟
s
(影响
cpsr
)
比较指令一定影响
cpsr
Rd ----------
目的寄存器
比较指令没有目的寄存器
Rn ------------
第一操作寄存器
add r0,r1,r2
数据搬移指令没有第一操作寄存器
mov r0, #3
mov r0,r1