《ARM嵌入式系统结构与编程》习题答案 邱铁编著.docx

上传人:b****6 文档编号:4728258 上传时间:2022-12-08 格式:DOCX 页数:15 大小:23.53KB
下载 相关 举报
《ARM嵌入式系统结构与编程》习题答案 邱铁编著.docx_第1页
第1页 / 共15页
《ARM嵌入式系统结构与编程》习题答案 邱铁编著.docx_第2页
第2页 / 共15页
《ARM嵌入式系统结构与编程》习题答案 邱铁编著.docx_第3页
第3页 / 共15页
《ARM嵌入式系统结构与编程》习题答案 邱铁编著.docx_第4页
第4页 / 共15页
《ARM嵌入式系统结构与编程》习题答案 邱铁编著.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

《ARM嵌入式系统结构与编程》习题答案 邱铁编著.docx

《《ARM嵌入式系统结构与编程》习题答案 邱铁编著.docx》由会员分享,可在线阅读,更多相关《《ARM嵌入式系统结构与编程》习题答案 邱铁编著.docx(15页珍藏版)》请在冰豆网上搜索。

《ARM嵌入式系统结构与编程》习题答案 邱铁编著.docx

《ARM嵌入式系统结构与编程》习题答案邱铁编著

《ARM嵌入式系统结构与编程》邱铁编著.清华大学出版社.

年月第版年月第二次印刷20093120108《ARM嵌入式系统结构与编程》第1~4章思考与练习

题答案此答案仅供教师教学用第1章绪论思考与练习题答案1.国内嵌入式系统行业对“嵌入式系统”的定义是什么如何理解

答见教材1.1节。

2.嵌入式系统是从何时产生的简述其发展历程。

答见教材1.1节。

3.当前最常见的源码开放的嵌入式操作系统有哪些请举出两例并分析其特点。

答见教材1.2.1节的嵌入式Linux和嵌入式实时操作内核μC/OS-II。

4.举例说明嵌入式设备在工控设备中的应用。

答见教材1.3节的“工业控制领域”。

5.未来嵌入式技术的发展趋势有哪些答见教材1.4节的嵌入式技术的发展趋势。

第2章ARM技术与ARM体系结构思考与练习题答案1简述ARM处理器内核调试结构原理。

答对教材1.2节的图2-1进行描述。

2分析ARM7TDMI-S各字母所代表的含义。

答参考教材212ARM核版本命名规则说明。

课后答案网《ARM嵌入式系统结构与编程》邱铁编著.清华大学出版社.

年月第版年月第二次印刷20093120108

3ARM处理器的工作模式有哪几种其中哪些为特权模式哪些为异常模式

并指出处理器在什么情况下进入相应的模式。

答ARM处理器共有7种工作模式

用户模式非特权模式也就是正常程序执行的模式大部分任务在这种模式

下执行。

在用户模式下如果没异常发生不允许应用程序自行改变处理器的工作

模式如果有异常发生处理器会自动切换工作模式

FIQ模式也称为快速中断模式支持高速数据传输和通道处理当一个高优

先级(fast)中断产生时将会进入这种模式。

IRQ模式也称为普通中断模式:

当一个低优先级中断产生时将会进入这种模

式。

在这模式下按中断的处理器方式又分为向量中断和非向量中断两种。

通常的中

断处理都在IRQ模式下进行。

SVC模式称之为管理模式它是一种操作系统保护模式。

当复位或软中断指

令执行时处理器将进入这种模式。

中止模式当存取异常时将会进入这种模式用来处理存储器故障、实现虚拟

存储或存储保护。

未定义指令异常模式当执行未定义指令时会进入这种模式主要是用来处理

未定义的指令陷阱支持硬件协处理器的软件仿真因为未定义指令多发生在对协

处理器的操作上。

系统模式使用和User模式相同寄存器组的特权模式用来运行特权级的操作

系统任务。

在这7种工作模式中除了用户模式以外其他6种处理器模式可以称为特权

模式在这些模式下程序可以访问所有的系统资源也可以任意地进行处理

器模式的切换。

在这6种特权模式中除了系统模式外的其他5种特权模式又

称为异常模式

4分析程序状态寄存器PSR各位的功能描述并说明C、Z、N、V在什

么情况下进行置位和清零。

答PSR的具体格式为

V—溢出标志位

对于加/减法运算指令当操作数和运算结果为二进制补码表示的带符号数时

V1表示符号位溢出其他的指令通常不影响V位。

课后答案网《ARM嵌入式系统结构与编程》邱铁编著.清华大学出版社.

年月第版年月第二次印刷20093120108

