ARM汇编指令集之四——数据处理指令

发布者:InspiredDreamer最新更新时间:2016-07-11 来源: eefocus关键字:ARM  汇编指令集  数据处理指令 手机看文章 扫描二维码
随时随地手机看文章
数据处理指令可分为数据传送指令、算术逻辑运算指令和比较指令等。

数据传送指令用于在寄存器和存储器之间进行数据的双向传输。

算术逻辑运算指令完成常用的算术与逻辑运算,该类指令不但将运算结果保存在目的寄存器中,同时更新CPSR中相应条件标志位。

比较指令不保存运算结果,只更新CPSR中相应的条件标志位。

数据处理指令共以下16条。

1、    MOV指令

MOV指令的格式为:

MOV{条件}{S} 目的寄存器,源操作数

MOV指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器。

其中S选项决定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值。

指令示例:

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

MOV PC,R14                       ;将寄存器R14的值传送到PC,常用于子程序返回

MOV R1,R0,LSL#3                 ;将寄存器R0的值左移3位后传送到R1

 

2、  MVN指令

MVN指令的格式为:

MVN{条件}{S} 目的寄存器,源操作数

MVN指令可完成从另一个寄存器、被移位的寄存器、或将一个立即数加载到目的寄存器。与MOV指令不同之处是在传送之前按位被取反了,即把一个被取反的值传送到目的寄存器中。

其中S决定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值。

指令示例:

MVN  R0,#0                       ;将立即数0取反传送到寄存器R0中,完成后R0=-1

 

3、  CMP指令

CMP指令的格式为:

CMP{条件} 操作数1,操作数2

CMP指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行比较,同时更新CPSR中条件标志位的值。

该指令进行一次减法运算,但不存储结果,只更改条件标志位。标志位表示的是操作数1与操作数2的关系(大、小、相等),例如,当操作数1大于操作操作数2,则此后的有GT 后缀的指令将可以执行。

指令示例:

CMP    R1,R0              ;将寄存器R1的值与寄存器R0的值相减,并根据结果设置CPSR的标志位

CMP    R1,#100         ;将寄存器R1的值与立即数100相减,并根据结果设置CPSR的标志位

 

4、  CMN指令

CMN指令的格式为:

CMN{条件} 操作数1,操作数2

CMN指令用于把一个寄存器的内容和另一个寄存器的内容或立即数取反后进行比较,同时更新CPSR中条件标志位的值。该指令实际完成操作数1和操作数2相加,并根据结果更改条件标志位。

指令示例:

CMN    R1,R0              ;将寄存器R1的值与寄存器R0的值相加,并根据结果设置CPSR的标志位

CMN    R1,#100               ;将寄存器R1的值与立即数100相加,并根据结果设置

 

 

5、  TST指令

TST指令的格式为:

TST{条件} 操作数1,操作数2

TST指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的与运算,并根据运算结果更新CPSR中条件标志位的值。

操作数1是要测试的数据,而操作数2是一个位掩码,该指令一般用来检测是否设置了特定的位。

指令示例:

TST    R1,#%1              ;用于测试在寄存器R1中是否设置了最低位(%表示二进制数)

TST    R1,#0xffe           ;将寄存器R1的值与立即数0xffe按位与,并根据结果设置CPSR的标志位

6、  TEQ指令

TEQ指令的格式为:

TEQ{条件} 操作数1,操作数2

TEQ指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的异或运算,并根据运算结果更新CPSR中条件标志位的值。

该指令通常用于比较操作数1和操作数2是否相等。

指令示例:

TEQ   R1,R2                   ;将寄存器R1的值与寄存器R2的值按位异或,并根据结果设置CPSR的标志位

 

 

7、  ADD指令

ADD指令的格式为:

ADD{条件}{S} 目的寄存器,操作数1,操作数2

ADD指令用于把两个操作数相加,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。

指令示例:

ADD     R0,R1,R2                ; R0 = R1 + R2

ADD     R0,R1,#256              ; R0 = R1 + 256

ADD     R0,R2,R3,LSL#1         ; R0 = R2 + (R3 << 1)

8、  ADC指令

ADC指令的格式为:

ADC{条件}{S} 目的寄存器,操作数1,操作数2

ADC指令用于把两个操作数相加,再加上CPSR中的C条件标志位的值,并将结果存放到目的寄存器中。它使用一个进位标志位,这样就可以做比32位大的数的加法,注意不要忘记设置S后缀来更改进位标志。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。

以下指令序列完成两个128位数的加法,第一个数由高到低存放在寄存器R7~R4,第二个数由高到低存放在寄存器R11~R8,运算结果由高到低存放在寄存器R3~R0:

ADDS     R0,R4,R8          ; 加低端的字

ADCS    R1,R5,R9             ; 加第二个字,带进位

ADCS    R2,R6,R10          ; 加第三个字,带进位

ADC      R3,R7,R11              ; 加第四个字,带进位

 

 

