嵌入式系统·第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指令中,AND
、ORR
、EOR
、BIC
各自指的是什么,实际使用时常用来实现什么功能?
答:
(1) AND
,逻辑与,常用来取出某些位或置位某些位;
(2) ORR
,逻辑或,常用来取出某些位或置位某些位;
(3) EOR
,逻辑异或,常用来将某些位取反;
(4) BIC
,位清除,常用来置零某些位。
14、利用条件执行指令,编写程序片段,实现功能为:判断R0的值是否大于 0x3C
,若小于或等于 0x3C
,则用R0加上 0x3A
。
答:
CMP R0, #0x3C ADDLE R0, R0, 0x3A