例如两个正数最高位为0相加运算结果为一个负数最高位为1则

符号位溢出相应V=1。

C—进位或借位标志位

对于加法指令包括比较指令CMN结果产生进位则C1表示无符号

数运算发生上溢出其他情况下C0

在减法指令中包括比较指令CMP结果产生借位则C0表示无符号数

运算发生下溢出其他情况下C1

对于包含移位操作的非加/减法运算指令C中包含最后一次溢出位的数值

对于其他非加/减法运算指令C位的值通常不受影响。

Z—结果为0标志位

Z1表示运算结果是0Z0表示运算结果不是零

对于CMP指令Z1表示进行比较的两个数大小相等。

N—T符号标志位

本位设置成当前指令运算结果的bit[31]的值。

当两个补码表示有符号整数运算

时N1表示运算的结果为负数N0表示结果为正数或零。

5简述ARM处理器异常处理和程序返回的过程。

答ARM在异常产生时会进行以下操作

1将引起异常指令的下一条指令地址保存到新的异常模式的LR中使异

常处理程序执行完后能根据LR中的值正确返回

2将CPSR的内容复制到新的异常模式下的SPSR中

3根据异常类型将CPSR模式控制位强制设定为发生异常所对应的模式

4强制PC指向相应的异常向量地址。

ARM在异常返回时

1从SPSR_恢复CPSR

2从LR_恢复PC。

6ARM处理器字数据的存储格式有哪两种并指出这两种格式的区别。

1小端存储格式Little-Endian

在小端存储格式中对于地址为A的字单元其中字节单元由低位到高位字节地

址顺序为A,A+1,A+2A+3对于地址为A的半字单元其中字节单元由低位到高

位字节地址顺序为A,A+1

2大端存储格式Big-Endian

在大端存储格式中对于地址为A的字单元其中字节单元由高位到低位字节地课后答案网《ARM嵌入式系统结构与编程》邱铁编著.清华大学出版社.

年月第版年月第二次印刷20093120108

址顺序为A,A+1,A+2A+3对于地址为A的半字单元其中字节单元由高位到低

位字节地址顺序为A,A+1。

7分析带有存储器访问指令LDR的流水线运行情况并用图示说明其流

水线的运行机制。

答在ARM三级流水线下

对存储器的访问指令LDR就是非单周期指令。

这类指令在“执行”阶段后还

要进行“存储器访问”和“寄存器回写”操作每一步占用1个时钟周期。

在指令

执行时空图中处于时钟周期T5时LDR指令要进行数据的存储器操作访存

在时钟周期T6要进行寄存器的回写操作这两步还要占用执行单元因此其下1

条指令的“执行”就被阻断了其下数第2条指令的译码被阻断要等待LDR指令

操作完毕后流水线的正常运行才能被恢复。

在图中处理器用6个时钟周期执行了4条指令指令平均周期数(CPI)=1.5时

钟周期。

8简述ARM9的5级流水线每一级所完成的功能和实现的操作。

答在ARM9在指令操作上采用5级流水线。

课后答案网《ARM嵌入式系统结构与编程》邱铁编著.清华大学出版社.

年月第版年月第二次印刷20093120108

1取指从指令Cache中读取指令。

2译码对指令进行译码识别出是对哪个寄存器进行操作并从通用寄存

器中读取操作数。

3执行进行ALU运算和移位操作如果是对存储器操作的指令则在

ALU中计算出要访问的存储器地址。

4存储器访问如果是对存储器访问的指令用来实现数据缓冲功能通

过数据Cache如果不是对存储器访问的指令本级流水线为一个空

的时钟周期。

寄存器回写将指令运算或操作结果写回到目标寄存器中。

9什么叫做流水线互锁应如何来解决举例说明。

在流水线运行过程中可能会出现这种情况当前指令的执行可能需要前面指令

的执行结果但这时前面的指令没有执行完毕从而会导致当前指令的执行无法获

得合法的操作数这时就会引起流水线的等待这种现象在流水线机制里称为互锁。

举例参见教材第29页

当互锁发生时硬件会停止这个指令的执行直到数据准备好为止。

如图所示

LDR指令进行完执行阶段还需要两个时钟周期来完成存储器访问和寄存器写操作

但这时指令MOV中用到的R9正是LDR中需要进行寄存器加载操作后的寄存器

因此MOV要进行等待直到LDR指令的寄存器写操作完成。

第3章ARM指令集寻址方式思考与练习题答案1在指令编码中条件码占有几位最多有多少个条件各个条件是如何形成的

答见教材3.1节的描述。

课后答案网《ARM嵌入式系统结构与编程》邱铁编著.清华大学出版社.

