ARM复习Word格式.docx
- 文档编号:21167445
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:14
- 大小:362.96KB
ARM复习Word格式.docx
《ARM复习Word格式.docx》由会员分享,可在线阅读,更多相关《ARM复习Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
•异常向量表
下表中的I和F表示不对该位有影响,保留原来的值。
•
•异常优先级
2、R13,R14,CPSR,SPSR,及之间的关系。
寄存器R13通常作为堆栈指针(SP),用于保存待使用的寄存器的内容。
寄存器R14称为链接寄存器(LR),在结构上有两个特殊功能:
当使用BL指令调用子程序时,返回地址将自动存入R14中;
当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)
寄存器CPSR为当前程序状态寄存器,在异常模式中,另外一个寄存器“程序状态保存寄存器(SPSR)”可以被访问。
每种异常都有自己的SPSR,在进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPSR。
Thumb状态CPSR(无SPSR)与ARM状态CPSR相同
当控制位I置位时,IRQ中断被禁止
当控制位F置位时,FIQ中断被禁止
M[4:
0]
模式
10000
用户
10001
快速中断
10010
中断
10011
管理
10111
中止
11011
未定义
11111
系统
3、中断进入和退出,如何禁止中断,IRQ,FIQ区别,如何进入,如何出去。
为什么FIQ快。
只有当CPSR中相应的中断屏蔽位被清除时,才可能发生IRQ异常,中断请求(IRQ)异常由一个nIRQ输入端的低电平所产生的正常中断。
•退出IRQ异常模式SUBSPC,R14_irq,#4
在发生FIQ中断后,处理器不必为保护寄存器而浪费时间,从而加速了FIQ的处理速度。
快速中断请求(FIQ)适用于对一个突发事件的快速响应,这得益于在ARM状态中,快中断模式有8个专用的寄存器可用来满足寄存器保护的需要(这可以加速上下文切换的速度)。
FIQ中断返回:
SUBSPC,R14_fiq,#4
4、ARM7IDMI的含义,产生的异常的条件是什么,进入什么模式,如何退出
只要正常的程序流被暂时中止,处理器就进入异常模式。
5、冯诺,哈佛,常见的嵌入式处理器、嵌入式操作系统,及常见的电器,ARM7是什么结构?
ARM处理器采用冯·
诺依曼(VonNeumann)结构,指令、数据和I/O统一编址(即存在同一个空间)。
只有装载、保存和交换指令可访问存储器中的数据。
▪嵌入式微处理器EMPU;
▪微控制器MCU;
▪嵌入式DSP处理器;
嵌入式片上系统(SOC)
嵌入式Linux,VxWorks,WinCE,μC/OS-II
6、ARM7的存储器是什么编址方式,几级流水?
统一编址方式,3级流水线,取指译码执行
7、ARM,只有哪些指令,能访问外存?
只有装载LDR、存储STR、交换SWP指令可以对存储器中的数据进行访问
8、指令系统,常见的指令:
杂项指令,伪指令;
ARM指令种类:
1.存储器访问指令;
2.数据处理指令;
3.乘法指令;
4.ARM分支指令;
5.协处理器指令
6.杂项指令;
7.伪指令——共有7类指令,可以完成存储器访问、数据运算、程序跳转、处理器控制、以及帮助编程的伪指令等。
部分逻辑运算符:
AND,ORR:
逻辑“或”运算,EOR:
逻辑“异或”运算,BIC:
位清除运算
MULR3,R2,R1;
R3=R2×
R1MLAR3,R2,R1,R0;
R1+R0
杂项指令:
1.软件中断产生指令:
SWI
MOVR0,#34;
设置子功能号为34
SWI12;
调用12号软中断
▪指令中的24位立即数被忽略,用户请求的服务类型由寄存器R0的值决定,参数通过其它的通用寄存器传递。
MOVR0,#12;
MOVR1,#34;
SWI0
2.程序状态寄存器读指令:
MRSR1,CPSR/SPSR;
读取CPSR/SPSR状态寄存器到R1
3.程序状态寄存器写指令:
MSR
eg.使能IRQ中断
Enable_IRQ
MRSR0,CPSR
BICR0,R0,#0x80
MSRCPSR_c,R0
MOVPC,LR
禁能IRQ中断
Disable_IRQ
MRSR0,CPSR
ORRR0,R0,#0x80
MSRCPSR_c,R0
MOVPC,LR
伪指令;
ARM伪指令有四条:
1.小范围地址读取指令:
ADR
2.中等:
ADRL
3.大等:
LDR
4.空操作:
NOP
指令格式
指令助记符>
{<
执行条件>
}{S}<
Rd目标寄存器>
<
Rn第1个操作数的寄存器>
{,<
第2个操作数>
}
.ARM指令的特点
——可条件执行、可选择影响标志位、具有非常灵活的第二操作数;
LDR/STR---------单寄存器控制操作
LDRR2,[R5];
将R5指向地址的字数据存入R2
STRR1,[R2,#0x04];
将R1的数据存储到R0+0x04地址
LDM为加载多个寄存器;
STM为存储多个寄存器
9、ARM处理器具有9种基本寻址方式。
1.寄存器寻址;
MOVR1,R2;
将R2的值存入R1
SUBR0,R1,R2;
将R1的值减去R2的值,结果保存到R0
2.立即寻址;
SUBSR0,R0,#1;
R0减1,结果放入R0,并且影响标志位
MOVR0,#0xFF000;
将立即数0xFF000装入R0寄存器
3.寄存器移位寻址;
MOVR0,R2,LSL#3;
R2的值左移3位,结果放入R0,;
即是R0=R2×
8
ANDSR1,R1,R2,LSLR3;
R2的值左移R3位,然后和R1相;
“与”操作,结果放入R1
4.寄存器间接寻址;
LDRR1,[R2];
将R2指向的存储单元的数据读出;
保存在R1中
SWPR1,R1,[R2];
将寄存器R1的值和R2指定的存储;
单元的内容交换
LDRR0,[R1],-R2;
将R1指向的存储单元的数据读出;
保存在R0中,并且R1=R1-R2
5.基址寻址;
LDRR2,[R3,#0x0C];
读取R3+0x0C地址上的存储单元;
的内容,放入R2STRR1,[R0,#-4]!
;
先R0=R0-4,然后把R1的值寄存;
到保存到R0指定的存储单元
6.多寄存器寻址;
LDMIAR1!
{R2-R7,R12};
将R1指向的单元中的数据读出到;
R2~R7、R12中(R1自动加1)
STMIAR0!
将寄存器R2~R7、R12的值保;
存到R0指向的存储;
单元中(R0自动加1)
7.堆栈寻址;
所以可以组合出四种类型的堆栈方式:
▪满递增:
堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。
指令如LDMFA、STMFA等;
▪空递增:
堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。
指令如LDMEA、STMEA等;
▪满递减:
堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。
指令如LDMFD、STMFD等;
▪空递减:
堆栈向下增长,堆栈指针向堆栈下的第一个空位置。
指令如LDMED、STMED等。
▪STMFDSP!
{R0-R7,LR}
▪LDMFDSP!
{R0-R7,PC}
{R0-R7,PC}^--------^表示回复CPSR
▪堆栈寻址;
STMFD,LDMFD;
STMFDSP!
{R0-R6}
8.相对寻址。
10、
MOV,LDR,及其差别,STR,SWI,STMFD,第二操作数(LSI#1),
1.MOV指令与LDR指令都是往目标寄存器中传送数据,但是它们有什么区别吗?
MOV指令用于将数据从一个寄存器传送到另一个寄存器中,或者将一个常数传送到一个寄存器中,但是不能访问内存。
LDR指令用于从内存中读取数据放入寄存器中。
SWPR2,R1,[R0];
[R0]→R2,R1→[R0]
ADD,SUB,ADDS,RSBSswp,cmp;
ADC:
带进位加法运算
RSB:
逆向减法运算
CMPR3,R1;
R3减R1并影响标志位
CMP与SUBS的区别?
CMP不保存结果,只影响标志位
1.用R1寄存器的最低字节替换掉R2寄存器的最低字节,并不影响条件标志位?
ANDR1,R1,#0x000000FF
ANDR2,R2,#0xFFFFFF00
ORRR2,R2,R1
11、LDR及LDR伪指令差别。
CMP,会简单的汇编,如R5大于0x40,则R5-1等等。
写一个延时程序?
LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器。
在汇编编译源程序时,LDR伪指令被编译器替换成一条合适的指令。
若加载的常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替该LDR伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的LDR指令从文字池读出常量。
•指令条件码表
条件助记符
标志
含义
EQ
Z=1
相等
NE
Z=0
不相等
CS/HS
C=1
无符号数大于或等于
CC/LO
C=0
无符号数小于
MI
N=1
负数
PL
N=0
正数或零
VS
V=1
溢出
VC
V=0
没有溢出
HI
C=1,Z=0
无符号数大于
LS
C=0,Z=1
无符号数小于或等于
GE
N=V
有符号数大于或等于
LT
N!
=V
有符号数小于
GT
Z=0,N=V
有符号数大于
LE
Z=1,N!
有符号数小于或等于
CMPR0,R1;
R0与R1比较
ADDHIR0,R0,#1;
若R0>
R1,则R0=R0+1
ADDLSR1,R1,#1;
若R0≤R1,则R1=R1+1
1.请使用NOP伪指令、比较指令、条件跳转指令等完成一个软件延时子程序,延时长度由R0寄存器的数值控制?
Delay
NOP;
空操作
NOP
SUBSR0,R0,#1;
循环次数减一
BNEDelay;
如果循环未结束,跳转Delay继续
MOVPC,LR;
子程序返回
12、ARM和THUMB是什么,如何切换。
;
功能:
使用BX指令切换处理器状态
AREAExample8,CODE,READONLY
ENTRY
CODE32
ARM_CODE
ADRR0,THUMB_CODE+1
BXR0;
跳转并切换处理器状态
CODE16;
在Thumb程序段之前要用CODE16声明。
THUMB_CODE
MOVR0,#10;
R0=10
MOVR1,#20;
R1=20
ADDR0,R1;
R0=R0+R1
B.
END
13、MOVPC,…;
B;
B,BL,BX;
区别。
在ARM中有两种方式可以实现程序的跳转:
1.直接向PC寄存器赋值实现跳转;
例:
MOVPC,R14
2.使用分支指令直接跳转。
B:
分支指令;
B的转移范围:
正负32M
BL:
带链接的分支指令;
BLlabel;
LR→PC-4,PC→label
BX:
带状态切换的分支指令BXRm;
ADRLR0,T_Fun+1;
将Thumb程序的入口地址加1存入R0
BXR0;
跳转到R0指定的地址,并根据R0的最低位来切换处理器状态
14、LPCARM的特点;
MAM,VIC,EMC…它们有什么功能与特点。
MAM:
LPC2000微控制器扩展了器件内部Flash总线宽度为128位,一次操作可获取4条32位的ARM指令或8条16位的Thumb指令,用于提高处理器的指令执行速度。
•EMC:
外部存储器控制器是AMBAAHB总线上的一个从模块,它为AMBAAHB系统总线和外部(片外)存储器器件提供了一个接口。
支持静态存储器映射器件;
特性
•4个存储器组(Bank0~Bank3)可单独配置,每个存储器组可访问16M字节空间;
•总线空闲周期可编程;
•可对静态RAM器件的读写等待时间进行编程;
•可编程外部数据总线宽度——8位、16位和32位。
向量中断控制器(VIC)负责管理芯片的中断源,最多可以管理32个中断输入请求。
▪FIQ中断:
具有最高优先级;
▪向量IRQ中断:
具有中等优先级;
▪非向量IRQ中断:
具有最低优先级;
在某些场合可能需要禁止在用户模式下访问VIC寄存器,以提高软件的安全等级。
15、LPC2000存储器分布,为什么要重映射。
为什么要重映射:
1、程序不可能总是放在首地址2、为了增加系统的灵活性
16、LPC可运行的程序矢量有什么特点;
为什么在0x18处总是放:
LDRPC[PC,#-0xff0].---vic
异常向量表位于存储器映射的0x0000~0x001C地址空间,定义了8个异常向量,每个异常向量占一个字。
当异常向量表前8个字指令的代码累加和为0时,BootBlock认为用户代码有效,否则为无效。
•引导块(BootBlock)功能主要是:
判断运行哪个存储器上的程序;
•检查用户代码是否有效;
•判断芯片是否被加密;
•芯片的在应用编程(IAP)以及在系统编程功能(ISP)。
17、启动代码干些什么;
1、向量表定义;
2、堆栈初始化;
3、系统变量初始化;
4、中断系统初始化;
5、I/O初始化;
6、外围初始化;
7、地址重映射等操作。
18、最小系统的定义,常见通信;
UART,IIC,SPI―――包括硬件连接,如何一主几从,软件流程;
19、PLL,看门狗,PWM作用
20、复位电路,为什么要有,LPC2000有那些复位,之间差别?
设计复位电路要注意什么?
设计一个简单的复位电路。
LPC2000系列芯片有两个复位源:
1、外部复位—把nRESET引脚拉为低电平,并保持一个最小时间,引发复位
2、看门狗复位—通过设置看门狗相关寄存器,当看门狗定时器溢出后,引发复位
复位指将计算机系统中的硬件逻辑归位到一个初始的状态,比如让寄存器恢复默认值、让处理器从第一条指令开始执行程序等。
名词解释:
10分
简答题2010题
填空2020空
编程与阅读20分,4题
综合题:
30
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 复习