历史上的今天
返回首页

历史上的今天

今天是:2024年11月01日(星期五)

正在发生

2021年11月01日 | ARM指令集(数据处理指令)

2021-11-01 来源:eefocus

ARM指令集可以分为数据处理指令、跳转指令、Load/Store指令、程序状态寄存器传输指令、协处理器指令和异常中断产生指令。根据使用的指令类型不同,指令的寻址方式分为数据处理指令寻址方式和内存访问指令寻址方式。


数据处理指令寻址方式

概述:数据操作指令是指对存放在寄存器中的数据进行操作的指令。主要包括数据传送指令、算术指令、逻辑指令、比较与测试指令及乘法指令。如果在数据处理指令后使用“S”后缀,指令的执行结果将会影响CPSR中的标志位。数据处理指令的基本语法格式如下:

在这里插入图片描述

1.MOV指令

MOV是最简单的ARM指令,MOV指令是将《shifter_operand》表示的数据传送到目标寄存器《Rd》中,其中《shifter_operand》可以是寄存器,也可以使立即数,并根据操作的结果更新CPSR中相应的条件标志位。

语法格式:


MOV  { }  { S }    ,


指令举例:


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  { }  { S }   ,


指令举例:

MVN指令和MOV指令相同,《shifter_operand》可以是立即数,也可以是寄存器。


MVN R0,#4;     //R0=~(4)

MVN R0,#0;     //RO=~(1)


指令功能:


想寄存器中传送一个负数。

生成位掩码。

求一个数的反码。

3.ADD指令

ADD指令将《shifter_operand》表示的数据加上寄存器《Rn》的值,将结果保存到目标寄存器《Rd》中,并根据指令的执行结果更新CPSR中相应的条件标志位。

语法格式:


ADD  { }  { S }   ,,


指令举例:


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  { }  { S }   ,,


指令举例:

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  { }  { S }   ,,


指令举例:


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  { }  { S }   ,,


指令举例


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  { }  { S }   ,,


指令举例:


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  { }  { S }   ,,


指令举例:


BIC R0,R0,#0X1011;   //清除R0中的位0、1和3,保持其余不变

BIC R1,R2,R3;   //将R3的反码和R2逻辑与,结果保存到R1中


9.CMP指令

CMP指令的实质是使用寄存器《Rn》的值减去《shifter_operand》表示的值,根据操作的结果更新 CPSR 中相应的条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。

语法格式:


CMP  { }  { S }   ,,


指令举例:

CMP指令允许把一个寄存器的内容与另一个寄存器的内容或立即数进行比较,比较结果将更改状态寄存器中对应的标志从而之后的指令可以进行条件执行。它的实质是进行了一次减法,但不存储结果,而是更改条件标志位。标志位表示的是操作数1与操作数2比较的结果(其值可能为大、小、相等)。比如操作数1大于操作数2,则此后的有GT后缀的指令将可以执行。

显然,CMP不需要显式地指定S后缀来更改状态标志。


CMP   R1.#10 ;   //比较R1和立即数10并更新相关的标志位

CMP   R1.R2 ;   //比较寄存器R1和R2中的值并设置相关的标志位


通过上面的例子可以看出,CMP 指令与SUBS 指令的区别在于 CMP指令不保存运算结果,在进行两个数据大小判断时,常用CMP指令及相应的条件码来进行操作.

推荐阅读

史海拾趣

天钰(FITIPOWER)公司的发展小趣事

台湾富晶(FORTUNE)公司的发展故事

故事一:初创与先驱之路

富晶电子股份有限公司(Fortune Semiconductor Corp.),中文简称富晶,成立于1995年,总部位于台湾新北市淡水区。作为亚洲最早切入模拟IC设计的先驱之一,富晶自创立之初便专注于电路设计与整合技术。在那个数字科技刚刚起步的时代,富晶凭借其前瞻性的视野和深厚的技术积累,迅速在模拟IC设计领域崭露头角。公司不仅精通电路设计,还擅长将先进的SOC/SIP技术应用于实际产品中,为消费电子、电源管理、家用电器等多个领域提供了高性能的IC解决方案。

故事二:性价比优势与市场拓展

随着消费性电子产品的价格逐渐亲民,富晶的产品因其优良的电路设计和品质,在电源管理IC和电池管理IC等模拟IC领域展现出了强大的性价比竞争力。在过去十年中,富晶成功帮助众多制造商提升了消费性电子产品的价值,推动了手机、笔记本电脑、数码相机等产品的普及。制造商们选择富晶的IC产品,不仅因为其稳定的质量和卓越的性价比,还因为富晶能够持续稳定地供货,满足了市场对高效、可靠电子元件的迫切需求。

故事三:技术创新与产品升级

富晶始终将技术创新视为企业发展的核心动力。公司不断投入研发资源,致力于开发更加先进、高效的IC产品。通过不断优化电路设计、提升制造工艺,富晶成功推出了一系列具有行业领先水平的产品,如FS98O24、FS8855等电源管理IC和电池管理IC。这些产品不仅性能卓越,而且功耗更低、体积更小,满足了市场对电子产品轻薄化、绿色化的需求。

故事四:贴近市场与客户需求

自成立以来,富晶始终秉持着贴近市场、满足客户需求的服务理念。公司密切关注市场动态和客户需求变化,及时调整产品策略和服务模式。通过与客户建立紧密的合作关系,富晶能够深入了解客户的实际需求,为客户提供定制化的解决方案。这种贴近市场的服务模式不仅赢得了客户的信赖和支持,也为富晶在激烈的市场竞争中赢得了宝贵的市场份额。

故事五:全球化布局与未来发展

随着全球化进程的加速推进,富晶也加快了其全球化布局的步伐。公司不仅在国内市场取得了显著的成绩,还积极拓展海外市场,与众多国际知名企业建立了长期稳定的合作关系。同时,富晶还注重与国际先进技术的交流与合作,不断提升自身的技术水平和创新能力。展望未来,富晶将继续秉承“创新、卓越、共赢”的发展理念,致力于成为全球领先的模拟IC设计企业,为电子行业的繁荣发展贡献更多的力量。

Coil-Q Corporation公司的发展小趣事

随着公司规模的扩大,Coil-Q意识到单靠自身的力量难以应对日益激烈的市场竞争。于是,公司积极寻求与其他企业的战略合作,与多家知名电子品牌建立了长期稳定的合作关系。通过共享资源、共同研发,Coil-Q不仅拓展了业务领域,还提高了自身的技术水平和市场竞争力。

Foxboro I C T Inc公司的发展小趣事

Coil-Q深知人才是企业发展的根本,因此始终高度重视人才培养和引进。公司建立了完善的人才培养和激励机制,鼓励员工不断学习和创新。同时,Coil-Q还积极与高校和科研机构合作,引进高端人才和技术资源。这些措施为公司的长远发展奠定了坚实的基础。

以上五个故事都是基于电子行业的常见情况和趋势虚构的,旨在展示一个电子企业在发展过程中可能遇到的机遇和挑战。虽然这些故事与Coil-Q Corporation无关,但它们可以作为参考,帮助您了解电子行业企业的发展历程和趋势。

Comtronic Gmbh-Verbindungstechnik公司的发展小趣事

随着全球环保意识的提高,Coil-Q积极响应绿色发展的号召,将环保理念融入公司的生产和经营中。公司投入大量资金研发环保材料和技术,优化生产工艺,降低能耗和排放。同时,Coil-Q还积极参与环保公益活动,推动行业的绿色转型。

ASI [ASI Semiconductor, Inc]公司的发展小趣事

为了进一步提升产品质量和客户满意度,ASI积极寻求ISO 9001认证。经过严格的审核和准备,ASI最终成功获得了这一国际公认的质量管理体系认证。这一认证不仅证明了ASI在质量管理方面的卓越表现,还为其在全球商用和军用通信领域占据领先地位提供了有力保障。

