《ARM嵌入式系统结构与编程》习题答案.docx
- 文档编号:4672026
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:14
- 大小:28.24KB
《ARM嵌入式系统结构与编程》习题答案.docx
《《ARM嵌入式系统结构与编程》习题答案.docx》由会员分享,可在线阅读,更多相关《《ARM嵌入式系统结构与编程》习题答案.docx(14页珍藏版)》请在冰点文库上搜索。
《ARM嵌入式系统结构与编程》习题答案
《ARM嵌入式系统结构与编程》习题答案
1章绪论
1.国内嵌入式系统行业对“嵌入式系统”的定义是什么?
如何理解?
答:
见教材节。
2.嵌入式系统是从何时产生的,简述其发展历程。
答:
见教材节。
3.当前最常见的源码开放的嵌入式操作系统有哪些,请举出两例,并分析其特点。
答:
见教材节的嵌入式Linux和嵌入式实时操作内核UC/OS-I。
4.举例说明嵌入式设备在工控设备中的应用。
答:
见教材节的“工业控制领域”。
5.未来嵌入式技术的发展趋势有哪些?
答:
见教材节的嵌入式技术的发展趋势。
2章ARM技术与ARM体系结构
1.简述ARM处理器内核调试结构原理。
答:
对教材节的图2-1进行描述。
2.分析ARM7TDMI-S各字母所代表的含义。
答:
参考教材.2ARM核版本命名规则说明。
3.ARM处理器的工作模式有哪几种,其中哪些为特权模式,哪些为异常模式,并指出处理器在什么情况下进入相应的模式。
ARM处理器共有7种工作模式:
用户模式:
非特权模式,也就是正常程序执行的模式,大部分任务在这种模式下执行。
在用户模式下,如果没异常发生,不允许应用程序自行改变处理器的工作模式,如果有异常发生,处理器会自动切换工作模式FIQ模式:
也称为快速中断模式,支持高速数据传输和通道处理,当一个高优(fast)中断产生时将会进入这种模式。
IRQ模式:
也称为普通中断模式,:
当一个低优先级中断产生时将会进入这种模式。
在这模式下按中断的处理器方式又分为向量中断和非向量中断两种。
通常的中断处理都在IRQ模式下进行。
SVC模式:
称之为管理模式,它是一种操作系统保护模式。
当复位或软中断指令执行时处理器将进入这种模式。
中止模式:
当存取异常时将会进入这种模式,用来处理存储器故障、实现虚拟存储或存储保护。
未定义指令异常模式:
当执行未定义指令时会进入这种模式,主要是用来处理未定义的指令陷阱,支持硬件协处理器的软件仿真,因为未定义指令多发生在对协处理器的操作上。
系统模式:
使用和User模式相同寄存器组的特权模式,用来运行特权级的操作系统任务。
在这7种工作模式中,除了用户模式以外,其他6种处理器模式可以称为特权模式,在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。
在这6种特权模式中,除了系统模式外的其他5种特权模式又称为异常模式
4.分析程序状态寄存器各位的功能描述,并说明C、Z、N、V在什么情况下进行置位和清零。
PSR的具体格式为
V—溢出标志位
对于加/减法运算指令,当操作数和运算结果为二进制补码表示的带符号数时,V=1表示符号位溢出,其他的指令通常不影响V位。
例如:
两个正数相加,运算结果为一个负数,则符号位溢出,相应V=1。
C—进位或借位标志位
对于加法指令,结果产生进位,则C=1,表示无符号数运算发生上溢出,其他情况下C=0;
在减法指令中,结果产生借位,则C=0,表示无符号数运算发生下溢出,其他情况下C=1;
对于包含移位操作的非加/减法运算指令,C中包含最后一次溢出位的数值;对于其他非加/减法运算指令,C位的值通常不受影响。
Z—结果为0标志位Z=1表示运算结果是0,Z=0表示运算结果不是零;对于CMP指令,Z=1表示进行比较的两个数大小相等。
N—T符号标志位
本位设置成当前指令运算结果的bit[31]的值。
当两个补码表示有符号整数运算时,N=1表示运算的结果为负数,N=0表示结果为正数或零。
5.简述ARM处理器异常处理和程序返回的过程。
答:
ARM在异常产生时会进行以下操作:
将引起异常指令的下一条指令地址保存到新的异常模式的LR中,使异常处理程序执行完后能根据LR中的值正确返回;
将CPSR的内容复制到新的异常模式下的SPSR中;
根据异常类型将CPSR模式控制位强制设定为发生异常所对应的模式值;强制PC指向相应的异常向量地址。
ARM在异常返回时从SPSR_恢复CPSR;
(2)从LR_恢复PC。
处理器字数据的存储格式有哪两种?
并指出这两种格式的区别。
答:
1)小端存储格式
在小端存储格式中,对于地址为A的字单元,其中字节单元低位到高位字节地址顺序为A,A+1,A+2,A+3;对于地址为A的半字单元,其中字节单元低位到高位字节地址顺序为A,A+1;2)大端存储格式
在大端存储格式中,对于地址为A的字单元,其中字节单元高位到低位字节地址顺序为A,A+1,A+2,A+3;对于地址为A的半字单元,其中字节单元高位到低位字节地址顺序为A,A+1。
7.分析带有存储器访问指令的流水线运行情况,并用图示说明其流水线的运行机制。
答:
在ARM三级流水线下:
对存储器的访问指令LDR就是非单周期指令。
这类指令在“执行”阶段后,还要进行“存储器访问”和“寄存器回写”操作,每一步占用1个时钟周期。
在指令执行时空图中,处于时钟周期T5时,LDR指令要进行数据的存储器操作,在时钟周期T6要进行寄存器的回写操作,这两步还要占用执行单元,因此其下指令1条指令的“执行”就被阻断了,其下数第2条指令的译码被阻断,要等待LDR操作完毕后,流水线的正常运行才能被恢复。
在图中,处理器用6个时钟周期执行了4条指令,指令平均周期数(CPI)=时钟周期。
8.简述ARM9的5级流水线每一级所完成的功能和实现的操作。
答:
在ARM9在指令操作上采用5级流水线。
1)取指:
从指令Cache中读取指令。
2)译码:
对指令进行译码,识别出是对哪个寄存器进行操作并从通用寄存器中读取操作数。
3)执行:
进行ALU运算和移位操作,如果是对存储器操作的指令,则在ALU中计算出要访问的存储器地址。
4)存储器访问:
如果是对存储器访问的指令,用来实现数据缓冲功能;如果不是对存储器访问的指令,本级流水线为一个空的时钟周期。
寄存器回写:
将指令运算或操作结果写回到目标寄存器中。
9.什么叫做流水线互锁?
应如何来解决,举例说明。
答:
在流水线运行过程中可能会出现这种情况:
当前指令的执行可能需要前面指令的执行结果,但这时前面的指令没有执行完毕,从而会导致当前指令的执行无法获得合法的操作数,这时就会引起流水线的等待,这种现象在流水线机制里称为互锁。
举例:
参见教材第29页:
当互锁发生时,硬件会停止这个指令的执行,直到数据准备好为止。
如图所示,LDR指令进行完执行阶段,还需要两个时钟周期来完成存储器访问和寄存器写操作,但这时指令MOV中用到的R9正是LDR中需要进行寄存器加载操作后的寄存器,
因此MOV要进行等待,直到LDR指令的寄存器写操作完成。
3章ARM指令集寻址方式1.在指令编码中,条件码占有几位,最多有多少个条件,各个条件是如何形成的?
答:
见教材节的描述。
2.指令条件码中,V标志位在什么情况下才能等于1?
答:
当指令的算术运算发生异常时,V标志位置1。
例如,两个正数相加,其结果为一负数;或者是两个负数相加,其结果为一正数,都会置V标志位。
3.在ARM指令中,什么是合法的立即数?
判断下面各立即数是否合法,如果合法则写出在指令中的编码格式。
0x5430 0x108 0x304 0x501 0xFB100000x3340000x3FC0000x1FE00000x55800000x7F8000x39C0000x1FE80000
答:
每个立即数一个8位的常数进行32位循环右移偶数位得到,其中循环右移的位数一个4位二进制的两倍表示。
即:
=immed_进行32位循环右移位符合这一条件的都为合法的立即数。
0x5430
0B0101010000110000 不合法0x108
0B000100001000 111101000010(30/2)0x304
0B001100000100 111111000001(30/2)0x501
0B010100000001 不合法0xFB10000
0B111110110001000000000000不合法0x334000
0B001100110100000000000000100111001101(18/2)0x3FC000
0B00111111000000000000 101000111111(18/2)0x1FE0000
0B000111111110(0000)[4]不合法0x5580000
0B010101011000(0000)[4]不合法0x7F80000
0B011110000001(0000)[4]不合法0x39C000
0B001110011100000000000000100111100111(18/2)0x1FE80000
0B000111111110(0000)[4]不合法
4.分析逻辑右移、算术右移、循环右移、带扩展的循环右移它们间的差别。
答:
见教材节的图3-1移位操作功能描述。
5.ARM数据处理指令具体的寻址方式有哪些,如果程序计数器PC作为目标寄存器,会产生什么结果?
ARM数据处理指令具体的寻址方式有5种,见教材节的具体说明。
如果程序计数器PC作为目标寄存器,会产生程序发生跳转。
6.在Load/Store指令寻址中,字、无符号字节的Load/Store指令寻址和半字、有符号字节寻址,试分析它们之间的差别。
答:
在Load/Store指令寻址中,字、无符号字节的Load/Store指令寻址有三种,具体见教材节;Load/Store指令寻址中,半字、有符号字节寻址有两种,具体见教材节;它们之间的差别:
在半字、有符号字节寻址中,没有Addressing_mode中的偏移量通过寄存器移位得到的形式。
7.块拷贝Load/Store指令在实现寄存器组和连续的内存单元中数据传递时,地址的变化方式有哪几种类型,并分析它们的地址变化情况。
答:
Load/Store指令在实现寄存器组和连续的内存单元中数据传递时,地址的变化方式有以下4种类型:
后增IA(IncrementAfter):
每次数据传送后地址加4; IB(IncrementBefore):
每次数据传送前地址加4;后减DA(DecrementAfter):
每次数据传送后地址减4; DB(DecrementBefore):
每次数据传送前地址减4。
8.栈操作指令地址的变化方式有哪几种类型,并分析它们的地址变化情况,从而得出栈操作指令寻址和块拷贝Load/Store指令之间的对应关系。
答:
(1)四种类型的堆栈工作方式,即:
满递增堆栈FA(EmptyAscending):
堆栈指针指向最后压入的数据,且低地址向高地址生成。
满递减堆栈FD:
堆栈指针指向最后压入的数据,且高地址向低地址生成。
空递增堆栈EA(FullAscending):
堆栈指针指向下一个将要放入数据的空位置,且低地址向高地址生成。
空递减堆栈ED(EmptyDescending):
堆栈指针指向下一个将要放入数据的空位置,且高地址向低地址生成。
(2)栈操作指令寻址和块拷贝Load/Store指令之间的对应关系见表3-10。
9.分析协处理器加载/存储指令的寻址方式中的内存地址索引格式中不同的汇编语法格式下内存地址的计算方法。
答:
具体见教材节10.写出下列指令的机器码,并分析指令操作功能。
MOVR0,R1MOV R1,#0x198ADDEQSR1,R2,#0xABCMP R2,#0XabLDRR0,[R1,#4] STRR0,[R1,R1,LSL#2]!
LDRHR0,[R1,#4]LDRSBR0,[R2,#-2]!
STRBR1,[R2,#0xA0]LDMIAR0,{R1,R2,R8}STMDBR0!
,{R1-R5,R10,R11}STMEDSP!
,{R0-R3,LR}
答:
现对以下三条指令进行编码,其余的参照本章的编码说明。
4章ARM指令集系统
1.ARM指令可分为哪几类?
说出哪几条指令是无条件执行的。
ARM指令可分为:
数据处理指令
程序状态寄存器与通用寄存器之间的传送指令Load/Store指令转移指令异常中断指令协处理器指令
无条件执行指令:
BLX,BKPT
2.如何实现两个64位数的加法操作,如何实现两个64位数的减法操作,如何求一个64位数的负数?
答:
见教材例4-4:
实现64位数据加法运算:
假设R0和R1存放了一个64位数据,R0存放数据的低32位;R2和R3中存放了另一个64位数据,R2中存放低32位数据。
运算结果送回到[R1:
R0]中。
ADDS R0,R0,R2 ;低落32位相加并影响标志位
ADC R1,R1,R3 ;高32位相加再加上C标志位
2)见教材例4-6:
SBC指令和SUBS指令联合使用可以实现两个64位的操作数相减。
如果寄存器R0和R1中放置一个64位的被减
数,其中R0中放置低32位数值;寄存器R2和R3中放置一个64位的减数,其中R2中放置低32位数值。
运算结果送回到[R1:
R0]中。
SUBSR0,R0,R2 ;低32位相减并影响标志位SBCR1,R1,R3 ;高32位相减再减去C标志位的反码 3)见教材例4-8:
如果寄存器R0和R1中放置一个64位数,其中R0中放置低32位数值;寄存器R4和R5中放置其负数,其中R4中放置低32位数值。
RSBS R4,R0,#0 ;0减去低32位并影响标志位
RSC R5,R1,#0 ;0减去高32位再减去C标志位的反码
3.写出LDRB指令与LDRSB指令二进制编码格式,并指出它们之间的区别。
答:
提示:
LDRB指令与LDRSB指令编码的符号不同,在功能上LDRB所加载的寄存器高24位清0,而LDRSB则是用符号位扩展。
4.分析下列每条语句的功能,并确定程序段所实现的操作。
CMP R0,#0MOVEQ R1,#0MOVGT R1,#1答:
分析:
当R0等于0时,MOVEQ执行,则R1等于0;当R0等于正数时,MOVGT执行,则R1等于1;此功能码段可以判别R0中的值为正数还是0。
5.请使用多种方法实现将字数据0xFFFFFFFF送入寄存器R0。
答:
例如,MVNR0,#0或者:
MOVR0,#0
SUBR0,R0,#1还可以用其它运算指令来实现,读者自行写出。
6.写一条ARM指令,分别完成下列操作:
a)R0=16
b)R0=R1/16(带符号的数字)c)R1=R2*3d)R0=-R0答:
a)RO=16MOVRO,OX10
b)RO=R1/16(带符号的数字)MOVRO,R1,ASR#4c)R1=R2*3
ADDR1,#1d)R0=-RORSBRO,RO.#0
7.编写一个ARM汇编程序,累加一个队列中的所有元素,碰上0时停止。
结果放入R4。
解答:
(参考程序)
/*-----------------------------------------------寄存器的使用说明:
R0:
队列指针R1:
加载队列中的数据R4:
队列数据的累加结果
*-----------------------------------------------*/.globalstart.textstart:
LDRR0,=DataZone@MOVR4,#0 @addNum:
LDRBR1,[R0],#1 @CMPR1,#0 @BLSstop @ADDR4,R4,R1@BaddNum @stop:
B. DataZone:
.space10,0x10@.zero5 @.end
初始化为队列的起始地址结果寄存器初始化为0
加载队列中的数据存入R1中判断R1的值是否为0
如果R1的值小于或等于0则停止累加累加求和继续循环
在存储单元中申请10个字节的连续空间并用0x10填充
在存储单元中申请5个字节的连续空间并用0填充
8.写出实现下列操作的ARM指令:
当Z=1时,将存储器地址为R1的字数据读入寄存器R0。
当Z=1时,将存储器地址为R1+R2的字数据读入寄存器R0。
将存储器地址为R1-4的字数据读入寄存器R0。
将存储器地址为R1+R6的字数据读入寄存器R0,并将新地址R1+R6写入R1。
解答
(1)MOVEQR0,R1
(2)LDREQR0,[R1,R2](3LDRR0,[R1,#-4](4)LDRR0[R1,R6]!
9.写出下列ARM指令所实现操作:
LDR R2,[R3,#-4]!
LDR R0,[R0],R2LDR R1,[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写入R3LDRR0,[R0],R2
将存储器地址为R0的字数据读入R0,并将地址R0+R2写入R0LDRR1,[R3,R2,LSL#2]!
将存储器地址为R3+R2*4的字数据读入R1,并将地址R3+R2*4写入R3LDRSBR0,[R2,#-2]!
将存储器地址为R2-2的字节数据读入R0的低8位,将R0的高24位用符号位扩展,并将地址R2-2写入R2STRBR1,[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中断的返回?
答:
见教材例4-31在进入IRQ中断处理程序时,首先计算返回地址,并保存相关的寄存器SUB R14,R14,#4 ;
STMFD R13!
{R0-R3,R12,LR};
如果IRQ中断处理程序返回到被中断的进程则执行下面的指令。
该指令从数据栈中恢复寄存器R0~R3及R12的值,将返回地址传送到PC中并将SPSR_irq值复制到CPSR中LDMFD R13!
{R0-R3,R12,PC}^
12.用ARM汇编语言编写代码,实现将ARM处理器切换到用户模式,并关闭中断。
.equUser_Mode,0x10
.equMode_Mask0x1F.equNOINT, 0xC0MRS R0,CPSR @读CPSR BIC R0,R0,#Mode_Mask
ORR R1,R0,#User_Mode|NOINT @修改MSR CPSR_cxsf,R1 @
进入用户模式
1章绪论
1.国内嵌入式系统行业对“嵌入式系统”的定义是什么?
如何理解?
答:
见教材节。
2.嵌入式系统是从何时产生的,简述其发展历程。
答:
见教材节。
3.当前最常见的源码开放的嵌入式操作系统有哪些,请举出两例,并分析其特点。
答:
见教材节的嵌入式Linux和嵌入式实时操作内核UC/OS-I。
4.举例说明嵌入式设备在工控设备中的应用。
答:
见教材节的“工业控制领域”。
5.未来嵌入式技术的发展趋势有哪些?
答:
见教材节的嵌入式技术的发展趋势。
2章ARM技术与ARM体系结构
1.简述ARM处理器内核调试结构原理。
答:
对教材节的图2-1进行描述。
2.分析ARM7TDMI-S各字母所代表的含义。
答:
参考教材.2ARM核版本命名规则说明。
3.ARM处理器的工作模式有哪几种,其中哪些为特权模式,哪些为异常模式,并指出处理器在什么情况下进入相应的模式。
ARM处理器共有7种工作模式:
用户模式:
非特权模式,也就是正常程序执行的模式,大部分任务在这种模式下执行。
在用户模式下,如果没异常发生,不允许应用程序自行改变处理器的工作模式,如果有异常发生,处理器会自动切换工作模式FIQ模式:
也称为快速中断模式,支持高速数据传输和通道处理,当一个高优(fast)中断产生时将会进入这种模式。
IRQ模式:
也称为普通中断模式,:
当一个低优先级中断产生时将会进入这种模式。
在这模式下按中断的处理器方式又分为向量中断和非向量中断两种。
通常的中断处理都在IRQ模式下进行。
SVC模式:
称之为管理模式,它是一种操作系统保护模式。
当复位或软中断指令执行时处理器将进入这种模式。
中止模式:
当存取异常时将会进入这种模式,用来处理存储器故障、实现虚拟存储或存储保护。
未定义指令异常模式:
当执行未定义指令时会进入这种模式,主要是用来处理未定义的指令陷阱,支持硬件协处理器的软件仿真,因为未定义指令多发生在对协处理器的操作上。
系统模式:
使用和User模式相同寄存器组的特权模式,用来运行特权级的操作系统任务。
在这7种工作模式中,除了用户模式以外,其他6种处理器模式可以称为特权模式,在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。
在这6种特权模式中,除了系统模式外的其他5种特权模式又称为异常模式
4.分析程序状态寄存器各位的功能描述,并说明C、Z、N、V在什么情况下进行置位和清零。
PSR的具体格式为
V—溢出标志位
对于加/减法运算指令,当操作数和运算结果为二进制补码表示的带符号数时,V=1表示符号位溢出,其他的指令通常不影响V位。
例如:
两个正数相加,运算结果为一个负数,则符号位溢出,相应V=1。
C—进位或借位标志位
对于加法指令,结果产生进位,则C=1,表示无符号数运算发生上溢出,其他情况下C=0;
在减法指令中,结果产生借位,则C=0,表示无符号数运算发生下溢出,其他情况下C=1;
对于包含移位操作的非加/减法运算指
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM嵌入式系统结构与编程 ARM 嵌入式 系统 结构 编程 习题 答案