常用的ARM指令总结

发布者:cxx7848653最新更新时间:2021-06-09 来源: eefocus关键字:ARM  字节 手机看文章 扫描二维码
随时随地手机看文章

1.ARM指令的寻址方式有几种?试分别举例说明。

答:

立即数寻址:MOV R0,#15

寄存器寻址:ADD R0,R1,R2

寄存器间接寻址:LDR R0,[R4]

寄存器移位寻址:ADD R0,R1,R2,LSL #1

基址变址寻址:LDR R0,[R1,#4]

多寄存器寻址:LDMIA R0!,{R1-R4}

相对寻址:BL proc ;跳转到子程序proc处执行

proc MOV R0,#1


堆栈寻址:STMFD R13!,{R0-R4};

LDMFD R13!,{R0-R4};


2.ARM指令系统对字节、半字、字的存取是如何实现的?

LDR/STR 字数据加载/存储指令

LDRB/STRB 字节数据加载/存储指令

LDRH/STRH 半字数据加载/存储指令

LDRSB/LDRSH 有符号数字节/半字加载指令


3.如何从ARM指令集跳转到Thumb指令集?


BX指令跳转到指令中所指定的目标地址,并实现状态的切换。

Rm是一个表达目标地址的寄存器。当Rm中的最低位Rm[0]为1时,强制程

序从ARM指令状态跳到Thumb指令状态;当Rm中的最低位Rm[0]为0时,

强制程序从Thumb指令状态跳到ARM指令状态。



4.ARM指令集支持哪几种协处理器指令?

CDP LDC STC MCR MRC


5.ARM指令的条件码有多少个?默认条件码是什么?

15个 默认条件码是AL


6.ARM指令中的第二操作数有哪几种形式?试举例说明。

寄存器形式 MOV R1,R0 ;将寄存器R0的值传送到寄存器R1

立即数形式 MOV R0,#5 ;将立即数5传送到寄存器R0

被移位的寄存器形式 MOV R1,R0,LSL#3


7.MOV指令与LDR指令有何区别?

LDR 指令用于在存储器和处理器的寄存器之间传送数据

MOV 主要用于将一个寄存器中的数据传送到另一个寄存器,或者将一个立即数传送到寄存器,


8.判断下列指令正误,并说明理由?


(1)LDR R3,[R4]! (2)ADD R6,R5,#4!

(3)LDMIA R6,{R3-R7}! (4)LDMFD R13!,{R2,R4}

(5)ADD R1,R2,#0x104 (6)ADD R1,R2,#0x101

(7)MOV R0,R0 (8)MVN R7,#0x2F100

(9)MVN R0,R3,#2_01110000 (10)SBC R15,R6,LSR R5

(11)AND R5,[R6],R7 (12)MRS R15,CPSR

(13)MSR CPSR,#0x001 (14)MUL R3,R3,R6

(15)MUL R4,R6,#0x80 (16)STRB SP![R0,R4]

(17)LDRB R1,[R6,R4],R6 (18)STRB R0,[R15,#0x04]!

(19)LDRB PC,[R5] (20)LDRSB R5,[R4,#0x101]

(21)STRSH R6,[R5]


9.下列指令在什么条件下被执行

SUBMI R3,R3,#0x08 负数

ADDNE R0,R0,R4 不等


10.下列两段代码是用来实现打开中断和关闭中断,请补齐空白处内容

MRS R1,CPSR

BIC R0,R1,____ #0x80

MSR CPSR_c,R0

MRS R1,CPSR

ORR R1,_____

MSR CPSR_c,R1

11.举例说明B和BL指令的区别、BX和BLX的区别?


B指令示例:

backword SUB Rl,R1,#1

CMP R1,#0 ;比较R1和0

BEQ forward ;如果R1=0 则跳转到forward处执行

SUB R1,R2,#3

SUB R1,R1,#1

forward ADD R1,R2,#4

ADD R2,R3,#2

B backword ;程序无条件跳转到标号backword处执行



BL指令示例

BL func ;跳转到子程序

ADD R1,R2,#2 ;子程序调用完返回后执行的语句,返回地址

func ;子程序

… ;子程序代码

MOV R15,R14 ;复制返回地址到PC,实现子程序的返回


BX指令示例


CODE32 ;ARM程序段,32位编码

arm1 ADR R0,thumb1+1 ;伪指令,把语句标号thumb1所在的地址赋

;给R0,末位R0[0]置1,要跳转到THUMB指令集

MOV LR,PC ;设置返回地址

BX R0 ;跳转

ADD R1,R2,#2 ;返回地址处,第4条指令


CODE16 ;THUMB程序段,16位编码

thumb1 ADD R1,R3,#1 ;THUMB程序

BX LR ;跳转到返回地址处,执行第4条指令


BLX指令示例


CODE32 ;ARM程序段,32位编码

arm1 ADR R0,thumb1+1 ;伪指令,把语句标号thumb1所在的地址赋

;给R0,末位R0[0]置1,要跳转到THUMB指令集

;MOV LR,PC ;该指令注销 ,比较BL指令

BLX R0 ;跳转,同时设置返回地址 即PC?LR

ADD R1,R2,#2 ;返回地址处,第4条指令


CODE16 ;THUMB程序段,16位编码

thumb1 ADD R1,R3,#1 ;THUMB程序

BX LR ;跳转到返回地址处,执行第4条指令


分析:使用BLX指令代替BX指令简化了Thumb例程的调用,因为BLX指令在

连接寄存器LR中自动设置了返回地址。比较上例,该例中不需要使用MOV

LR,PC指令来保存PC的值了。


关键字:ARM  字节 引用地址:常用的ARM指令总结

上一篇:基于嵌入式Linux平台的指纹门禁系统
下一篇:22个ARM常用概念

推荐阅读最新更新时间:2024-11-10 12:14

iTOP-4412开发板-实战教程-ssh服务器移植到arm开发板
在前面实战教程中,移植了“串口文件传输工具”,整个移植过程是比较简单的,而且我 们没有做任何协议方面的了解,只是“配置”+“编译”就完成了整个工作,现在大家应该对移植开源软件有了基本的了解。 入门视频教程中,给 Windows系统安装了 ssh 客户端,给 Ubuntu 安装了 ssh 服务器, 这样就可以通过 ssh 在 Windows和虚拟机 Ubuntu 之间传输文件。其实在开发板上也是可以移植和安装 ssh 服务器,这样就可以通过网络,在 Windows和开发板之间传输文件。 “实战教程-ssh 服务器移植到开发板”,我们要完成的目标是能够通过 ssh 在开发板在 Windows和开发板之间传输文件,当然也是可以使
[单片机]
iTOP-4412开发板-实战教程-ssh服务器移植到<font color='red'>arm</font>开发板
ARM连接器介绍
ARM连接器armlink将编译得到的ELF格式文件以及相关的C/C++运行时库连接生成相应的结果文件。armlink可以完成下面的操作: **连接编译后得到的目标文件相应的c/c++运行时库,生成可执行的影像文件。 **将一些目标文件进行连接,生成一个新的目标文件,供将来进一步连接时使用,这成为部分连接。 **指定代码和数据在内存中的位置。 **生成被连接文件的调试信息和相互间的引用信息。 Armlink在进行部分连接和完全生成可执行文件时作进行的操作是不同的。下面分别介绍: (1)解析输入的目标文件之间的符号引用关系。 (2)根据输入目标文件对c/c++函数的调用关系,从c/c++运行时库中提取相应模块。 (3)将各个输入段排序
[单片机]
ARM逆袭称王 英特尔移动芯片失败根源分析
在移动互联的大潮中,ARM逆袭称王,电脑芯片时代的巨人英特尔,却反应迟钝,成了被边缘化者。日前,英特尔总裁詹姆斯(Renee-James)对美国媒体表示,移动芯片上暂时的失败,并不是英特尔缺乏技术,而是并未给予足够的重视。周五在接受彭博社采访时,詹姆斯表示:“(在移动芯片上)没有能力做,和不做某件事存在区别。”言下之意,英特尔在移动芯片上没有给予足够的战略优先级,并非自身缺乏技术。      五月份,卡赞尼奇担任英特尔CEO,49岁的詹姆斯被提拔为总裁,是英特尔的“第二号人物”。在新的管理层下,英特尔有了一些变化,在产品发布上,不再按照过去的路线图按部就班,而是成熟一个、发布一个。   如今,消费者在查看邮件、上网浏览、在线
[模拟电子]
<font color='red'>ARM</font>逆袭称王 英特尔移动芯片失败根源分析
ARM7中断设置问题
在ARM教程中许多例子都有这样的话:VICVectCntl0=0X2E; 为什么就可以EINT0通道分配到IRQ Slot0。 VICVectCntl1=0X2F;又分配到slot几呢?还有许多教程中写的是 EXTMODE = 0X00; EXTPOLAR = 0X02; VICIntSelect = 0X00000000; VICVectCntl0 = 0X20|15; VICVectAddr0 = (int)IRQ_Eint1; EXTINT = 0X02; VICIntEnable = 0X00008000; VICVectCntl0 = 0X20|15; 又是什么意思,中间|是怎么回事。0X20或15是什
[单片机]
ARM应用调试思路、方法总结、笔记
一、应用调试1:使用strace命令来跟踪系统调用 二、应用调试2:使用GDB来调试应用程序 编译gdb,gdbserver tar xjf gdb-7.4.tar.bz2 cd gdb-7.4/ ./configure --target=arm-linux make 把arm-linux-gdb复制到/bin目录 cd gdb/gdbserver/ ./configure --host=arm-linux cp gdbserver /work/nfs_root/first_fs/bin 编译要调试的应用,编译时加上-g选项 调试: 1. 在ARM板上 gdbserver 192.168.1.17:2345 ./test_debu
[单片机]
C51:24C02 写入、读出一个字节
#include reg51.h // 包含51单片机寄存器定义的头文件 #include intrins.h //包含_nop_()函数定义的头文件 #define OP_READ 0xa1 // 器件地址以及读取操作,0xa1即为1010 0001B #define OP_WRITE 0xa0 // 器件地址以及写入操作,0xa1即为1010 0000B sbit SDA=P3^4; //将串行数据总线SDA位定义在为P3.4引脚 sbit SCL=P3^3; //将串行时钟总线SDA位定义在为P3.3引脚 //函数功能:延时1ms (3j+2)*i=(3 33+2) 10=1010(微秒),可
[单片机]
外媒:中国正在放缓英伟达收购Arm步伐
英伟达收购Arm计划仍然面临重重阻碍,在错过暑假前向欧洲监管机构提交文件后,中国监管机构据称也未能加快审查进度。 据行业媒体The Information最新报道,业内人士表示,中国竞争监管机构甚至还没有开始对这起收购案进行正式审查。整个审查过程可能需要六个月的时间,分三个阶段进行。此外,考虑到英伟达交易的规模,这个过程可能需要经历两次甚至三次。 报道指出,奇怪之处在于,在英伟达的申请已经提交的情况下,中国监管机构为何还没有开始审查此案。报道推测,一个可能原因是,Arm的两家中国授权商华为和中兴反对这笔交易。这将带来多大的影响目前尚不清楚。 不只是华为和中兴,高通也是众多不满英伟达收购Arm企图的公司之一。 更让事情复杂化的是,A
[手机便携]
LSI推出基于ARM®技术的全新通信处理器
2013年4月25日,北京—LSI公司(NASDAQ: LSI)日前宣布推出其Axxia® 4500产品系列通信处理器,适用于加速网络性能,同时支持整个企业网日益增加的流量负载。 Axxia 4500系列是LSI首款为企业和数据中心网络应用以及向SDN演进而推出的基于ARM技术的通信处理器。最新Axxia处理器通过将LSI®网络加速器和Virtual Pipeline™技术,与ARM低功耗内核,以及可扩展互联技术完美结合,可充分满足新一代网络面临的性能挑战需求。 LSI网络解决方案业务部的高级副总裁兼总经理Jim Anderson表示:“随着越来越多的企业和个人信息走向云端,随时随地快速安全存取数据的需求变得至关重要,同时也迫
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved