ARM指令集可以分为数据处理指令、跳转指令、Load/Store指令、程序状态寄存器传输指令、协处理器指令和异常中断产生指令。根据使用的指令类型不同,指令的寻址方式分为数据处理指令寻址方式和内存访问指令寻址方式。
数据处理指令寻址方式
概述:数据操作指令是指对存放在寄存器中的数据进行操作的指令。主要包括数据传送指令、算术指令、逻辑指令、比较与测试指令及乘法指令。如果在数据处理指令后使用“S”后缀,指令的执行结果将会影响CPSR中的标志位。数据处理指令的基本语法格式如下:
1.MOV指令
MOV是最简单的ARM指令,MOV指令是将《shifter_operand》表示的数据传送到目标寄存器《Rd》中,其中《shifter_operand》可以是寄存器,也可以使立即数,并根据操作的结果更新CPSR中相应的条件标志位。
语法格式:
MOV { 指令举例: MOV R0,#0xFF ; //R0=0xFF MOV R0,RO ; //R0=R0.....NOP指令 MOV RO,RO,LSL#3; //RO=RO<<3 当R15作为目标寄存器Rd出现时常用于子函数的返回,方法是将连接寄存器LR中保存的返回地址通过该指令传送给PC。 MOV PC,R14; //退出到调用者,用于普通函数返回,PC即R15 MOVS PC,R14; //退出到调用者并恢复标志位,用于异常函数返回 指令功能: 将数据从一个寄存器传送到另一个寄存器。 将一个常数值传送到另一个寄存器。 实现单纯的移位操作,比如操作数除以2^n可以用右移n位来实现。 当PC(R15)用作目标寄存器Rd时,可以实现程序跳转,如“MOV PC,LR”。这种跳转可以实现子程序条用及从子程序返回。 当PC作为目标寄存器Rd且指令中有后缀“S”时,则指令在执行跳转操作的同时,将当前处理器模式的SPSR寄存器的内容复制到CPSR中。这种指令“MOVS PC,LR”,可以实现从某些异常中断中返回。 2.MVN指令 MVN是数据取反传送指令,指令将《shifter_operand》表示的数据的反码传送到目标寄存器《Rd》,并根据操作的结果更新CPSR中相应的条件标志位。 语法格式: MVN { 指令举例: MVN指令和MOV指令相同,《shifter_operand》可以是立即数,也可以是寄存器。 MVN R0,#4; //R0=~(4) MVN R0,#0; //RO=~(1) 指令功能: 想寄存器中传送一个负数。 生成位掩码。 求一个数的反码。 3.ADD指令 ADD指令将《shifter_operand》表示的数据加上寄存器《Rn》的值,将结果保存到目标寄存器《Rd》中,并根据指令的执行结果更新CPSR中相应的条件标志位。 语法格式: ADD { 指令举例: ADD R0,R1,R2; //R0=R1+R2 ADD R0,R1,#0xFF; //R0=R1+0xFF ADD R0,R2,R3,LSL#1; //R0=R2+(R3<<1) 指令功能: 主要完成两个数的相加。 4.ADC指令 ADC指令将《shifter_operand》表示的值加上寄存器《Rn》的值,再加上CPSR中的C条件标志位的值,将结果保存到目标寄存器《Rd》中,并根据指令的执行结果更新CPSR中相应的条件标志位。 语法格式: ADC { 指令举例: ADC指令把两个操作数加起来,并把结果放置到目标寄存器《Rd》中。它使用CPSR中的进位标志位,这样就可以做比32位大的加法。 下面的例子将两个128位的数相加。 128位结果:寄存器R0、R1、R2和R3. 第1个128位数:寄存器R4、R5、R6和R7 第2个128位数:寄存器R8、R9、R10和R11 ADDS R0,R4,R8; //加低端的字 ADCS R1,R5,R9; //加下一个字,带进位 ADCS R2,R6,R10; //加第3个字,带进位 ADCS R3,R7,R11; //加高端的字,带进位 指令功能: ADC指令常与ADD指令联合使用,可以实现两个64位数的相加。 5.SUB 指令 SUB指令的作用是将寄存器《Rn》中的数值减去《shifter_operand》所表示的数值,将运算结果保存到目标寄存器《Rd》中,并根据指令的执行结果更新CPSR中的条件标志位。 语法格式: SUB { 指令举例: SUB R0,R1,R2; //R0=R1-R2 SUB R0,R1,#0xff; //R=R1-0xff SUB R0,R2,R3,LSL#1; //R0=R2-(R3<<1) 指令功能: SUB指令常用于实现两个数的减法。 6.AND指令 AND指令将《shifter_operand》表示的数值与寄存器《Rn》的值按位做“与”操作,并将结果保存到目标寄存器《Rd》中,同时根据操作的结果更新CPSR寄存器中的条件标志位。 语法格式: ADD { 指令举例 AND R0,R0,#0x03; //r0寄存器的0、1位不变,其他位清零 AND R2,R1,R3; //R2=R1 & R3 AND R0,R0,#0x01; //R0=R0 & 0X01 7.EOR指令 EOR指令将寄存器《Rn》中的值和《shifter_operand》表示的值进行按位“异或”操作,并将执行结果存储到目标寄存器《Rd》中,同时根据指令的执行结果更新CPSR中相应的条件标志位。 语法格式: EOR { 指令举例: EOR R0,R0,#3; //反转R0中的第0和1位 EOR R1,R1R,#0x0F; //将R1的低4位取反 EOR R2,R1,R0; //R2=R1^R0 EORS R0,R5,#0X01; //将R5和0x01进行逻辑异或,结果保存到R0,并根据执行结果更新标志位。 8.BIC指令 BIC位清零指令,将寄存器《Rn》的值与第2个源操作数《shifter_operand》的值的反码按位做“逻辑与”操作,结果保存到寄存器《Rd》中。 语法格式: BIC { 指令举例: BIC R0,R0,#0X1011; //清除R0中的位0、1和3,保持其余不变 BIC R1,R2,R3; //将R3的反码和R2逻辑与,结果保存到R1中 9.CMP指令 CMP指令的实质是使用寄存器《Rn》的值减去《shifter_operand》表示的值,根据操作的结果更新 CPSR 中相应的条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。 语法格式: CMP { 指令举例: CMP指令允许把一个寄存器的内容与另一个寄存器的内容或立即数进行比较,比较结果将更改状态寄存器中对应的标志从而之后的指令可以进行条件执行。它的实质是进行了一次减法,但不存储结果,而是更改条件标志位。标志位表示的是操作数1与操作数2比较的结果(其值可能为大、小、相等)。比如操作数1大于操作数2,则此后的有GT后缀的指令将可以执行。 显然,CMP不需要显式地指定S后缀来更改状态标志。 CMP R1.#10 ; //比较R1和立即数10并更新相关的标志位 CMP R1.R2 ; //比较寄存器R1和R2中的值并设置相关的标志位 通过上面的例子可以看出,CMP 指令与SUBS 指令的区别在于 CMP指令不保存运算结果,在进行两个数据大小判断时,常用CMP指令及相应的条件码来进行操作.
上一篇:ARM异常及中断处理介绍(中断是异常的一种)
下一篇:ARM之GPIO介绍(Exynos4412平台)
推荐阅读
史海拾趣
AnDAPT Inc.是一家专注于可编程电源管理解决方案的创新型公司。以下是关于该公司发展的相关故事:
公司成立与初期阶段:AnDAPT Inc.成立于2014年,总部位于美国加利福尼亚州圣何塞。公司的创始人之一是Raghunandan "Raghu" Anandan,他在可编程电源管理领域拥有丰富的经验和专业知识。公司成立之初,致力于开发一种新型的可编程电源管理解决方案,以满足日益复杂和多样化的电子设备对电源管理的需求。
技术创新与产品开发:AnDAPT Inc.在其成立初期即开始着手开发基于可编程电源管理技术的解决方案。公司团队结合了数字信号处理(DSP)和模拟电路设计等领域的专业知识,不断推动技术创新和产品开发。他们的主要产品是基于可编程电源管理器件的芯片,能够根据应用需求动态调整电源管理参数,提供高效、灵活和智能的电源解决方案。
市场拓展与合作伙伴关系:随着公司技术的不断成熟和产品的不断推出,AnDAPT Inc.开始加大对市场的拓展力度。公司与电子设备制造商、系统集成商以及电源管理解决方案提供商建立了紧密的合作关系,共同推动可编程电源管理技术的应用和推广。通过与行业领先的合作伙伴进行合作,AnDAPT Inc.不断拓展产品的应用领域和市场份额。
技术认证与市场认可:AnDAPT Inc.的产品经过严格的技术认证和市场测试,在业界获得了良好的口碑和市场认可。公司的可编程电源管理解决方案被广泛应用于各种电子设备,包括消费类电子产品、工业自动化设备、汽车电子系统等。其技术创新和产品性能得到了行业专家和客户的一致好评。
持续发展与未来展望:作为一家专注于可编程电源管理技术的创新型公司,AnDAPT Inc.将继续致力于技术创新和产品开发。公司将不断推出新的产品和解决方案,满足客户不断变化的需求,并积极参与行业标准的制定和技术进步的推动。在未来,AnDAPT Inc.将继续保持敏锐的市场洞察力和技术领先地位,助力客户实现产品创新和市场竞争优势。
昆泰芯微电子实行立体作战的研发模式,整合了芯片设计、电子应用设计、工业设计等多家专业设计公司。这种研发模式不仅为公司带来了更多的创新机会,也为工程师们提供了更多的挑战和成长机遇。公司注重员工的培训和发展,有专员负责新人的岗前培训,进行岗位知识的输送以及疑难问题的解答。同时,公司也鼓励员工参与实际项目,由专业领域的前辈进行引领,让员工在实践中快速成长。
为了加快产品国产化进程,昆泰芯微电子与世强先进(深圳)科技股份有限公司签订了授权代理合作协议。通过这一战略合作,昆泰芯微电子成功将旗下高端传感器产品触达至终端市场,实现了市场的快速扩张。同时,这一合作也进一步提升了昆泰芯微电子在行业中的知名度和影响力。
Daco深知人才是企业发展的核心动力。因此,公司一直注重人才培养和团队建设。Daco为员工提供了良好的工作环境和发展机会,鼓励员工不断学习和创新。同时,公司也建立了完善的激励机制和福利制度,确保员工能够全身心地投入到工作中。这种注重人才培养和团队建设的做法,使得Daco能够吸引和留住一批优秀的员工,为公司的持续发展提供了有力的保障。
在快速发展的同时,Daco也始终关注环保和可持续发展。公司采用了环保的生产工艺和材料,确保生产过程中的废弃物和排放物符合环保要求。同时,Daco也积极参与环保公益活动,推动半导体行业的绿色发展。这种关注环保和可持续发展的做法,不仅提升了Daco的品牌形象,也为公司的长远发展奠定了坚实的基础。
用CMOS技术实现高速模数转换器通信用接收器的发展趋势是必需在信号刚一进入接收器信号通道时就进行取样,并配备有精确的测试仪,而要达到这个目标就要依赖超高速模拟数字转换器来实现。美国国家半导体首推的 ADC081000 芯片是一款模拟输入带宽高达 ...… 查看全部问答∨ |
|
正在编写使用VC++6.0的MSComm控件做通讯的东西,不过实现不了230400或256000波特率的通讯,请问有什么办法? 是MSComm不够格?还是需要其他什么办法?… 查看全部问答∨ |
|
如果采用PLC串口通讯模块,波特率可达到19200。 我每次通讯10Bytes,那么通讯频率是不是就是简单的19200/8/10=240Hz? 我用的是西门子的CPU312,串口模块是341的。在这种配置下一般可以通讯频率可以达到多少?… 查看全部问答∨ |
小弟最近做了一个板子,用的片子是at89s52的,今天上电成功,液晶屏也成功,但是通电静置半小时液晶屏无显示,用万用表测单片机引脚,有的电压不到3v,放到isp下载器上,无法完成下载,换了一片单片机,液晶屏正常工作,然而又过了一会儿,这块也坏 ...… 查看全部问答∨ |
本帖最后由 jameswangsynnex 于 2015-3-3 19:49 编辑 电路工作原理简述如下: 三极管VT1为开关电源管,它和T1、R1、R3、C2等组成自激式振荡电路。加上输入电源后,电流经启动电阻R1流向VT1的基极,使VT1导通。   ...… 查看全部问答∨ |