ARM嵌入式系统结构与编程习题答案Word文档下载推荐.docx
- 文档编号:17678216
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:33
- 大小:133.87KB
ARM嵌入式系统结构与编程习题答案Word文档下载推荐.docx
《ARM嵌入式系统结构与编程习题答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《ARM嵌入式系统结构与编程习题答案Word文档下载推荐.docx(33页珍藏版)》请在冰豆网上搜索。
7是系列号;
T:
支持高密度16位的指令集;
D:
支持片上调试;
M:
支持用于长乘法操作(64位结果)指令,包含快速乘法器;
;
I:
带有嵌入式追踪宏单元,用来设置断点和观察点的调试硬件;
S:
可综合版本,意味着处理器内核是以源代码形式提供的。
这种源代码形式又可以编译成一种易于工具使用的形式。
3.处理器的工作模式有哪几种,其中哪些为特权模式,哪些为异常模式,并指出处理器在什么情况下进入相应的模式。
技术的设计者将处理器在应用中可能产生的状态进行了分类,并针对同一类型的异常状态设定了一个固定的入口点,当异常产生时,程序会自动跳转到对应异常入口处进行异常服务。
⏹1.用户模式:
非特权模式,也就是正常程序执行的模式,大部分任务在这种模式下执行。
在用户模式下,如果没异常发生,不允许应用程序自行改变处理器的工作模式,如果有异常发生,处理器会自动切换工作模式
⏹2.模式:
也称为快速中断模式,支持高速数据传输和通道处理,当一个高优先级()中断产生时将会进入这种模式。
⏹3.模式:
也称为普通中断模式,:
当一个低优先级()中断产生时将会进入这种模式。
在这模式下按中断的处理器方式又分为向量中断和非向量中断两种。
通常的中断处理都在模式下进行。
⏹4.模式:
称之为管理模式,它是一种操作系统保护模式。
当复位或软中断指令执行时处理器将进入这种模式。
⏹5.中止模式:
当存取异常时将会进入这种模式,用来处理存储器故障、实现虚拟存储或存储保护。
⏹6.未定义指令异常模式:
当执行未定义指令时会进入这种模式,主要是用来处理未定义的指令陷阱,支持硬件协处理器的软件仿真,因为未定义指令多发生在对协处理器的操作上。
⏹7.系统模式:
使用和模式相同寄存器组的特权模式,用来运行特权级的操作系统任务。
⏹在这7种工作模式中,除了用户模式以外,其他6种处理器模式可以称为特权模式,在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。
⏹在这6种特权模式中,除了系统模式外的其他5种特权模式又称为异常模式,每种异常都对应有自己的异常处理入口点。
4.分析程序状态寄存器()各位的功能描述,并说明在什么情况下进行置位和清零。
⏹条件位:
⏹N=1-结果为负,0-结果为正或0
⏹Z=1-结果为0,0-结果不为0
⏹C=1-进位,0-借位
⏹V=1-结果溢出,0结果没溢出
⏹Q位:
⏹仅5架构支持
⏹指示增强型指令是否溢出
⏹中断禁止位:
⏹I=1:
禁止.
⏹F=1:
⏹T
⏹仅架构支持
⏹T=0:
处理器处于状态
⏹T=1:
⏹位(处理器模式位):
⏹0b10000
⏹0b10001
⏹0b10010
⏹0b10011
⏹0b10111
⏹0b11011
⏹0b11111
5.简述处理器异常处理和程序返回的过程。
只要正常的程序流被暂时中止,处理器就进入异常模式。
例如响应一个来自外设的中断。
在处理异常之前,7内核保存当前的处理器状态,这样当处理程序结束时可以恢复执行原来的程序。
如果同时发生两个或更多异常,那么将按照固定的顺序来处理异常。
异常或入口
返回指令
向量表偏移
处理器模式
优先级
14
6
0x00000008
未定义的指令
0x00000004
预取指中止
144
5
0x0000000C
快中断
3
0x0000001C
中断
4
0x00000018
数据中止
148
2
0x00000010
复位
无
1
0x00000000
在异常发生后,7内核会作以下工作:
1.在适当的中保存下一条指令的地址
2.将复制到适当的中;
3.将模式位强制设置为与异常类型相对应的值;
4.强制从相关的异常向量处取指。
7内核在中断异常时置位中断禁止标志,这样可以防止不受控制的异常嵌套。
注:
异常总是在状态中进行处理。
当处理器处于状态时发生了异常,在异常向量地址装入时,会自动切换到状态。
当异常结束时,异常处理程序必须:
1.将中的值减去偏移量后存入,偏移量根据异常的类型而有所不同;
2.将的值复制回;
3.清零在入口置位的中断禁止标志。
恢复的动作会将T、F和I位自动恢复为异常发生前的值。
6.处理器字数据的存储格式有哪两种?
并指出这两种格式的区别。
7处理器可以将存储器中的字以下列格式存储
▪大端格式()
▪小端格式()
▪小端存储器系统:
在小端格式中,高位数字存放在高位字节中。
因此存储器系统字节0连接到数据线7~0。
▪大端存储器系统:
在大端格式中,高位数字存放在低位字节中。
因此存储器系统字节0连接到数据线31~24。
7.分析带有存储器访问指令()的流水线运行情况,并用图示说明流水线的运行机制。
存储器访问指令流水线举例
取指的存储器访问和执行的数据路径占用都是不可同时共享的资源,对于多周期指令来说,如果指令复杂以至于不能在单个时钟周期内完成执行阶段,就会产生流水线阻塞。
对存储器的访问指令是非单周期指令
指令的执行,访问存储器,回写寄存器(占用了3个周期)。
造成了指令的执行被阻断。
8.简述9的5级流水线每一级所完成的功能和实现的操作。
920在指令操作上采用5级流水线.
取指:
从指令中读取指令。
译码:
对指令进行译码,识别出是对哪个寄存器进行操作并从通用寄存器中读取操作数。
执行:
进行运算和移位操作,如果是对存储器操作的指令,则在中计算出要访问的存储器地址。
存储器访问:
如果是对存储器访问的指令,用来实现数据缓冲功能(通过数据)。
寄存器回写:
将指令运算或操作结果写回到目标寄存器中。
9.什么叫流水线互锁?
应如何来解决,举例说明。
互锁:
当前指令的执行需要前面指令的执行结果,但前面的指令没有执行完毕,引起流水线的等待。
互锁发生时,硬件会停止指令的执行,直到数据准备好。
上边程序中指令执行时需要使用指令加载后的R4寄存器,因此造成了指令的等待。
编译器以及汇编程序员可以通过重新设计代码的顺序或者其他办法来减少互锁的数量。
第3章指令集寻址方式
1.在指令编码中,条件码占几位,最多有多少个条件,各个条件是如何形成的?
条件码占4位,最多有15个条件
操作码
条件助记符
标志
含义
0000
相等
0001
不相等
0010
无符号数大于或等于
0011
无符号数小于
0100
负数
0101
正数或零
0110
溢出
0111
没有溢出
1000
10
无符号数大于
1001
01
无符号数小于或等于
1010
有符号数大于或等于
1011
有符号数小于
1100
有符号数大于
1101
有符号数小于或等于
1110
任何
无条件执行(指令默认条件)
1111
从不执行(不要使用)
2.指令条件码中,V标志位在什么情况下才能等于1?
V—溢出标志位
对于加减法运算指令,当操作数和运算结果为二进制补码表示的带符号数时,1表示符号位溢出,其他指令通常不影响V位。
3.在指令中,什么是合法的立即数?
判断下面各立即数是否合法,如果合法则写出在指令中的编码格式(也就是8位常数和4位移位数)
0x54300x1080x3040x501
0100000x3340000x30000x10000
0x55800000x7F8000x39C0000x180000
立即数必须由1个8位的常数通过进行32位循环右移偶数位得到,其中循环右移的位数由一个4位二进制的两倍表示。
即一个8位的常数通过循环右移2*4位(即0,2,4,。
。
30)得到
0X5430
0000,0000,0000,0000,0101,0100,0011,0000非法立即数
0X108
0000,0000,0000,0000,0000,0001,0000,10000x42循环右移30位(4=0)
0X304
0000,0000,0000,0000,0000,0011,0000,010001循环右移30位(4=0)
0x501
0000,0000,0000,0000,0000,0101,0000,0001非法立即数
010000
0000,1111,1011,0001,0000,0000,0000,0000非法立即数
0x334000
0000,0000,0011,0011,0100,0000,0000,00000循环右移18位(4=0x9)
0x3000
0000,0000,0011,1111,1100,0000,0000,00000循环右移18位(4=0x9)
0x10000
0000,0001,1111,1110,0000,0000,0000,0000非法立即数
0x5580000
0000,0101,0101,1000,0000,0000,0000,0000非法立即数
0x7F800
0000,0000,0000,0111,1111,1000,0000,0000非法立即数
0x39C000
0000,0000,0011,1001,1100,0000,0000,000007循环右移18位(4=0x9)
0x180000
0001,1111,1110,1000,0000,0000,0000,0000非法立即数
4.分析逻辑右移,算术右移,循环右移,带扩展的循环右移它们间的差别。
逻辑左移:
逻辑右移:
算术右移:
循环右移:
带扩展的循环右移:
5数据处理指令具体的寻址方式有哪些,如果程序计数器作为目标寄存器,会产生什么结果?
数据处理指令寻址方式具体可分为5种类型:
1)第二操作数为立即数2)第二操作数为寄存器3)第二操作数为寄存器移位方式且移位的位数为一个5位立即数4)第二操作数为寄存器移位方式且移位数值放在寄存器中5)第二操作数位寄存器进行移位得到。
如果(R15)用作目标寄存器,指令会产生不可预知的结果。
6.在指令寻址中,字,无符号字节的指令寻址和半字,有符号字节寻址,试分析它们之间的差别。
在指令寻址中,
字,无符号字节的指令寻址中共有以下3种内存地址构成格式:
1)中的偏移量为立即数2)中的偏移量为寄存器的值
3)中的偏移量通过寄存器移位得到
半字,有符号字节的指令寻址中共有以下2种内存地址构成格式:
7.块拷贝指令在实现寄存器组合连续的内存单元中数据传递时,地址的变化方式有哪几种类型,并分析它们的地址变化情况。
批量指令在实现寄存器组合连续的内存单元中数据传递时,地址的变化方式有以下4种类型:
⏹后增():
每次数据传送后地址加4;
⏹先增():
每次数据传送前地址加4;
⏹后减():
每次数据传送后地址减4;
⏹先减():
每次数据传送前地址减4;
8.栈操作指令地址的变化方式有哪几种类型,并分析它们的地址变化情况,从而得出栈操作指令寻址和块拷贝指令之间的对应关系。
根据堆栈指针的指向位置不同和堆栈的生长方向不同,共有4种类型的堆栈工作方式:
满递增堆栈:
堆栈指针指向最后压入的数据,且由低地址向高地址生成。
满递减堆栈:
堆栈指针指向最后压入的数据,且由高地址向低地址生成。
空递增堆栈:
堆栈指针指向下一个要放入数据的空位置,且由低地址向高地址生成。
空递减堆栈:
堆栈指针指向下一个要放入数据的空位置,且由高地址向低地址生成。
9.分析协处理器加载/存储指令的寻址方式种的内存地址索引格式中不同的汇编语法格式下内存地址的计算方法。
协处理器加载/存储指令的寻址方式种的内存地址索引格式中,索引格式类似于指令寻址中的立即数作为地址偏移量的形式。
中的偏移量为8位立即数的汇编语法格式有以下3种:
•前变址不回写形式:
[<
>
,<
8>
*4]
第一个内存地址编号为基地址寄存器值加上/减去8的4倍,后续的每一个地址是前一个内存地址加4,直到协处理器发出信号,结束本次数据传输为止。
•前变址回写形式:
[<
*4]!
当指令执行时,生成的地址值将写入基址寄存器。
•后变址回写形式:
],<
*4
内存地址为基址寄存器的值,当存储器操作完成后,将基地址寄存器值加上/减去8的4倍,后续的每一个地址是前一个内存地址加4,直到协处理器发出信号,结束本次数据传输为止。
最后将值加上/减去8的4倍写回到基址寄存器(更新基地址寄存器)。
10.写出下列指令的机器码,并分析指令操作功能。
R0,R1
R1,,0X198
R1,R2,,0
R20
R0,[R14]
R0,[R11#2]!
R0,[R22]!
R1,[R200]
R0,{R128}
R0!
{R151011}
!
{R03}
机器码部分略。
R0,R1;
R0《1
R1,,0X198;
R0《0X198
R1,R2,,0;
当1时,R1《2+0并影响标志位
R20;
R2-0,并影响标志位
R0,[R14];
R0《【R1+4】
;
【R11*4】《0,R111*4
R0《【R1+4】半字,R0的高16位清零
R0《【R2-2】字节,R0有符号扩展为32位,R22-2
R1,[R200];
【R2+00】《1低8位,
R0,{R128}
将内存单元【R0】~【11】以字为单位读取到R1,R2,R8中
将寄存器R15,R10,R11的值以字为单位依次写入【R0】中,每写一个字之前R00-4
将寄存器R03,的的值以字为单位依次写入【】中,每写一个字之后4
第4章指令集系统
1指令可分为哪几类?
说出哪几条指令是无条件执行的。
微处理器的指令集可以分为:
数据处理指令,分支指令,加载/存储指令,批量加载/存储指令,交换指令,程序状态寄存器()处理指令,协处理器操作指令和异常产生指令八大类。
几乎所有的指令都是可以有条件执行的。
带链接和状态切换的跳转指令,当目标地址由程序标号给出时,即:
<
由于指令码中是没有条件编码位的,所以指令是无条件执行的。
2.如何实现两个64位数的加法操作,如何实现两个64位数的减法操作,如何求一个64位数的负数?
1)使用实现64位加法,结果存于R1、R0中:
R0020等于低32位相加,并影响标志位
R1131等于高32位相加,并加上低位进位
2)使用实现64位减法,结果存于R1、R0中:
R002;
低32位相减,并影响标志位
R113;
高32位相减,并减去低位借位
3)使用指令实现求64位数值的负数:
R200
R310
3.写出指令与指令的二进制编码格式,并指出它们之间的区别。
指令的二进制编码格式:
指令用于将内存中的一个8位字节数据读取到指令中的目标寄存器的低8位中,寄存器的高24位用零扩展。
指令用于将内存中的一个8位字节数据读取到指令中的目标寄存器的低8位中,寄存器的高24位用符号位扩展。
4.分析下列每条语句的功能,并确定程序段所实现的操作。
R0,,0
R1,,0
R1,,1
R0,,0;
比较R0与0的大小
R1,,0;
若R00,则R1=0
R1,,1;
若R0>
0,则R1=1
5.请使用多种方法实现将字数据0送入寄存器R0
1)R0,#0
2)R0,#1
R0,R0,#0
6.写一条指令,分别完成下列操作:
(1)R0=16
(2)R01/16
(3)R12*3
(4)R00
(1)R0=16R0,#16
(2)R01/16R0,R1,#4
(3)R12*3R3,#3R1,R2,R3
(4)R00R0,R0,#0
7.编写一个汇编程序,累加一个队列中的所有元素,碰到0时停止。
结果放入R4。
假设队列为地址从R0开始递增的字队列:
R1,[R04]!
R2,R1
R442
B
8.写出实现下列操作的指令:
当1时,将存储器地址为R1的字数据读入寄存器R0.
当1时,将存储器地址为R12的字数据读入寄存器R0
将存储器地址为R1-4的字数据读入寄存器R0。
将存储器地址为R16的字数据读入寄存器R0,并将新地址R16写入R1。
1)R0,[R1]
2)R0,[R12]
3)R0,[R14]
4)R0,[R16]!
9.写出下列指令所实现的操作:
R2,[R3,4]!
R0,[R0]2
R1,[R3,R2,#2]!
R0,[R2,2]!
R1,[R2,,00]
2<
-[R3-4],R33-4
R0,[R0]20<
-[R0],R002
1<
-[R32*4],R332*4
0低8位<
-[R2-2]字节数据,,R0高24位符号扩展,R22-2
R1,[R2,#00]
R1低8位->
【R2+00】
从地址R0开始的内存中依次读取字数据,送入寄存器R1,R2,R8
将寄存器R11,R10,R51的字数据,依次写入地址R0中,每次写入前R00-4
10指令的优势是什么?
指令支持原子操作,它能在一条指令中完成存储器和寄存器之间的数据交换。
11.如何用带操作的批量字数据加载指令实现中断的返回?
在进入中断处理程序时,首先计算返回地址,并保存相关的寄存器
•R14144;
•R13!
{R03,R12,}
如果中断处理程序返回到被中断的进程则执行下面的指令。
该指令从数据栈中恢复寄存器R03及R12的值,将返回地址传送到中,并将值复制到中
•R13!
{R03,R12,}^
12.用汇编语言编写代码,实现将处理器切换到用户模式,并关闭中断。
禁能中断
R0
R0,R00x80
R0
切换到用户模式
R0,#0x0F
第5章指令
1.与32位的指令集相比较,16位的指令集具有哪些优势?
在体系结构中,指令集是32位的,具有很高的执行效率。
但是对于嵌入式而言,其存储空间极其有限,由于每条指令都要占用4个字节,对存储空间的要求较高。
为了压缩代码的存储,增加代码存储密度,公司设计了16位的指令。
代码所需的存储空间约为代码的6070%。
2指令可分为哪几类?
指令有条件执行指令吗,如果有请说明哪些指令是条件执行的。
指令可分为数据处理指令,存储器操作指令,分支指令,软中断指令。
指令集只有一条分支指令是有条件的,其余所有指令都是无条件的;
B{}
3.分析下面的指令程序代码,指出程序所完成的功能。
20
:
0x400
R01
R0
R2031
R02
R302
B
上述代
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 嵌入式 系统 结构 编程 习题 答案