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、 分析下列两段程序片断的功能,试用类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
祝大家逢考必过
点赞收藏关注哦
文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib
文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang
文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些
文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器
文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距
文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器
文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn
文章浏览阅读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
文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql
文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...
文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120
文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数