《ARM嵌入式系统结构与编程》课后思考与练习题参考答案
第一章 绪论
思考与练习题答案:
1、 答:见教材P2的1.1节容。 2、 答:见教材P1的1.1节容。
3、 答:见教材P4的1.2.1节的嵌入式Linux和嵌入式实时操作系统核μC/OS-Ⅱ。 4、 答:见教材P6的1.3节的“工业控制领域”。
5、 答:见教材P8的1.4节的嵌入式技术的发展趋势。
第二章 ARM技术与ARM体系结构
思考与练习题答案:
1、 答:对教材P15的2.2节的图2-1进行描述。
2、 答:参考教材P12的2.1.2节ARM核版本命名规则说明。 3、 答:见教材P18的2.3节的ARM处理器共有7种工作模式。
4、 答:PSR具体的格式为:P21的图2-7,描述“标志域”和“控制域”各位的功能。C、Z、
N、V进行置位和清零见P22的容。
5、 答:ARM在异常时会进行以下操作:P24最上面的(1)(2)(3)(4)。
ARM在异常返回时:(1)从SPSR_
(2)从LR_
6、答:见教材P25的“数据存储格式”中的“小端存储格式”和“大端存储格式”。
7、答:在ARM三级流水线下:见教材P27的“三级流水线运行情况分析”的(1)带有存储
器访问指令的流水线。
8、答:ARM9在指令操作上采用的5级流水线:
(1) 取指令:从指令Cache中读取指令。 (2) 译码:对指令进行译码,识别出是对哪个寄存器进行操作,并从通用寄存器中
读取操作数。
(3) 执行:进行ALU运算和移位操作,如果是对存储器操作的指令,则在ALU中计
算出要访问的存储器地址。
.专业.专注.
(4) 存储器访问:如果是对存储器访问的指令,用来实现数据缓冲功能(通过数据
Cache);如果不是对存储器访问的指令,本级流水线为一个空的时钟周期。
(5) 寄存器回写:将指令运算或操作结果写回到目标寄存器中。
9、答:见教材P29的“5级流水线互锁分析”的容。
第三章 ARM指令集寻址方式
思考与练习题答案:
1、 答:见教材P32的3.1节中“2.指令条件码”的容。
2、 答:当指令的算术运算发生异常时,V标志位置1。例如:两个正数相加,其结果为一
负数;或者两个负数相加,其结果为一正数,都会置V标志位。
3、 答:每一个立即数是由一个8位的常数进行32位循环右移偶数位得到的,其中循环右
移的位数是由一个4位二进制数的两倍表示的,即:
0B 0101 0100 0011 0000 不合法 (2)0x108
0B 0001 0000 1000 1111 01000010 (3)0x304
0B 0011 0000 0100 1111 11000001 (4)0x501
0B 0101 0000 0001 不合法 (5)0xfb10000
0B 1111 1011 0001 0000 0000 0000 0000 不合法 (6)0x334000
0B 0011 0011 0100 0000 0000 0000 1001 11001101 (7)0x3FC000
0B 0011 1111 1100 0000 0000 0000 1001 01111111 (8)0x1FE0000
0B 0001 1111 1110 0000 0000 0000 0000 不合法 (9)0x5580000
0B 0101 0101 1000 0000 0000 0000 0000 不合法 (10)0x7F800
0B 0111 1111 1000 0000 0000 不合法 (11)0x39C000
0B 0011 1001 1100 0000 0000 0000 1001 11100111 (12)0x1FE80000
0B 0001 1111 1110 1000 0000 0000 0000 0000 不合法
4、 答:见教材P33的3.2节图3-1移位操作功能描述。
5、 答:ARM数据处理指令具体的寻址方式有5种:见教材P33的“2.具体寻址类型”容。
如果程序计数器PC作为目标寄存器,会产生程序发生跳转。
6、 答:在Load/Store指令寻址中,字、无符号字节的Load/Store指令寻址有三种,具体
.专业.专注.
见教材P36的3.3.2节容。在Load/Store指令寻址中,半字、有符号字节寻址有两种,具体见教材P40的3.3.3节容。它们之间的差别:在半字、有符号字节寻址中,没有Addressing_mode中的偏移量通过寄存器移位得到的形式。
7、 答:见教材P45的“2.存操作”容。
8、 答:见教材P46的四种类型的堆栈工作方式。栈操作指令寻址和块拷贝Load/Store指
令之间的对应关系见教材P46的表3-10。
9、 答:见教材P46的3.5节的“1.协处理器加载/存储指令的寻址方式”的容。 10、 答:(1)MOV R0,R1
Cond 00 I opcode S Rn(R0) Rd(R0) operand2(R1) 1110 00 0 1101 0 0000 0000 1 (2)MOV R1,#0x198
Cond 00 I opcode S Rn(R0) Rd(R0) operand2 1110 00 1 1101 0 0000 0000 1111 01100110 0x198:0001 1001 1000 1111 01100110 (3)ADDEQS R1,R2,#0xAB
Cond 00 I opcode S Rn(R2) Rd(R1) operand2 0000 00 1 0100 1 0010 0001 0000 10101011 (4)CMP R2,#Oxab
Cond 00 I opcode S Rn(R2) 0000 operand2 1110 00 1 1010 0 0010 0000 0000 10101011 (5)LDR R0,[R1,#4]
Cond 01 I P U 0 W L Rn Rd addressing_mode 1110 01 0 1 1 0 0 1 0001 0000 0000 00000100 (6)STR RO,[R1,R1,LSL,#2]!
Cond 01 I P U 0 W L Rn Rd addressing_mode 1110 01 1 1 1 0 1 0 0001 0000 00010 00 0 0001 (7)LDRH R0,[R1,#4]
Cond 000 P U I W L Rn Rd offset_H 1 S H 1 offset_L 1110 000 1 1 1 0 1 0001 0000 0000 1 0 1 1 0100 (8)LDRSB R0,[R2,#-2]!
Cond 000 P U I W L Rn Rd offset_H 1 S H 1 offset_L 1110 000 1 0 1 1 1 0010 0000 0000 1 1 0 1 0010 (9)STRB R1,[R2,#0xA0]
Cond 01 I P U 1 W L Rn Rd addressing_mode 1110 01 0 1 1 1 0 0 0010 0001 0000 10100000 (10)LDMIA R0,{R1,R2,R8}
Cond 100 P U 0 W L Rn register_list 1110 100 0 1 0 0 1 0000 00110 (11)STMDB R0!,{R1-R5,R10,R11}
Cond 100 P U 0 W L Rn register_list 1110 100 1 0 0 1 0 0000 11110 (12)STMED SP!,{R0-R3,LR}
Cond 100 P U 0 W L Rn register_list 1110 100 0 0 0 1 0 1101 01111
.专业.专注.