清采NOTE

理解他人 善待自己

用户工具

站点工具


courses:embedded_system:lianxi_03

嵌入式系统·第3章练习题


1、ARM状态下几乎所有的指令均可有条件执行,而Thumb状态下只有(跳转指令)可以有条件执行。

2、条件码后缀中,EQ的含义是(相等),LS的含义是(无符号数小于或等于),LE的含义是(带符号数小于或等于)

3、写出以下代码片段中,各行的含义:

CMP	R0, R1
ADDHI	R0, R0, #1
ADDLS	R1, R1, #1

答:依次为
比较R0和R1的大小,结果存放在CPSR的条件标志位;
当R0大于R1时,更新R0的值为R0+1;
当R0小于或等于R1时,更新R1的值为R1+1。

4、指出以下各行指令对应的寻址方式:

SUBS	R0, R0, #1
MOV	R1, R2
ANDS	R0, R1, LSL #3
STR	R0, [R1]
LDR	R0, [R1, #3]
LDMIA	R0, {R1-R4, R6}
LDMFD	SP!, {R1-R4, R6}

答:依次为
立即寻址;
寄存器寻址;
寄存器移位寻址;
寄存器间接寻址;
变址寻址;
多寄存器寻址;
堆栈寻址。

5、在跳转指令中,BL表示(带返回地址的跳转),BX表示(带状态切换的跳转)

6、跳转指令BX <Rm>执行时,是将<Rm>中的高(31)作为目标地址存入PC,实现跳转;而最低位(Rm[0])被用来切换处理他工作状态。

7、在数据处理指令格式中,第2个操作数operand2可有3种形式,即(立即数)(寄存器)(移位寄存器)

8、以下哪个不是有效立即数(C)

A. 0xF000000F
B. 0x104
C. 0x101
D. 0xFF000000

9、用汇编指令实现下列操作。

(1) R0 = 24
(2) R0 = R1/32
(3) R0 = R1+R2
(4) R0 = -1
(5) R0 = -R0
(6) R0 = 0xFFFFFFFA
(7) R0 = R1*R2
(8) R0 = R1-R2,并影响条件标志位
(9) R0 = (R2*R3)的低32位+R0,R1 = (R2*R3)的高32位+R1,寄存器中均为无符号数

答:

(1) MOV		R0, #24
(2) MOV		R0, R1, LSR #5
(3) ADD		R0, R1, R2
(4) MVN		R0, #0
(5) RSB		R0, R0, #0
(6) MVN		R0, #0x05
(7) MUL		R0, R1, R2
(8) SUBS	R0, R1, R2
(9) UMLAL	R0, R1, R2, R3

10、将 0x00FF0000 存入R0的指令为(MOV R0, #0x00FF0000),将 0xFFFFFFFD 存入R1的指令为(MOV R1, #0x00000002),执行指令 ADDS R2, R0, R1 之后,R2中的值为(0x00FEFFFD),CPSR中的C位的值为 (1)

11、利用汇编指令编写代码片段,将处理器模式切换到快中断模式(FIQ)。(已知FIQ的模式控制位为 M[4:0] = 10001

答:代码片段如下

MRS  R0, CPSR
BIC  R0, R0, #0x1F
ORR  R0, R0, #0x11
MSR  CPSR_c, R0

12、ARM处理器为什么要有 MNV 指令和 RSB 指令?

13、ARM指令中,ANDORREORBIC各自指的是什么,实际使用时常用来实现什么功能?

答:
(1) AND,逻辑与,常用来取出某些位或置位某些位;
(2) ORR,逻辑或,常用来取出某些位或置位某些位;
(3) EOR,逻辑异或,常用来将某些位取反;
(4) BIC,位清除,常用来置零某些位。

14、利用条件执行指令,编写程序片段,实现功能为:判断R0的值是否大于 0x3C,若小于或等于 0x3C,则用R0加上 0x3A

答:

CMP   R0, #0x3C
ADDLE R0, R0, 0x3A