欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

嵌入式系统结构的习题:探索第三章

最编程 2024-08-13 15:37:13
...


第三章 习题【嵌入式系统结构】

  • 前言
  • 推荐
  • 第三章 习题【嵌入式系统结构】
  • 讨论
  • 作业活动-多寄存器存取访问指令
  • 作业活动-内存读取操作及结果
  • 作业活动-汇编与C语言代码段编程
  • 测试活动-寻址方式、指令判断与应用
  • 最后

前言

2023-3-28 17:07:55

以下内容源自《【嵌入式系统结构】》
仅供学习交流使用

推荐

第二章 测验【嵌入式系统】

第三章 习题【嵌入式系统结构】

讨论

试说明MOV指令、LDR加载指令和LDR伪指令三者的区别,从指令含义,指令形式和使用的限制方面分析,举例说明其区别。

MOV指令是把立即数、寄存器或寄存器移位后的数送给目标寄存器,可能会影响  标志位。
LDR指令是将存储器中的数据按给定地址加载到寄存器中,数据来自存储器,目标也是寄存器,不影响标志位。
LDR伪指令(LDR  目标寄存器,=表达式)用于加载32位的立即数或一个地址值到指定寄存器,形式上与LDR指令有区别。

作业活动-多寄存器存取访问指令

如果ARM处理器中各寄存器及存储单元参数如下图所示,试写出执行下列指令后,各寄存器及存储单元中内容变化情况。
⑴ STMIA R13!, {R0-R3} ⑵LDMDB R13!, { R0-R3}

第三章 习题【嵌入式系统结构】_寻址


要求给出这两条指令分别执行后,存储器单元和对应寄存器单元的值,直观给出答案

(1)按照修改后的图重新完成该题目,根据图和要求完成题目;

(2)注意地址方向,通过画图软件直接填写对应存储器单元和寄存器单元变化情况;

(3)STMIA R13!,{R0-R3}题目仅仅给出地址变化,意思表达正确,但没有填写具体数值,给2分,地址变化错,0分;

(4) LDMDB R13! , { R0-R3} 题目仅仅给出地址变化,意思表达正确,但没有填写具体数值,给2分,地址变化错,0分;答:

第三章 习题【嵌入式系统结构】_寻址_02

作业活动-内存读取操作及结果

参照附件图,图中给出了内存数据区地址和数据,按图右侧方框要求填空并回答问题。

(1)R1-R4四个寄存器值分别是多少?

(2)存储单元0x40001000的值是多少?

第三章 习题【嵌入式系统结构】_寄存器_03


答:

第三章 习题【嵌入式系统结构】_嵌入式操作系统_04

作业活动-汇编与C语言代码段编程

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

(1)程序片断1:       
CMP	R1, R2	  
ADDHI	R1 , R1 , #1 
ADDLS	R2 , R2 , #1   

(2)程序片断2:
CMP	 R0 , #20	  
CMPNE   R1 , #30   
ADDNE	R0 , R0 , R1

2、 使用ARM汇编指令的条件执行功能,试用汇编语言实现下列两段C代码语句的功能。

⑴	
if(x = = y)
		a = b - c;
else 
        a = b + c;
        
⑵	
if(x = = y) && ( a = = b)
        c = c * 8;

答:

1、(1)
if (R0>R1)
    R0++; 
else  
    R1++;

1、(2)
 if ((R0==20)&&(R1!=30))
 R0 =R0+R1;

2、(1)
LDR R0,x
LDR R1,y  
LDR R2,b  
LDR R3, c  
CMP R0,R1
ADDEQ R4,R2,R3  
SUBNE R4,R2,R3  
STR R4,a

2、(2)
LDR R0,x
LDR R1,y
LDR R2,a
LDR R3,b
LDR R4,c
CMP R0,R1
CMPEQ R2,R3
MULEQ R4,R4,#8
STR R4,c

测试活动-寻址方式、指令判断与应用

第3章 ARM7指令系统

1单选题
判断以下哪条指令是正确的?
A. MOVS R1, 101
B. STMDA R11!, {R2-R8}
C. ADD R3, [R3], R7
D. LDR R11, [R15,R8] !
正确答案: B

你的作答: B
解析
STMDA  R11!, {R2-R8}指令为多寄存器存储指令

2单选题
判断指令正确与否?
MVN R1, #0x10F
A. 错误,操作数不对
B. 指令正确

正确答案: A
你的作答: A
解析
操作数不符合规范

3单选题
指令LDR R1, [R3], #0x04 寻址方式为:
A. 立即数寻址
B. 基址变址寻址
C. 寄存器间接寻址
D. 多寄存器寻址