年月第版年月第二次印刷20093120108

2指令条件码中V标志位在什么情况下才能等于1

答当指令的算术运算发生异常时V标志位置1。

例如两个正数相加其

结果为一负数或者是两个负数相加其结果为一正数都会置V标志位。

3在ARM指令中什么是合法的立即数判断下面各立即数是否合法如果合

法则写出在指令中的编码格式也就是8位常数和4位的移位数。

0x54300x1080x3040x501

0xFB100000x3340000x3FC0000x1FE0000

0x55800000x7F8000x39C0000x1FE80000

答每个立即数由一个8位的常数进

行32位循环右移偶数位得到其中循环右

移的位数由一个4位二进制的两倍表示。

=immed_8进行32位循环右移2*rotate_4位

符合这一条件的都为合法的立即数。

1)0x5430

0B0101010000110000不合法

2)0x108

0B000100001000111101000010(30/2)

3)0x304

0B001

100000100111111000001(30/2)

4)0x501

0B010100000001不合法

5)0xFB10000

0B111110110001000000000000不合法

6)0x334000

0B001100110100000000000000100111001101(18/2)

7)0x3FC000

0B00111111000000000000101000111111(18/2)

8)0x1FE0000

0B000111111110(0000)[4]不合法

9)0x5580000

0B010101011000(0000)[4]不合法

10)0x7F80000

0B011110000001(0000)[4]不合法

11)0x39C000

0B001110011100000000000000100111100111(18/2)

12)0x1FE80000

0B000111111110(0000)[4]不合法

4分析逻辑右移、算术右移、循环右移、带扩展的循环右移它们间的差别。

答见教材3.2节的图3-1移位操作功能描述。

5

ARM数据处理指令具体的寻址方式有哪些如果程序计数器PC作为目标寄存课后答案网《ARM嵌入式系统结构与编程》邱铁编著.清华大学出版社.

年月第版年月第二次印刷20093120108

器会产生什么结果

答ARM数据处理指令具体的寻址方式有5种见教材3.2节的具体说明。

如果程序计数器PC作为目标寄存器会产生程序发生跳转。

6在Load/Store指令寻址中字、无符号字节的Load/Store指令寻址和半字、有

符号字节寻址试分析它们之间的差别。

答在Load/Store指令寻址中字、无符号字节的Load/Store指令寻址有三种具

体见教材3.3.2节

在Load/Store指令寻址中半字、有符号字节寻址有两种具体见教材3.3.3节

它们之间的差别在半字、有符号字节寻址中没有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)堆栈指针指向最后压入的数据且由低地址

向高地址生成。

满递减堆栈FDFullDescending堆栈指针指向最后压入的数据且由高地址

向低地址生成。

空递增堆栈EA(FullAscending)堆栈指针指向下一个将要放入数据的空位置

且由低地址向高地址生成。

空递减堆栈ED(EmptyDescending)堆栈指针指向下一个将要放入数据的空位

置且由高地址向低地址生成。

(2)栈操作指令寻址和块拷贝Load/Store指令之间的对应关系见表3-10。

9分析协处理器加载/存储指令的寻址方式中的内存地址索引格式中不同的汇编语

法格式下内存地址的计算方法。

答具体见教材3.3.2节

10写出下列指令的机器码并分析指令操作功能。

MOVR0R1

MOVR1#0x198

ADDEQSR1R2#0xAB课后答案网《ARM嵌入式系统结构与编程》邱铁编著.清华大学出版社.

年月第版年月第二次印刷20093120108

CMPR2#0Xab

