ARM试题.doc
- 文档编号:14647529
- 上传时间:2023-06-25
- 格式:DOC
- 页数:9
- 大小:44.50KB
ARM试题.doc
《ARM试题.doc》由会员分享,可在线阅读,更多相关《ARM试题.doc(9页珍藏版)》请在冰点文库上搜索。
百度文库-让每个人平等地提升自我
一.选择题:
1、在下列ARM处理器的各种模式中,只有_____模式不可以可以自由地改变处理器的工作模式。
A、用户模式(User)
B、系统模式(System)
C、终止模式(Abort)
D、中断模式(IRQ)
答案:
A
2、相对于ARM指令集,Thumb指令集的特点是____
A、指令执行速度快
B、16位指令集,可以得到密度更高的代码,对于需要严格控制成本的设计非常有意义
C、Thumb模式有自己独立的寄存器
D、16位指令集,代码密度高,加密性能好
答案:
B
3、同CISC相比,下面哪一项不属于RISC处理器的特征____
A、采用固定长度的指令格式,指令规整、简单、基本寻址方式有2~3种。
B、减少指令数和寻址方式,使控制部件简化,加快执行速度。
C、数据处理指令只对寄存器进行操作,只有加载/存储指令可以访问存储器,以提高指令的执行效率,同时简化处理器的设计。
D、RISC处理器都采用哈佛结构
答案:
D
4、以下叙述中,不符合RISC指令系统特点的是。
A)指令长度固定,指令种类少
B)寻址方式种类丰富,指令功能尽量增强
C)设置大量通用寄存器,访问存储器指令简单
D)选取使用频率较高的一些简单指令
答案:
B
5、下面关于ARM处理器的体系结构描述哪一个是错误的____
A、三地址指令格式 B、所有的指令都是多周期执行
C、指令长度固定 D、Load-Store结构
答案:
B
6、在ARM寄存器结构中,栈指针使用____寄存器,
A、R0 B、R13 C、R14 D、R15
答案:
B
7、在ARM体系结构中,要从主动用户模式(User)切换到超级用户模式(Supervisor),应采用何种方法?
A、直接修改CPU状态寄存器(CPSR)对应的模式
B、先修改程序状态备份寄存器(SPSR)到对应的模式,再更新CPU状态
C、使用软件中断指令(SWI)
D、让处理器执行未定义指令
答案:
C
8、嵌入式系统加电或复位后,所有的CPU通常都从某个由CPU制造商预先安排的地址上取指令。
例如:
对于S3C2410来说,BootLoader会映射到______地址处
A0x0c000000B0x00000000C0x00000018D0x
答案:
B
9、32位体系结构的ARM处理器有____种不同的处理器工作模式,和____个主要用来标识CPU工作状态和程序运行状态的状态寄存器。
A、7、7
B、7、6
C、6、6
D、6、7
答案:
B
10、CPSR中的低8位称为控制位,下列不属于控制位的是____
A、N
B、I
C、F
D、T
答案:
A
11、下列条件码中表示无符号数小于的是____
A、HI
B、LS
C、CS
D、CC
答案:
D
12、下列ARM指令中,可用于满递增堆栈操作的是____
A、STMDA
B、STMIA
C、STMDB
D、STMIB
答案:
D
13、下列32位数中,不可作为立即数的是____
A、0x
B、0x04800000
C、0x00000012
D、0x8000007
答案:
A
14、ATPCS规定数据栈是____类型
A、满递减
B、满递增
C、空递减
D、空递增
答案:
A
15、ARM伪指令中,可用于大范围地址读取的是____
A、ADR
B、ADRL
C、LDR
D、NOP
答案:
C
二.简答题
1.ARM9TDMI采用了几级流水线工作方式,简要说明。
答:
ARM9TDMI采用了5级流水线结构,即:
取指(F)、指令译码(D)、执行(E)、数据存储访问(M)、写寄存器(W)。
2.ARM9TDMI支持的数据类型有几种?
各有什么要求?
答:
ARM9TDMI支持的数据类型有字节(8位),半字(16位)及字(32位)数据类型。
字必须是四字节边界对齐,半字必须是两字节边界对齐。
3.ARM920T体系结构支持哪两种方法存储字数据?
答:
ARM920T体系结构支持两种方法存储字数据即大端格式和小端格式。
在大端格式中,字数据的高字节存储在低地址单元中,而字数据的低字节则存放在高地址单元中。
在小端存储格式中,低地址单元中存放的是字数据的低字节,高地址单元存放的是字数据的高字节。
4.ARM920T体系结构所支持的哪几种异常?
说明其具体含义。
答:
ARM920T体系结构所支持以下7种异常:
(1)复位:
当处理器的复位电平有效时,产生复位异常,程序跳转到复位异常处理程序处执行。
(2)未定义指令:
当ARM处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。
可使用该异常机制进行软件仿真。
(3)软件中断:
该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。
可使用该异常机制实现系统功能调用。
(4)指令预取中止:
若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。
(5)数据中止:
若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生
数据中止异常。
(6)IRQ (外部中断请求):
当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。
系统的外设可通过该异常请求中断服务。
(7)FIQ (快速中断请求):
当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。
5.简述ARM处理器对异常的响应的步骤。
答:
当一个异常出现以后,ARM微处理器会执行以下几步操作:
(1)将下一条指令的地址存入相应连接寄存器LR。
若异常是从ARM状态进入,LR寄存器中保存的是下一条指令的地址(当前PC+4或PC+8,与异常的类型有关);若异常是从Thumb状态进入,则在LR寄存器中保存当前PC的偏移量。
这样,异常处理程序就不需要确定异常是从何种状态进入的,程序在处理异常返回时能从正确的位置重新开始执行。
例如:
在软件中断异常SWI中,指令MOVPC,R14_svc总是返回到下一条指令,而不管SWI是在ARM状态执行,还是在Thumb状态执行。
(2)将CPSR复制到相应的SPSR中。
(3)根据异常类型,强制设置CPSR的运行模式位。
(4)强制PC从相应的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。
还可以设置中断禁止位,以禁止中断发生。
如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态。
6.简述ARM处理器从异常返回的步骤
答:
异常处理完毕之后,执行以下操作从异常返回:
(1)将连接寄存器LR的值减去相应的偏移量后送到PC中。
(2)将SPSR复制回CPSR中。
(3)若在进入异常处理时设置了中断禁止位,要在此清除。
7.写出基于ARM920T核的处理器的异常优先级(ExceptionPriorities)。
答:
当多个异常同时发生时,系统根据固定的优先级决定异常的处理次序。
异常优先级由高到低的排列次序为:
复位、数据中止、FIQ、IRQ、预取指令中止、未定义指令、SWI。
8.写出基于ARM920T核的处理器的异常向量(ExceptionVectors)及异常进入的模式
答:
异常向量表
地址异常进入模式
0x0000,0000复位管理模式
0x0000,0004未定义模式未定义模式
0x0000,0008软件中断管理模式
0x0000,000C终止(预取指令)终止模式
0x0000,0010终止(数据)终止模式
0x0000,0014保留保留
0x0000,0018IRQIRQ
0x0000,001CFIQFIQ
9.画出采用大端格式存放01020304H的存储器示意图。
答:
大端格式存储示意图如下:
高地址
低地址
04H
03H
02H
01H
10.画出采用小端格式存放05060708H的存储器示意图。
答:
小端格式存储示意图如下:
高地址
低地址
05H
06H
07H
08H
11.ARM920T有哪些运行模式,其中哪些属于特权模式?
答:
ARM920T支持7种运行模式,分别为用户模式(usr),快速中断模式(fiq),外部中断模式(irq),管理模式(svc),数据访问终止模式(abt),系统模式(sys),未定义指令中止模式(und);除用户模式以外,其余的6种模式称为特权模式。
12.列出ARM处理器的37个32位物理寄存器。
答:
未分组寄存器R0~R7;分组寄存器R8_fiq~R12_fiq,R8_usr~R12_usr,R13_usr、R13_fiq、R13_irq、R13_svc、R13_abt、R13_und,R14_usr、R14_fiq、R14_irq、R14_svc、R14_abt、R14_und;程序计数器PC(R15);CPSR,SPSR_fiq、SPSR_irq、SPSR_svc、SPSR_abt、SPSR_und。
三.编程题
1.用汇编语言编写程序读取存储器0x地址上的数据,将数据加1,若结果小于10则使用STR指令把结果写回原地址,若结果大于等于10,则把0写回原地址。
COUNT EQU 0x ;定义一个变量,地址为0x
AREA Example2,CODE,READONLY ;声明代码段Example2
ENTRY ;标识程序入口
CODE32 ;声明32位ARM指令
START LDR R1,=COUNT ;R1<=COUNT
MOV R0,#0 ;R0<=0
STR R0,[R1] ;[R1]<=R0,即设置COUNT为0
LDR R1,=COUNT
LDR R0,[R1] ;R0<=[R1]
ADD R0,R0,#1 ;R0<=R0+1
CMP R0,#10 ;R0与10比较,影响条件码标志
MOVHS R0,#0 ;若R0大于等于10,则此指令执行,R0<=0
STR R0,[R1] ;[R1]<=R0,即保存COUNT
LOOP B LOOP
END
2.用汇编语言实现堆栈初始化,堆栈大小可自己设定。
;定义堆栈的大小
USR_STACK_LEGTHEQU64
SVC_STACK_LEGTHEQU0
FIQ_STACK_LEGTHEQU16
IRQ_STACK_LEGTHEQU64
ABT_STACK_LEGTHEQU0
UND_STACK_LEGTHEQU0
AREA Example5,CODE,READONLY ;声明代码段Example5
ENTRY ;标识程序入口
CODE32 ;声明32位ARM指令
START MOV R0,#0
MOV R1,#1
MOV R2,#2
MOV R3,#3
MOV R4,#4
MOV R5,#5
MOV R6,#6
MOV R7,#7
MOV R8,#8
MOV R9,#9
MOV R10,#10
MOV R11,#11
MOV R12,#12
BL InitStack ;初始化各模式下的堆栈指针
;打开IRQ中断(将CPSR寄存器的I位清零)
MRS R0,CPSR ;R0<=CPSR
BIC R0,R0,#0x80
MSR CPSR_cxsf,R0 ;CPSR<=R0
;切换到用户模式
MSRCPSR_c,#0xd0
MRS R0,CPSR
;切换到管理模式
MSRCPSR_c,#0xdf
MRS R0,CPSR
HALT B HALT
;名称:
InitStack
;功能:
堆栈初始化,即初始化各模式下的堆栈指针。
;入口参数:
无
;出口参数:
无
;说明:
在特权模式下调用此子程序,比如复位后的管理模式
InitStack
MOVR0,LR ;R0<=LR,因为各种模式下R0是相同的
;设置管理模式堆栈
MSRCPSR_c,#0xd3
LDRSP,StackSvc
;设置中断模式堆栈
MSRCPSR_c,#0xd2
LDRSP,StackIrq
;设置快速中断模式堆栈
MSRCPSR_c,#0xd1
LDRSP,StackFiq
;设置中止模式堆栈
MSRCPSR_c,#0xd7
LDRSP,StackAbt
;设置未定义模式堆栈
MSRCPSR_c,#0xdb
LDRSP,StackUnd
;设置系统模式堆栈
MSRCPSR_c,#0xdf
LDRSP,StackUsr
MOVPC,R0
StackUsr DCDUsrStackSpace+(USR_STACK_LEGTH-1)*4
StackSvcDCDSvcStackSpace+(SVC_STACK_LEGTH-1)*4
StackIrqDCDIrqStackSpace+(IRQ_STACK_LEGTH-1)*4
StackFiqDCDFiqStackSpace+(FIQ_STACK_LEGTH-1)*4
StackAbtDCDAbtStackSpace+(ABT_STACK_LEGTH-1)*4
StackUndDCDUndtStackSpace+(UND_STACK_LEGTH-1)*4
;分配堆栈空间
AREAMyStacks,DATA,NOINIT,ALIGN=2
UsrStackSpace SPACE USR_STACK_LEGTH*4 ;用户(系统)模式堆栈空间
SvcStackSpace SPACE SVC_STACK_LEGTH*4 ;管理模式堆栈空间
IrqStackSpace SPACE IRQ_STACK_LEGTH*4 ;中断模式堆栈空间
FiqStackSpace SPACE FIQ_STACK_LEGTH*4 ;快速中断模式堆栈空间
AbtStackSpace SPACE ABT_STACK_LEGTH*4 ;中止义模式堆栈空间
UndtStackSpace SPACE UND_STACK_LEGTH*4 ;未定义模式堆栈
END
3.用C调用汇编语言实现字符串的连接。
汇编程序:
AREAstrcat,CODE,READONLY
EXPORTmy_strcat
my_strcat
LDRB R2,[R1],#1
CMP R2,#0
BNE my_strcat
SUB R1,R1,#1
my_loop
LDRB R2,[R0],#1
STRB R2,[R1],#1
CMP R2,#0
BNE my_loop
MOV PC,LR
END
C程序:
#include<>
externvoidmy_strcat(constchar*src,char*dst);
intmain(void){
constchar*a="World!
";
charb[20]="Hello";
printf("OriginaString:
%s\n",b);
my_strcat(a,b);
printf("AddedString:
%s\n",b);
return0;
}
4.用汇编语言调用C语言实现n个数相加,n为C函数的参数,由汇编语言传递,结果存放在R5寄存器中。
C程序:
int allsum(int n)
{
inti;
int nsum=0;
for(i=1;i<=n;i++){
nsum+=i;
}
return nsum;
}
汇编程序:
AREAscaller,CODE,READONLY
IMPORTallsum
EXPORT scc
entry
MOV R0,#20
BL allsum
MOV R5,R0
HALTBHALT
END
9
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 试题