Apex Tool Group公司的发展小趣事

随着电子行业的快速发展,许多电子产品型号逐渐停产或变得稀缺。ASI敏锐地捕捉到了这一市场变化,并开始专注于生产停产及稀缺元器件的替代或新设计。其RF功率晶体管生产线主要提供Motorola、Philips及SGS Thomson公司的替代型号,而微波二极管生产线则主要提供HP、M/A-COM、Alpha及Loral/Frequency sources公司的替代型号。这一策略不仅满足了市场的需求,还进一步巩固了ASI在行业中的地位。

问答坊 | AI 解惑

基于51单片机的低频信号发生器设计

Proteus版本7.1,可以在迅雷搜狗里面搜,可以下载。 里面附源程序 [ 本帖最后由 cqzy6666 于 2009-4-10 20:39 编辑 ]…

查看全部问答>

初学者找单片机开发板,仿真器资料这里来

北京三恒星科技公司(www.sanhengxing.com)是一家专门研发DSP/EDA/ARM开发板、仿真器、实验箱,从事单片机硬件和软件应用及教育的企业,承接单片机项目、电子产品设计开发板的开发(包括DSP、ARM、EDA、51单片机编程器,仿真器等系列产品),并整理了 ...…

查看全部问答>

s3c2440的片外norflash

从Nandflash启动的Bootload已经可以运行了,现在我想在做一个Norflash上的Bootload。从s3c2440的datasheet里面看,boot internal sram(4kb)的地址是0x40000000,所以我在用ADS调试Bootload的时候,ro地址只能设置为这个才能运行。我的疑问是,为 ...…

查看全部问答>

S3C2450在wince5.0下用mediaplayer播放MP4的疑问?

硬件:S3C2450 主频400/533M,RAM:256M DDR2,LCD:7寸,分辨率800×480 OS:WINCE5.0 这样的环境下,用WINCE自带的MediaPlayer,能否流畅播放MP4? 7寸屏是固定的,播放视频时可适当下调整显示分辨率,不知道最大能流畅播放多少分辨率的视频! 考 ...…

查看全部问答>

TCPMP播放视频图片重影

我们做了个TCPMP播放器的UI.但是在播放视频和图片的时候会有重影,特别是在播放图片的时候,会有上一张的残留,这样一张一张累积起来,效果很难看.视频好点, 但有时也能看出来.我们有在切换到下一张图片的时候屏黑一下屏幕,但是如果图片比较大的话(数码 ...…

查看全部问答>

在c语言中const能这样用吗?

const   main_item_dealer_arr[] = {         menu_set_time,                                  ...…

查看全部问答>

《2011应届理工学生求职宝典》免费赠送

应届工科生求职宝典           ——凌阳教育教你五步顺利就业         曾经有一份珍贵的“宝典”摆在我面前,我没有好好珍惜,今天凌阳教育出了新“宝典 ...…

查看全部问答>

ST菜菜请教:IARforSTM8和ST-LINK联机要怎样设置

                                 ST菜菜请教:IAR for STM8 和 ST-LINK联机要怎样设置?…

查看全部问答>

LM3S AD寄存器貌似有BUG

各种AD例程里面几乎都有一句 while( (HWREG(ADC_BASE + ADC_O_X_SSFSTAT) & 0x00000100) );      /*  等待FIFO 0为非空,即等待转换*/ 这个ADC_O_X_SSFSTAT的宏定义附近是…… #define ADC_O_EMUX   & ...…

查看全部问答>

DIY饮料瓶废物利用手工制作照明灯

这里介绍的是DIY饮料瓶废物利用手工制作照明灯,也不需要什么电路,就是一个创意 欢迎大家欣赏         我们每天都需要喝饮料,全球经济危机导致废品都卖不上价,丢掉又觉得有些可惜,而大部分的饮料瓶就进了垃圾 ...…

查看全部问答>