LDRR0[R1#4]

STRR0[R1R1LSL#2]

LDRHR0[R1#4]

LDRSBR0[R2#-2]

STRBR1[R2#0xA0]

LDMIAR0{R1R2R8}

STMDBR0{R1-R5R10R11}

STMEDSP{R0-R3LR}

答现对以下三条指令进行编码其余的参照本章的编码说明。

第4章ARM指令集系统思考与练习题答案1.ARM指令可分为哪几类说出哪几条指令是无条件执行的。

答ARM指令可分为

数据处理指令

程序状态寄存器与通用寄存器之间的传送指令

Load/Store指令

转移指令

异常中断指令

协处理器指令

无条件执行指令BLXBKPT

2.如何实现两个64位数

的加法操作如何实现两个64位数的减法操作如何求

一个64位数的负数

答1见教材例4-4

实现64位数据加法运算假设R0和R1存放了一个64位数据作为被加数课后答案网《ARM嵌入式系统结构与编程》邱铁编著.清华大学出版社.

年月第版年月第二次印刷20093120108

R0存放数据的低32位R2和R3中存放了另一个64位数据作为加数R2中存

放低32位数据。

运算结果送回到[R1R0]中R0中存放低32位。

ADDSR0,R0,R2低落32位相加并影响标志位

ADCR1,R1,R3高32位相加再加上C标志位进位值

2见教材例4-6

SBC指令和SUBS指令联合使用可以实现两个64位的操作数相减。

如果寄存器

R0和R1中放置一个64位的被减数其中R0中放置低32位数值寄存器R2和

R3中放置一个64位的减数其中R2中放置低32位数值。

运算结果送回到[R1

R0]中R0中存放低32位。

SUBSR0R0R2;低32位相减并影响标志位

SBCR1R1R3;高32位相减再减去C标志位的反码

3见教材例4-8

如果寄存器R0和R1中放置一个64位数其中R0中放置低32位数值寄存

器R4和R5中放置其负数其中R4中放置低32位数值。

RSBSR4R0#0;0减去低32位并影响标志位

RSCR5R1#0;0减去高32位再减去C标志位的反码

3.写出LDRB指令与LDRSB指令二进制编码格式并指出它们之间的区别。

答提示LDRB指令与LDRSB指令编码的符号不同在功能上LDRB所加载的

寄存器高24位清0而LDRSB则是用符号位扩展。

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

SUBR0R0#1

还可以用其它运算指令来实现读者自行写出。

6.写一条ARM指令分别完成下列操作

a)R0=16

b)R0=R1/16(带符号的数字)

c)R1=R2*3课后答案网《ARM嵌入式系统结构与编程》邱铁编著.清华大学出版社.

年月第版年月第二次印刷20093120108

d)R0=-R0

a)R0=16

MOVR0,0x10

b)R0=R1/16(带符号的数字)

MOVR0,R1,ASR#4

c)R1=R2*3

ADDR1,R2,R2,LSL#1

d)R0=-R0

RSBR0,R0,#0

7.编写一个ARM汇编程序累加一个队列中的所有元素碰上0时停止。

结果

放入R4。

解答(参考程序)

/*-----------------------------------------------

寄存器的使用说明:

*R0:

队列指针

*R1:

加载队列中的数据

*R4:

队列数据的累加结果

*-----------------------------------------------*/

.globalstart

.text

start:

LDRR0,=DataZone@初始化为队列的起始地址

MOVR4,#0@结果寄存器初始化为0

addNum:

LDRBR1,[R0],#1@加载队列中的数据存入R1中

CMPR1,#0@判断R1的值是否为0

BLSstop@如果R1的值小于或等于0则停止累加

ADDR4,R4,R1@累加求和

BaddNum@继续循环

stop:

B.

DataZone:

.space10,0x10@在存储单元中申请10个字节的连续空间并用0x10填充

.zero5@在存储单元中申请5个字节的连续空间并用0填

.end

8.写出实现下列操作的AR

M指令

当Z=1时将存储器地址为R1的字数据读入寄存器R0。

当Z=1时将存储器地址为R1+R2的字数据读入寄存器R0。

将存储器地址为R1-4的字数据读入寄存器R0。

将存储器地址为R1+R6的字数据读入寄存器R0并将新地址R1R6写入R1。

课后答案网《ARM嵌入式系统结构与编程》邱铁编著.清华大学出版社.

年月第版年月第二次印刷20093120108

解答

(1)MOVEQR0,R1

(2)LDREQR0,[R1,R2]

(3)LDRR0,[R1,#-4]

(4)LDRR0[R1,R6]!

9.写出下列ARM指令所实现操作

LDRR2[R3-4]

LDRR0[R0]R2

LDRR1[R3R2LSL2]

LDRSBR0[R2#-2]

STRBR1[R2#0xA0]

LDMIAR0{R1R2R8}

STMDBR0{R1-R5R10R11}

解答

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所指向的地址单元以字为单位递减方式读取到R1R2R8中

低地址编号的字数据内存单元对应低编号寄存器

STMDBR0!

{R1-R5,R10,R11}

将R1-R5,R10,R11存储到以R0为起始地址的递减内存中最终R0指向存放R11

的地址单元

10.SWP指令的优势是什么?

ARM指令支持原子操作主要是用来对信号量的操作因为信号量操作的要求

是作原子操作即在一条指令中完成信号量的读取和修改操作。

SWP数据交换指令

就能完成此功能能在一条指令中实现存储器和寄存器之间交换数据。

11.如何用带PSR操作的批量字数据加载指令实现IRQ中断的返回

答见教材例4-31课后答案网www.k

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1