9、  SUB指令

SUB指令的格式为:

SUB{条件}{S} 目的寄存器,操作数1,操作数2

SUB指令用于把操作数1减去操作数2,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令可用于有符号数或无符号数的减法运算。

指令示例:

SUB     R0,R1,R2                ; R0 = R1 - R2

SUB     R0,R1,#256              ; R0 = R1 - 256

SUB     R0,R2,R3,LSL#1         ; R0 = R2 - (R3 << 1)

10、  SBC指令

SBC指令的格式为:

SBC{条件}{S} 目的寄存器,操作数1,操作数2

SBC指令用于把操作数1减去操作数2,再减去CPSR中的C条件标志位的反码,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于32位的减法,注意不要忘记设置S后缀来更改进位标志。该指令可用于有符号数或无符号数的减法运算。

指令示例:

SBCS    R0,R1,R2                         ; R0 = R1 - R2 - !C,并根据结果设置CPSR的进位标志位

 

11、RSB 指令

RSUB 指令的格式为:

RSB {条件}{S} 目的寄存器,操作数1,操作数2

RSB 指令称为逆向减法指令,用于把操作数2减去操作数1,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令可用于有符号数或无符号数的减法运算。

指令示例:

RSB      R0,R1,R2                              ; R0 = R2 – R1

RSB      R0,R1,#256                            ; R0 = 256 – R1

RSB      R0,R2,R3,LSL#1                       ; R0 = (R3 << 1) - R2

 

12、RSC指令

RSC指令的格式为:

RSC{条件}{S} 目的寄存器,操作数1,操作数2

RSC指令用于把操作数2减去操作数1,再减去CPSR中的C条件标志位的反码,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于32位的减法,注意不要忘记设置S后缀来更改进位标志。该指令可用于有符号数或无符号数的减法运算。

指令示例:

RSC     R0,R1,R2                             ; R0 = R2 – R1 - !C

13、AND指令

AND指令的格式为:

AND{条件}{S} 目的寄存器,操作数1,操作数2

AND指令用于在两个操作数上进行逻辑与运算,并把结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于屏蔽操作数1的某些位。

指令示例:

AND R0,R0,#3                            ; 该指令保持R0的0、1位,其余位清零。

 

 

14、ORR指令

ORR指令的格式为:

ORR{条件}{S} 目的寄存器,操作数1,操作数2

ORR指令用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于设置操作数1的某些位。

指令示例:

ORR R0,R0,#3         ; 该指令设置R0的0、1位,其余位保持不变。

15、EOR指令

EOR指令的格式为:

EOR{条件}{S} 目的寄存器,操作数1,操作数2

EOR指令用于在两个操作数上进行逻辑异或运算,并把结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于反转操作数1的某些位。

指令示例:

EOR R0,R0,#3        ; 该指令反转R0的0、1位,其余位保持不变。

16、BIC指令

BIC指令的格式为:

BIC{条件}{S} 目的寄存器,操作数1,操作数2

BIC指令用于清除操作数1的某些位,并把结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。操作数2为32位的掩码,如果在掩码中设置了某一位,则清除这一位。未设置的掩码位保持不变。

指令示例:

BIC R0,R0,#%1011    ; 该指令清除 R0 中的位 0、1、和 3,其余的位保持不变。

关键字:ARM  汇编指令集  数据处理指令 引用地址:ARM汇编指令集之四——数据处理指令

上一篇:ARM汇编指令集之五——乘法指令与乘加指令
下一篇:ARM汇编指令集之三——跳转指令

推荐阅读最新更新时间:2024-03-16 14:59

