嵌入式底层(1)
一、ARM基础
1 不同的ARM体系采用不同的指令集
2 哈弗结构是数据和指令分开存储并行的
3 冯诺依曼结构是混合存储的
30个通用寄存器是进行存储的
特殊寄存器
PC寄存器是用于存储当前指令和下一条指令(知道程序现在运行在哪里)
CPSR当前运行程序运行的状态存储寄存器
SPSR状态在切换过程中保存原有状态的寄存器
一个寄存器就占32个字节,寄存器内容有限,数据如果过大,放在外面的flash或者内存里面
r15 PC寄存器是指明当前寄存器运行的位置
r14 LR寄存器是调用函数是返回的地址
r13 SP寄存器进栈出栈
有三角形的寄存器是多的空间,FIQ是空间换区时间去中断执行
1 ARM状态是CPU解析flash中的数据和指令的时候,发送的指令占四个字节的。而为了节省空间Thumb所占的空间为两个字节。
2 NZSV是运算的位
3 mrs r0,CPSR
将CPSR写到r0寄存器里面
msr CPSR ,r0
将r0寄存器的值读到CPSR中
5 user和system模式使用寄存器最少
7 T和J位反应了处理器处于ARM和Thumb位
二、ARM指令
1 搬移指令
mov r1 ,#3
赋值r1为3
mov r0, r1
将r1的值移到r0
mov r0,r1,LSL#2
将r1的值移到r0并且还需要左移两位(移一位*2)
mov r0,r1 LSR#2
右移两位
2 条件执行
if(a==0) x=0;
if(a>0) x=x+3;
cmp r0,#0(判断相等)
moveq r1,#0
addgt r1,r1,#3
C语言编译编程汇编然后在flash中变成计算机可以识别的机器码。CPU中的 控制器读取flash中的数据指令,然后ALu运算器进行译码
机器码解析
rs源寄存器
rd目标寄存器
cond条件判断选择
opcode操作码是进行什么指令命令的选择
立即数合法性(赋值时不能超过32位)
逻辑指令<