嵌入式第三章课后习题

  • 格式:doc
  • 大小:41.76 KB
  • 文档页数:5

第三章
1、ARM7TDMI支持哪几种指令集,各有什么特点?
答:支持ARM指令集和Thumb指令集,各自特点是ARM指令集的指令是32位,执行效率高、功能全,每条指令可以根据条件执行,但是代码密度低。

Thumb指令集指令是16位,在功能上是ARM指令集的子集,功能并没有降低。

2、ARM指令的寻址方式有几种?并指出下列指令中的寻址方式。

答:ARM指令的寻址方式有8种,分别为立即寻址、寄存器寻址、寄存器移位寻址、寄存器间接寻址、基址变址寻址、相对寻址、多寄存器寻址、堆栈寻址。

⑴ SUB R0, R1, R2 寄存器寻址⑵LDR R0, [R2] 寄存器间接寻址
⑶ MVN R0, #0x0F2 立即寻址⑷ LDMIA R0, {R1-R5} 多寄存器寻址
⑸ STR R2, [R4, #0x02]!基址变址寻址⑹LDR R1, [R2, R3] 基址变址寻址
⑺ MOV R1, R1, ROR #2 寄存器移位寻址
⑻ LDR R1, [R3], #0x04 基址变址寻址
3、简述ARM指令集中第2个操作数(operand2)的三种形式。

答:⑴常数表达方式。

该常数必须对应8位位图,即常数是由一个8位的常数循环右移偶数位得到。

例如:MOV R2,#100;
⑵ 寄存器方式。

Operand2是Rm寄存器方式,在寄存器方式下操作数
即位寄存器中的数值。

例如:SUB R0,R1,R2;
⑶ 寄存器移位方式。

Rm,shift 表示将寄存器的移位结果作为操作数,
但Rm值保持不变。

例如:MOV R0,R1,RRX;将R1带扩展的循环右移1位,存入R0中。

4、指出下列指令是否正确,若不正确请说明原因。

⑴ MOVS R1, 101 不正确,立即寻址方式应该是#101
⑵ MVN R1, #0x10F 正确
⑶ STMDA R11, {R2-R8}! 不正确,不能同时存储在R2和R8中
⑷ ADD R0!, R2, #4 正确
⑸ LDR R4, [R5]! 不正确,LDR是存储到单个寄存器的加载指令,而这个是两个存储器都进行存储,应该为LDR R4, [R5]
⑹ MRS PC, CPSR 不正确MRS是将CPSR传送到通用寄存器中,但这里的通用寄存器不包括R15,即PC
⑺ LDMFDS R0!, { R5-R8, R2} 正确
⑻ ADD R3, [R3], R7 不正确,ADD指令不能访问存储器
(9) LDR R11, [R15,R8] ! 正确
(10) BXS R0 正确
5、何谓ARM指令的条件码?默认的条件码是什么?举例说明ARM指令的
条件码对指令执行的影响。

答:所谓的ARM指令的“条件执行”是指在指令码中含有本条指令的执行条件,当CPSR中的条件码标志满足时,处理器执行本条指令,否则本条指令不执行。

默认是无条件执行。

比如执行指令“ANDEQ R2,R1,R3”时,如果CPSR中的Z=1时,执行R2=R1&R3,否则不执行该指令。

6、解释“满堆栈”、“空堆栈”、“递增堆栈”和“递减堆栈”? ARM指令系统中是
如何支持的?
答:满堆栈:堆栈指针SP指向最后压入的堆栈有效数据项。

空堆栈:堆栈指针SP指向下一个待压入数据的空位置。

递增堆栈:向高地址方向生长。

递减堆栈:向低地址方向生长。

⑴满递增:堆栈向上增长,SP指向内含有效数据项的最高栈单元。

指令如
LDMFA 、STMFA 等;
⑵空递增:堆栈向上增长,SP 指向堆栈上的第一个空位置。

指令如LDMEA 、STMEA 等;
⑶满递减:堆栈向下增长,SP 指向内含有效数据项的最低栈单元。

指令如LDMFD 、STMFD 等;
⑷空递减:堆栈向下增长,SP 指向堆栈下的第一个空位置。

指令如LDMED 、STMED 等。

7、 试说明MOV 指令、LDR 加载指令和LDR 伪指令三者的区别。

答:MOV 指令是在寄存器间进行数据传送,影响标志位。

LDR 指令是将存储器中的数据按给定地址加载到寄存器中,不影响标志位。

LDR 伪指令是可以在一个立即数前面加等号,把一个地址写入某寄存器。

8、 解释B 指令、BL 指令与BX 指令的功能差别,并举例说明其使用方法。

答:B 指令是分支指令,BL 指令是带链接的分支指令,BX 是带状态切换的分支指令。

对于B 指令“B WAITA ”指跳转至标号WAITA 处开始执行,B 指令的跳转范围为±32M ,对于BL 指令,实现程序跳转,并保持PC 到链寄存器LR 中,跳转范围±32M ,举例“BL DELAY ”完成的跳转至标号DELAY 处执行,并把PC-4存入LR 。

BX 指令,带状态切换的跳转,比如“BX R0”表示跳转R0指定的地址开始执行,并查看R0[0]位的值,如果是1,对CPSR 的T 位置位,解释目标程序为Thumb 指令,如果是0,对CPSR 的T 位清零,解释目标程序为ARM 指令。

9、 分析下列两段程序片断的功能,试用类C 语言写出其等价功能。

答:
程序片断1:
CMP R 0, R1
ADDHI R0 , R0 , #1 ADDLS R1 , R1 , #1
程序片断2:
CMP R0 , #10 CMPNE R1 , #20 ADDNER0 , R0 , R1
10、使用ARM 汇编指令的条件执行功能,试用汇编语言实现下列两条C 代码语句。

10、 下列代码段是实现开IRQ 中断和关IRQ 中断功能,试补齐空白处内容。

11、 如果ARM 处理器中各寄存器及存储单元参数如下图所示,试写出执行下列指令后,各寄存器及存储单元中内容变化情况。

⑴ STMIA R13!,{R0-R3}
⑵LDMDB R13,
{ R0-R3}
答:
(1), [R13]←R0
[R13+4]←R1
[R13+8]←R2
[R13+12]←R3
(2), R0←[R13],R1←R1+4;
R1←[R13],R1←R1+4; R2←[R13],R1←R1+4; R3←[R13],R1←R1+4;。