第三章 习题【嵌入式系统结构】_add r3,[r3],r7-程序员宅基地

技术标签: 嵌入式操作系统  # 嵌入式系统  

前言

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分;

答:
在这里插入图片描述

参考答案
(1)存储器单元数值写成1、2、3、4当然也对,R0-R3寄存器单元的值未变(不写也不扣分),仅仅写出了R13地址的正确变化,未给出存储器单元数值,给2分。
(2)不少同学把题目LDMDB R13!, {R0-R3}地址变化过程搞错,应该是地址减4,如果还写成地址加4,答案肯定就错了,0分; 给出的地址变化正确,未给出存储器单元数值,给2分。

在这里插入图片描述
在这里插入图片描述

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

参照附件图,图中给出了内存数据区地址和数据,按图右侧方框要求填空并回答问题。
(1)R1-R4四个寄存器值分别是多少?
(2)存储单元0x40001000的值是多少?
在这里插入图片描述
答:
在这里插入图片描述

参考答案

  1. (R1)= 0x40001004 (R2= 0x40001010 这两个许多学生容易搞错,R1寄存器值未变,R2寄存器在后续指令执行过程中,通过后索引发生改变,不少同学写成(0x400010004)单元的值02是错误的, 写成(0x40001010)单元值05也是错误的,注意判断。
    (R3)= 0x00000005 (R4)= 0x00000003
    每小题一分,数值(R3)=05,(R4)=03也正确,每空1分;
  2. 存储单元地址0x40001000单元数值有无变化?
    存储单元地址0x40001000单元原来数值是0x00000001,执行STR R4,[R0]指令之后变为0x00000003 。

作业活动-汇编与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

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

CMP R1, R2  
ADDHI R1 , R1 , #1      
ADDLS R2 , R2 , #1  

参考答案:

if(R1 > R2)
	R1++;
else
	 R2++;

(2)程序片断2:

CMP R0 , #20  
CMPNE   R1 , #30  
ADDNE R0 , R0 , R1

参考答案:

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

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

⑴ 
if(x = = y)
	a = b - c;
else
	a = b + c;

参考答案:

LDR  R0, x
LDR  R1, y
LDR  R2, b
LDR  R3, c
CMP  R0,R1
SUBEQ  R4,R2,R3
ADDNE  R4,R2,R3
STR  R4,a

if(x = = y) && ( a = = b)
	c = c * 8 ;

参考答案:

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 ; 通过左移指令实现也可,MOVEQ R4, R4 ,LSS,#3
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}指令为多寄存器存储指令

知识来源
3.3.6 ARM 存储器访问指令
https://jsss-1.blog.csdn.net/article/details/129998142#336_ARM__516

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

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

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

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

知识来源
3.2. ARM 指令的寻址方式
https://jsss-1.blog.csdn.net/article/details/129998142#32_ARM__139

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

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

知识来源
3.2. ARM 指令的寻址方式
https://jsss-1.blog.csdn.net/article/details/129998142#32_ARM__139

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

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

知识来源
3.2. ARM 指令的寻址方
https://jsss-1.blog.csdn.net/article/details/129998142#32_ARM__139

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

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

知识来源
3.2. ARM 指令的寻址方式
https://jsss-1.blog.csdn.net/article/details/129998142#32_ARM__139

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

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

知识来源
3.2. ARM 指令的寻址方式
https://jsss-1.blog.csdn.net/article/details/129998142#32_ARM__139

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

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

知识来源
3.2. ARM 指令的寻址方式
https://jsss-1.blog.csdn.net/article/details/129998142#32_ARM__139

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

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

知识来源
3.2. ARM 指令的寻址方式
https://jsss-1.blog.csdn.net/article/details/129998142#32_ARM__139

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

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

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

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

知识来源
3.1.4 第 2 个操作数(operand2)的三种形式
https://jsss-1.blog.csdn.net/article/details/129998142#314__2_operand2_88

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

正确答案: D
你的作答: D
解析
ARM指令集效率高,但是代码密度低

知识来源
3.4. Thumb 指令集
https://jsss-1.blog.csdn.net/article/details/129998142#34_Thumb__613

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

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

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

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

解析
R6因为没!,所以不会改变

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

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

知识来源
3.3.4 程序状态寄存器访问指令
https://blog.csdn.net/qq_51625007/article/details/129998142

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

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

R6因为有!,所以会改变

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

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

知识来源
3.3.8 ARM 伪指令
https://blog.csdn.net/qq_51625007/article/details/129998142

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

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

知识来源
3.2. ARM 指令的寻址方式
https://jsss-1.blog.csdn.net/article/details/129998142#32_ARM__139

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

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

解析
存取器指令中指针带!与不带!有区别

知识来源
3.2. ARM 指令的寻址方式
https://jsss-1.blog.csdn.net/article/details/129998142#32_ARM__139

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位的设置

知识来源
3.3.4 程序状态寄存器访问指令 
https://jsss-1.blog.csdn.net/article/details/129998142#334__364

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寄存器的控制位域

知识来源
3.3.4 程序状态寄存器访问指令 
https://jsss-1.blog.csdn.net/article/details/129998142#334__364

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.使用分支指令直接跳转。

知识来源
3.3.3 分支指令
https://jsss-1.blog.csdn.net/article/details/129998142#333__348

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
解析
立即数不符合规定
超出32位

最后

2023-3-28 17:23:03

完善:2023-7-3 22:47:24

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_51625007/article/details/129820269

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签