ARM复习课后题答案完整版.docx
《ARM复习课后题答案完整版.docx》由会员分享,可在线阅读,更多相关《ARM复习课后题答案完整版.docx(14页珍藏版)》请在冰豆网上搜索。
ARM复习课后题答案完整版
1.国内嵌入式系统行业对嵌入式系统的定义是什么?
如何理解
答:
以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
从这个定义看以看出嵌入式系统是与应用紧密结合的,它具有很强的专用性,必须结合实际系统要求进行合理的裁剪利用。
因此有人把嵌入式系统比作是一个针对特定的应用而量身定做的专用计算机系统。
2.当前最常见的源码开放的嵌入式操作系统有哪些,请举出两例,并分析其特点
答:
嵌入式linux和嵌入式实时操作系统uc/os-II
Linux:
(1)linux是源码开放的,每一个技术细节都是透明的,易于裁剪定制。
(2)目前嵌入式linux已经在多种嵌入式处理器芯片移植成功,有大量且不断增加的开发工具,这些工具为嵌入式系统开发提供了良好的开发环境。
(3)Linux内核小、功能强大、运作稳定、效率高。
Ucos:
(1)源代码公开
(2)可移植性。
(3)可固化
(4)可裁剪
(5)占先式
(6)多任务
(7)可确定性。
(8)系统服务
第2章ARM技术与ARM体系结构
3.arm处理器的工作模式有哪几种,其中哪些为特权模式,哪些为异常模式,并指出处理器在什么情况下进入相应的模式。
答:
ARM处理器共有7种工作模式:
用户模式:
非特权模式,也就是正常程序执行的模式,大部分任务在这种模式
下执行。
在用户模式下,如果没异常发生,不允许应用程序自行改变处理器的工作
模式,如果有异常发生,处理器会自动切换工作模式
FIQ模式:
也称为快速中断模式,支持高速数据传输和通道处理,当一个高优
先级(fast)中断产生时将会进入这种模式。
IRQ模式:
也称为普通中断模式,:
当一个低优先级中断产生时将会进入这种模
式。
在这模式下按中断的处理器方式又分为向量中断和非向量中断两种。
通常的中
断处理都在IRQ模式下进行。
SVC模式:
称之为管理模式,它是一种操作系统保护模式。
当复位或软中断指
令执行时处理器将进入这种模式。
中止模式:
当存取异常时将会进入这种模式,用来处理存储器故障、实现虚拟
存储或存储保护。
未定义指令异常模式:
当执行未定义指令时会进入这种模式,主要是用来处理
未定义的指令陷阱,支持硬件协处理器的软件仿真,因为未定义指令多发生在对协
处理器的操作上。
系统模式:
使用和User模式相同寄存器组的特权模式,用来运行特权级的操作
系统任务。
在这7种工作模式中,除了用户模式以外,其他6种处理器模式可以称为特权
模式,在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理
器模式的切换。
在这6种特权模式中,除了系统模式外的其他5种特权模式又
称为异常模式
4.分析程序状态寄存器(PSR)各位的功能描述,并说明C、Z、N、V在什
么情况下进行置位和清零。
答:
PSR的具体格式为
V—溢出标志位
对于加/减法运算指令,当操作数和运算结果为二进制补码表示的带符号数时,
V=1表示符号位溢出,其他的指令通常不影响V位。
C—进位或借位标志位
对于加法指令(包括比较指令CMN),结果产生进位,则C=1,表示无符号
数运算发生上溢出,其他情况下C=0;
在减法指令中(包括比较指令CMP),结果产生借位,则C=0,表示无符号数
运算发生下溢出,其他情况下C=1;
对于包含移位操作的非加/减法运算指令,C中包含最后一次溢出位的数值;
对于其他非加/减法运算指令,C位的值通常不受影响。
Z—结果为0标志位
Z=1表示运算结果是0,Z=0表示运算结果不是零;
对于CMP指令,Z=1表示进行比较的两个数大小相等。
N—符号标志位
本位设置成当前指令运算结果的bit[31]的值。
当两个补码表示有符号整数运算
时,N=1表示运算的结果为负数,N=0表示结果为正数或零。
5.简述ARM处理器异常处理和程序返回的过程。
答:
ARM在异常产生时会进行以下操作:
(1)将引起异常指令的下一条指令地址保存到新的异常模式的LR中,使异
常处理程序执行完后能根据LR中的值正确返回;
(2)将CPSR的内容复制到新的异常模式下的SPSR中;
(3)根据异常类型将CPSR模式控制位强制设定为发生异常所对应的模式
值;
(4)强制PC指向相应的异常向量地址。
ARM在异常返回时
(1)从SPSR_恢复CPSR;
(2)从LR_恢复PC。
6.ARM处理器字数据的存储格式有哪两种?
并指出这两种格式的区别。
答:
(1)小端存储格式(Little-Endian)
在小端存储格式中,对于地址为A的字单元,其中字节单元由低位到高位字节地
址顺序为A,A+1,A+2,A+3;对于地址为A的半字单元,其中字节单元由低位到高
位字节地址顺序为A,A+1;
(2)大端存储格式(Big-Endian)
在大端存储格式中,对于地址为A的字单元,其中字节单元由高位到低位字节地
址顺序为A,A+1,A+2,A+3;对于地址为A的半字单元,其中字节单元由高位到低
位字节地址顺序为A,A+1。
第3章ARM指令集寻址方式
3.在ARM指令中,什么是合法的立即数?
判断下面各立即数是否合法,如果合
法则写出在指令中的编码格式(也就是8位常数和4位的移位数)。
0x54300x1080x3040x501
0xFB100000x3340000x3FC0000x1FE0000
0x55800000x7F8000x39C0000x1FE80000
答:
计算步骤:
(1)十六进制立即数两端0去掉
(2)展成二进制
(3)连续偶数个0去掉,数字中间0不去掉
(4)剩下数字位数小于等于8可以,反之,不可以。
5.ARM数据处理指令具体的寻址方式有哪些,如果程序计数器PC作为目标寄存器,会产生什么结果?
答:
ARM数据处理指令寻址方式有5种
1)第二操作数为立即数
2)第二操作数为寄存器
3)第二操作数为寄存器移位方式,且移位的位数为一个5位的立即数
4)第二操作数为寄存器移位方式,且移位数值放在寄存器中
5)第二操作数为寄存器进行RRX移位得到
如果程序计数器PC作为目标寄存器,会发生程序跳转。
6.在Load/Store指令寻址中,字、无符号字节的Load/Store指令寻址和半字、有
符号字节寻址,试分析它们之间的差别。
答:
字、无符号字节寻址:
1)Addressing_mode中的偏移量为立即数
2)Addressing_mode中的偏移量为寄存器的值
3)Addressing_mode中的偏移量通过寄存器移位得到
半字、有符号字节寻址:
1)Addressing_mode中的偏移量为立即数
2)Addressing_mode中的偏移量为寄存器的值
从以上分析看出:
差别就在于后者没有第三项寻址方式。
7.块拷贝Load/Store指令在实现寄存器组和连续的内存单元中数据传递时,地址
的变化方式有哪几种类型,并分析它们的地址变化情况。
答:
批量Load/Store指令在实现寄存器组和连续的内存单元中数据传递时,地址的
变化方式(addr_mode)有以下4种类型:
后增IA(IncrementAfter):
每次数据传送后地址加4;
先增IB(IncrementBefore):
每次数据传送前地址加4;
后减DA(DecrementAfter):
每次数据传送后地址减4;
先减DB(DecrementBefore):
每次数据传送前地址减4。
8.栈操作指令地址的变化方式有哪几种类型,并分析它们的地址变化情况,从而
得出栈操作指令寻址和块拷贝Load/Store指令之间的对应关系。
答:
(1)四种类型的堆栈工作方式,即:
满递增堆栈FA(EmptyAscending):
堆栈指针指向最后压入的数据,且由低地址
向高地址生成。
满递减堆栈FD(FullDescending):
堆栈指针指向最后压入的数据,且由高地址
向低地址生成。
空递增堆栈EA(FullAscending):
堆栈指针指向下一个将要放入数据的空位置,
且由低地址向高地址生成。
空递减堆栈ED(EmptyDescending):
堆栈指针指向下一个将要放入数据的空位
置,且由高地址向低地址生成。
(2)栈操作指令寻址和块拷贝Load/Store指令之间的对应关系见表3-10。
第4章ARM指令集系统
4.分析下列每条语句的功能,并确定程序段所实现的操作。
CMPR0,#0
MOVEQR1,#0
MOVGTR1,#1
答:
分析:
当R0等于0时,MOVEQ执行,则R1等于0;
当R0等于正数时,MOVGT执行,则R1等于1;
此功能码段可以判别R0中的值为正数还是0。
5.请使用多种方法实现将字数据0xFFFFFFFF送入寄存器R0。
答:
例如,MVNR0,#0
或者:
MOVR0,#0
SUBR0,R0,#1
还可以用其它运算指令来实现,读者自行写出。
9.写出下列ARM指令所实现操作:
LDRR2,[R3,#-4]!
LDRR0,[R0],R2
LDRR1,[R3,R2,LSL#2]!
;
LDRSBR0,[R2,#-2]!
STRBR1,[R2,#0xA0]
LDMIAR0,{R1,R2,R8}
STMDBR0!
,{R1-R5,R10,R11}
解答:
LDRR2,[R3,#-4]!
将存储器地址为R3-4的字数据读入R2,并将地址R3-4写入R3
LDRR0,[R0],R2
将存储器地址为R0的字数据读入R0,并将地址R0+R2写入R0
LDRR1,[R3,R2,LSL#2]!
将存储器地址为R3+R2*4的字数据读入R1,并将地址R3+R2*4写入R3
LDRSBR0,[R2,#-2]!
将存储器地址为R2-2的字节数据读入R0的低8位,将R0的高24位用符号
位扩展,并将地址R2-2写入R2
STRBR1,[R2,#0xA0]
将R0的低8位存入存储器地址为R2+0xA0字节中
LDMIAR0,{R1,R2,R8}
将内存单元R0所指向的地址单元以字为单位递减方式读取到R1,R2,R8中,
低地址编号的字数据内存单元对应低编号寄存器
STMDBR0!
{R1-R5,R10,R11}
将R1-R5,R10,R11存储到以R0为起始地址的递减内存中,最终R0指向存放R11
的地址单元
10.SWP指令的优势是什么?
答:
ARM指令支持原子操作,主要是用来对信号量的操作,因为信号量操作的要求
是作原子操作,即在一条指令中完成信号量的读取和修改操作。
SWP数据交换指令
就能完成此功能,能在一条指令中实现存储器和寄存器之间交换数据。
11.如何用带PSR操作的批量字数据加载指令实现IRQ中断的返回?
答:
在进入IRQ中断处理子程序时,首先计算返回的地址,并保存相关的寄存器
SUBR14,R14,#4
STMFDR13!
{R0-R3,R12,LR}
如果IRQ中断处理程序返回到被中断的进程则执行下面的指令。
该指令从数据栈中恢复R0-R3及R12的值,将返回地址传送到PC中,并将SPSR_irq值复制到CPSR中