始于ARM与三星:苹果自行设计的SoC是怎么走到今天
2005 年的 WWDC 上,乔布斯(Steve Jobs)公布了一项重要的计划:将 Mac 从 IBM 的 PowerPC,转移到 Intel 的 x86 架构。然而在当时,苹果也在私下进行两件大事:开发平板电脑,以及当时仍以 iPod 设计为基础、但加入了通讯功能的原型手机。 苹果移动装置之初:为什么是 ARM? 苹果开发触控式平板电脑的时间点其实比手机还早。乔布斯坦言,他是因为参加微软高级工程师的婚礼,才打听到微软正在设计以触控笔来操作的平板电脑(注 1)。当时苹果对手机的想法还没有完全脱离 iPod 的转盘,直到 Jony Ive 向乔布斯单独简报能用手指卷动页面的多点触控原型,Jobs 才拍板把原本放在平板电脑的多点
[半导体设计/制造]
ARM-Linux开发步骤
拿到一块YC2440(s3c2440)的开发板,经过几天的学习,我对arm-linux系统开发步骤有了一些认识。就以开发这个开发板为例,arm-linux开发工作大概分4个部分 1.硬件(hardware) 2.引导加载器(bootloader) 3.内核(kernel) 4.文件系统(file system) 硬件 我并不是硬件工程师,但我知道硬件的设计基本上是从性能,结构,可靠性等方面的需求方面来考虑。比如串口调试很常用,那么硬件就需要设计串口。在比如硬件需要接LCD,就必须提供LCD接口。 bootloader bootloader是什么? bootloader是一个引导程序,它最主要的功能是加载内核,所谓加载内核就
[单片机]
ARM今日早盘再涨5% 季报后连续两日大涨
北京时间10月24日 芯片制造商ARM盘前发布季报后连续两个交易日大涨,截至21:43,其股价涨5.23%,报32.82美元。周二其股价收涨10.9%,报收31.19美元。   ARM季报显示,得益于智能手机和平板电脑的强劲增长以及版税的增长,公司整后的税前利润为6810万英镑(约合1.09亿美元),同比增长22%,高于分析师预期的6740万英镑。营收为1.446亿英镑(约合2.28亿美元),同比增长20%,高于分析师预期的1.4亿英镑。   公司CFO斯科尔称,第三财季,被用于大多数平板电脑和智能手机中ARM的节能芯片销量很好;高端的Cortex-A表现尤其强劲,占到了整体出货量的9%,高于一年前的5%,占到了版税收入
[手机便携]
ARM扩展网络接口
大多数ARM芯片没有集成网络接口,而嵌入式设备很多都需要使用网络,因此需要专门扩展网络接口。ARM扩展网络接口的方法是外接一片Ethernet控制器芯片。 Ehternet控制器芯片种类很多,有10Mbits/s的,也有10/100Mbits/s自适应的,甚至还有千兆网络芯片。目前的网络接口中,10/100 Mbits/s的网络接口应用最广泛,因此ARM大多选择扩展10/100Mbits/s网口。在10/100Mbit/s的Ethernet控制器芯片中,DM9000A芯片是比较有代表性的一款,下面就来介绍S3C2440联接DM9000A扩展网络接口。 DM9000A的封装形式是48-Pin LQFP,有48根引脚。与处理器联接的引
[单片机]
ARM中char、short、int、long、float、double数据类型占多少位
arm是32位单片机: char:1字节 short:2字节 int:4字节 long:4字节 float:4字节 double:8字节 如果遇到其他单片机,可以用sizeof测量: printf( char: %dn , sizeof(char)); printf( short: %dn , sizeof(short)); printf( int: %dn , sizeof(int)); printf( long: %dn , sizeof(long)); printf( float: %dn , sizeof(float)); printf( double: %dn , si
[单片机]
三星手机采用ARM Mali-SVG-T 2D图形转译软件
ARM近日宣布移动电话厂商三星电子(Samsung Electronics)取得ARM Mali-SVG-t软件授权,可支持三星手机的2D对象图形转译(Graphical Rendering),以及不同的屏幕分辨率和缩放倍率。 ARM Mali-SVG-t技术提供与SVG-t 1.2规格兼容的中介软件层,不但可达到ARM处理器最佳化,而且还可利用与OpenVG兼容的绘图加速技术,例如ARM Mali系列绘图处理器(GPU)。此技术协助三星电子于不同的ARM平台上提供最佳效能与功耗特性。 Mali GPU系列包括最小的OpenGL ES绘图处理器Mali-55,到最高效能、支持最高1080p高画质分辨率的嵌入式
[手机便携]
传Google新Chrome OS系统将支持ARM芯片
此前,Google 曾非常明确表示,Chrome OS不会局限于上网本,另外,如果有可能也会支持各种设备,包括基于ARM的智能本和平板机。 我们可以从 Chromium OS 系统项目中看到,Chrome OS将会和以ARM芯片为核心处理器的设备完美匹配。其中最快的ARM 芯片之一“三星 Exynos 5250 ”将会出现在一款代号为“Daisy”的新硬件设备中。只是到现在为止,我们还找不到这款神秘新设备的更多信息,但可以确信的是,google现在正紧锣密鼓地忙于研发基于ARM芯片的新设备。 Chrome OS基于Linux内核,在Chrome OS源代码的主分支中,ARM十分活跃,三星S5PC110和S5PV2
[手机便携]
Dualcore推出面向实时应用的两个ARM内核MCU
Dualcore半导体公司推出DCIC9907微控制器(MCU),它包括两个ARM 946E内核、两个CAN通道、两个10Mbit/100Mbit以太网网卡,并可为实时协议进行硬件扩展。 该SoC还提供运动控制逻辑功能,适合对时间要求严格产品及其它工业控制产品。它允许用户在实时条件下进行控制,如需要精确预测时间性能。 在DCIC9907内,两个ARM内核中的其中一个可用于复杂的实时控制,另一个用于系统基础结构,如人机接口和所需的通讯接口。为了达到这个目的,通用的实时操作系统EUROS已经移植到DCIC9907。 两个10Mbit/100Mbit以太网MAC端口具有硬件扩展功能,支持以太网上的实时协议。DCIC9907中集成的
[新品]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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