ARM学习心得

1.ARM是32位精简指令集处理器
2.ARM7 3级流水线 冯.诺依曼结构
3.ARM9 5级流水线 哈佛结构
4.只有Load/Store指令可以访问存储器
5.支持数据cache和指令cache
6.处理器模式:
(1).用户模式(usr)
(2).快速中断模式(fiq)
(3).外中断模式(irq)
(4).管理模式(svc)
(5).中止模式(abt)
(6).未定义模式(und)
(7).系统模式(sys)
7.工作模式:
(1).ARM指令集 32位
(2).Thumb指令集 16位
8.ARM处理器含有37个寄存器,包括31个通用寄存器和6个状态寄存器
9.R13(SP-堆栈寄存器)
R14(LR-链接寄存器)
R15(PC-程序计数寄存器)
CPSR(当前程序状态寄存器)
SPSR(备份程序状态寄存器)
10.小端模式:高地址位存放高数据位,低地址位存放低数据位;大端模式与之相反
11.寻找方式:
(1).立即数寻找 立即数为8位 以#开头
(2).寄存器寻找
(3).寄存器移位寻找
(4).寄存器间接寻找
(5).基址变址寻找
(6).多寄存器寻找
(7).相对寻找
(8).堆栈寻找
12.常用指令解析:
(1).MOV MOV Rd,operand2 只适用于寄存器与寄存器或寄存器与立即数之间
(2).MOVS 影响CPSR中的标志位
(3).MVN MVN Rd,operand2 数据取反传送
(4).LSL LSL n 逻辑左移
(5).LSR LSR n 逻辑右移
(6).ASL ASL n 算数左移 相当于乘2
(7).ASR ASR n 算数右移 相当于除2
(8).ROR ROR n 循环右移
(9).RRX RRX n 带扩展的循环右移
(10).ADD ADD Rd,Rn,operand2 加法
(11).ADC ADC Rd,Rn,operand2 Rd=Rn+operand2+c 带进位的加法 加上CPRS的C位
(12).SUB SUB Rd,Rn,operand2 减法
(13).SBC SBC Rd,Rn,operand2 Rd=Rn-operand2+c-1 带进位的减法
(14).RSB RSB Rd,Rn,operand2 Rd=operand2-Rn 逆向减法
(15).RSC RSC Rd,Rn,operand2 Rd=operand2-Rn+c-1 带进位的逆向减法
(16).AND AND Rd,Rn,operand2 Rd=Rn and operand2 逻辑与
(17).ORR ORR Rd,Rn,operand2 Rd=Rn or operand2 逻辑或
(18).EOR EOR Rd,Rn,operand2 Rd=Rn xor operand2 逻辑异或
(19).BIC BIC Rd,Rn,operand2 Rd=Rn and not operand2 位清零
(20).CMP CMP Rd,operand2 比较,影响CPSR标志位
(21).CMN CMN Rd,operand2 负数比较,影响CPSR标志位
(22).TST TST Rd,operand2 位测试,影响CPSR标志位
(23).TEQ TEQ Rd,operand2 相等测试,影响CPSR标志位
(24).MUL MUL Rd,Rn,operand2 乘法 32位
(25).MLA MLA Rd,Rn,Rm,operand2 Rd=Rn*Rm+operand2 乘加 32位
(26).UMULL UMULL Rd,Rn,Rm,operand2 Rd=[Rm*operand2](0-31) Rn=[Rm*operand2](32,63) 64位无符号乘法
(27).SMULL SMULL ... 64位有符号乘法
(28).UMLAL UMLAL Rd,Rn,Rm,operand2 Rd=[Rm*operand2](0-31)+Rd Rn=[Rm*operand2](32-63)+Rn 64位无符号乘加
(29).SMLAL SUMLAL... 64位有符号乘加
(30).LDR LDR Rn,operand2/=start/=0x010201 加载内存数据
(31).STR ST

R Rn,operand2/=start/=0x012010 数据存入内存
(32).LDM 从内存中加载多个数据
(33).STM 存储多个数据到内存
(34).B B Rn 跳转
(34).BL 带链接的跳转 改变R14
(35).BX 带状态切换的跳转
(36).BLX 带链接和状态切换的跳转
......
13.运用于STM和LDM的模式:
(1).IA 每次传送后增加地址
(2).IB 每次传送前增加地址
(3).DA 每次传送后减少地址
(4).DB 每次传送前减少地址
(5).FD 满递减堆栈
STMFD SP!,{R1-R4} ;将R1-R4的数据存放到SP所指的内存中 高寄存器放在高地址位,SP自增4
当前SP不存放数据
(6).ED 空递减堆栈 当前SP存放数据
(7).FA 满递增堆栈
(8).EA 空递增堆栈
14.条件标志位:
编码 扩展表示式 标志位影响 意义
0000 EQ Z置1 等于操作数
0001 NE Z清0 不等于操作数
0010 CS/HS C置1 进位/无符号数大于或等于操作数
0011 CC/LO C清0 无进位/无符号数小于操作数
0100 MI N置1 负数
0101 PL N清0 正数或0
0110 VS V置1 溢出
0111 VC V清0 无溢出
1000 HI C置1且Z清0 无符号数大于操作数
1001 LS C清0且Z置1 无符号数小于或等于操作数
1010 GE N等于V 有符号数大于或等于操作数
1011 LT N不等于V 有符号数小于操作数
1100 GT Z清0且N等于V 有符号数大于操作数
1101 LE Z置1且N不等于V 有符号数小于或等于操作数
1110 AL 任何状态 总是,常忽略
1111 NV 从不使用 ---

15.子程序参数传递规则:
当参数不超过4个时用R0-R3来存放返回值存放在R0中,存放顺序:寄存器编号由小到大
当参数超过4个时,前面4个参数按上面规则存放,后面的参数按参数传递顺序右后往前依次入栈

16.CPSR结构:
31 30 29 28 27 ... 7 6 5 4 3 2 1 0
N Z C V Q I F T

N:Negative 负数标志位 N=1:结果为负数 N=0:结果为正数或零
Z: Zero 零标志位 Z=1:结果为0 Z=0:结果不为0
C: Carry 进位标志位 C=1:C=0:... 有四种情况
V: oVerflow 溢出标志位 V=1:V=0:... 有两种情况
I:IRQ中断使能/失能 I=1:失能IRQ I=0:使能IRQ
F:FIQ中断使能/失能 F=1:失能FIQ F=0:使能FIQ
T:状态标志位 T=1:Thumb状态 T=0:ARM状态
4-0:工作模式:
10000 usr
10001 fiq
10010 irq
10011 svc
10111 abt
11011 und
11111 sys

17.ARM工作模式间的切换
(1).切换方式:软件切换、硬件切换
(2).除usr外其他的都叫特权模式,在特权模式下可以任意切换其他模式
(3).在usr模式下只有通过硬件的方法切换到其他工作模式
(4).除usr和s

ys,其他模式都叫异常模式
(5).机器上电复位时,处于svc模式

18:C语言和ARM汇编混用的几种方法:
(1).内联汇编:在C函数中插入汇编语句 使用arm或__arm关键字
(2).嵌入式汇编:...
......

相关文档
最新文档