正确答案: B
你的作答: B
解析
基址变址寻址

4单选题
指令MOV R1, R1, ROR #2寻址方式为:
A. 立即数寻址
B. 寄存器移位寻址
C. 寄存器寻址
D. 寄存器间接寻址

正确答案: B
你的作答: B
解析
寄存器移位寻址

5单选题
指令STR R2, [R4, #0x02]! 寻址方式为:
A. 基址变址寻址
B. 寄存器间接寻址
C. 寄存器寻址
D. 相对寻址

正确答案: A
你的作答: A
解析
基址变址寻址

6单选题
指令 LDMIA R0!, {R1-R5} 寻址方式为:
A. 寄存器寻址
B. 多寄存器寻址
C. 堆栈寻址
D. 立即数寻址

正确答案: B
你的作答: B

7单选题
指令MVN R0, #0x0F2寻址方式为:
A. 立即数寻址
B. 寄存器寻址
C. 寄存器间接寻址
D. 多寄存器寻址

正确答案: A
你的作答: A
解析
立即数寻址方式

8单选题
指令LDR R0, [R2] 寻址方式为:
A. 寄存器寻址
B. 寄存器间接寻址
C. 立即数寻址
D. 寄存器移位寻址

正确答案: B
你的作答: B

9单选题
指令SUB R0, R1, R2第2操作数的寻址方式为:
A. 寄存器寻址
B. 寄存器间接寻址

正确答案: A
你的作答: A
解析
寄存器寻址方式

10单选
判断指令以下指令,哪条指令是错误的?
A. AND R1,R2, #0x0F
B. MOV R1, #0xC000
C. MOV R1,#0x3F300
D. AND R1, R2, #0x3FC00

正确答案: C
你的作答: C
解析
MOV  R1,#0x3F300指令中 常数不符合要求。

11多选题
ARM7中汇编指令组成形式如下,其中对第2操作数的说法哪些事正确的?( )
<opcode> {<cond>} {S} <Rd> , <Rn> {,<operand2>} A. #immed_8r——常数表达式,即是由一个8位的常数循环右移偶数位得到;
B. Rm——寄存器方式
C. Rm,shift——寄存器移位方式
D. 随意的一个32位立即数都可以做第2操作数

正确答案: ABC
你的作答: ABC

12单选题
以下对ARM指令集以及Thumb指令集特点的描述哪个是错误的?
A. ARM指令集效率高,但是代码密度低
B. Thumb指令集具有较高的代码密度,并保持ARM的大多数性能上的优势,它是ARM指令集的子集
C. ARM程序和Thumb程序可相互调用,相互之间的状态切换开销几乎为零。
D. ARM指令集效率低,但是代码密度高

正确答案: D
你的作答: D
解析
只有“ARM指令集效率低,但是代码密度高”描述是错误的

13单选题
ARM汇编程序,文件类型为 ,
A. “.S”
B. “
.C”
正确答案: A
你的作答: A

解析
ARM汇编代码文件类型,“*.S”

14判断题
LDR R5 , [R6, #0x04]指令执行R5、R6寄存器单元的值都会发生改变。

正确答案: 错误
你的作答: 错误

15判断题
STMFD SP!,{R1~R7,LR} 该指令是入栈操作。

正确答案: 正确
你的作答: 正确

16判断题
在ARM系统中指令LDR R3 , [R0,#4]! 执行后R0的值不变。

正确答案: 错误
你的作答: 错误

17单选题
欲将存储器单元地址为0x40003000的字数据加载到R0寄存器中,以下语句正确的是________。
A. MOV R0, [0x40003000]
B. MOV R1,#0x40003000
C. LDR R0,=0x40003000
D. LDR R1, =0x40003000 LDR R0, [R1]

正确答案: D
你的作答: D

18单选题
若 R1=2000H, (2000H) =0x86, (2008H) =0x39, 则执行指令 LDR R0, [R1, # 8] ! 后 R0的值为
A. 0x2000
B. 0x86
C. 0x2008
D. 0x39

正确答案: D
你的作答: D
解析
后索引方式,存储器读取数据

19单选题
指令LDMIA R1!, {R2-R4,R6} 与
LDMIA R1, {R2-R4,R6} 完成功能哪个说法正确?
A. 这两条指令完成的功能完全相同
B. 这两条指令都能实现将R1指向的内存数据读取到R0-R4和R6寄存器中的功能,但有区别。

正确答案: B
你的作答: B
解析
存取器指令中指针带!与不带!有区别

20单选题
判断指令是否正确:
LDMIB R0!, { R5-R8, R2} ;
A. 正确
B. 错误

正确答案: B
你的作答: B
解析
多寄存器访问指令寄存器的序号方向:从小到大,不能乱序

21多选题
以下程序段对应实现特定功能,哪些对应说法是正确的?
A. 以下指令能实现打开IRQ中断的功能
MRS R0,CPSR ;
BIC R1,R0,#0x80 ;
MSR CPSR_c, R1 ;
B. 以下指令能实现打开FIQ中断的功能
MRS R0,CPSR ;
ORR R1,R0,#0x40 ;
MSR CPSR_c, R1 ;
C. 以下指令能实现禁止IRQ中断的功能
MRS R0,CPSR;
ORR R1,R0,#0x80 ;
MSR CPSR_c, R1 ;
D. 以下指令能实现禁止FIQ中断的功能
MRS R0,CPSR ;
BIC R1,R0,#0x40 ;
MSR CPSR_c, R1 ;

正确答案: AC
你的作答: AC
解析
寄存器状态读取指令对应I、F位的设置

22多选题
以下哪条指令及注释说明都正确?
A. MRS R1,CPSR ; 读取CPSR状态寄存器到R1
B. MSR CPSR_c,R0;将R0的内容写入CPSR寄存器的控制位域
C. MRS R1,CPSR ; 将R1的内容写入CPSR寄存器
D. MSR CPSR_c,R0;将R0的内容写入CPSR寄存器的四个字节

正确答案: AB
你的作答: AD
解析
这两条指令正确,注释说明也正确
MRS    R1,CPSR      ; 读取CPSR状态寄存器到R1
MSR    CPSR_c,R0;将R0的内容写入CPSR寄存器的控制位域

23多选题
关于ARM程序中如何实现跳转,以下哪种说法是正确的:
A. 直接向PC寄存器赋值实现跳转,预先把PC值存放到R14,程序返回时可以这样操作 例: MOV PC,R14
B. 不管R1原来是什么值,随意给PC赋值就能实现跳转,例: MOV PC, R1
C. 使用分支指令直接跳转。通过B、BL、BX指令都可以实现程序的分支跳转
D. 通过B、BL、BX指令都不能实现程序的分支跳转

正确答案: AC
你的作答: AC
解析
在ARM中有两种方式可以实现程序的跳转:
1.直接向PC寄存器赋值实现跳转;     例:   MOV   PC,R14
2.使用分支指令直接跳转。

24单选题
判断哪条指令是正确的?
BXS R0 ;
BX R0 ;
A. BXS R0 指令正确
B. BX R0 指令正确
C. 这两条指令都正确
BXS R0 ;
BX R0 ;
D. 这两条指令都不正确
BXS R0 ;
BX R0 ;

正确答案: B
你的作答: B
解析
BXS  R0  ;错误,切换状态不带S,BX  R0 指令时正确的。

25多选题
判断下边指令是否正确,哪些说法是正确的?
ADD R0!, R2, #4 ;
LDR R4, [R5] ;
LDMFDS R0!, { R5-R8, R2} ;
ADD R3, [R3], R7 ;
A. LDR R4, [R5] ;该指令正确
B. 这两条指令都有问题
ADD R0!, R2, #4 ;
ADD R3, [R3], R7 ;
C. LDMFDS R0!, { R5-R8, R2} ;该指令正确
D. 四条指令都正确

正确答案: AB
你的作答: AB
解析
LDMFDS  R0!, { R5-R8, R2} ;错带S指令无法识别,序号也有问题,应该从小到大排列;
ADD  R0!, R2, #4 ; ADD  R3, [R3], R7 ;这两条加法指令都有问题

26单选题
判断指令正确与否,哪个说法是正确的?
LDMIA R11!, {R2-R8}
A. 指令正确,完成多寄存器加载操作
B. 指令错误,应该取消!
C. 指令错误,!位置应放在{R2-R8}!
D. 把{R2-R8}多个寄存器的内容写入R11指向的位置

正确答案: A
你的作答: A
解析
指令正确,完成多寄存器加载操作。LDMIA  R11!, {R2-R8},该指令完成R11指向的内存多个单元内容加载送给R2-R8寄存器的操作。

27单选题
判断指令正确与否?
STMDA R11, {R2-R8}!
A. 正确,多寄存器操作指令
B. 错误,!位置不对

正确答案: B
你的作答: B
解析
STMDA  R11!, {R2-R8},或STMDA  R11, {R2-R8}指令都是合法指令。

28单选题
判断指令对错:MVN R1, #0x10F
A. 正确
B. 错误

正确答案: B
你的作答: B
解析
立即数符合规定

最后

2023-3-28 17:23:03

祝大家逢考必过
点赞收藏关注哦