一、数据处理指令概述

  1、概念

  数据处理指令是指对存放在寄存器中的数据进行处理的指令。主要包括算术指令、逻辑指令、比较与测试指令以及乘法指令 如果在数据处理指令前使用S前缀,指令的执行结果将会影响CPSR中的标志位。

  

  2、语法格式

  数据处理指令的基本语法格式 <opcode>{<condition>}{S} <Rd>,<Rn>,<shifter_operand>

  3、参数说明

  <S>:标志指令的条件域是否更新CPSR

  <Rn>:指示第一源操作数寄存器

  <Rd>:指示目的寄存器

  <shifter_operand>:指示第二源操作数

  4、操作码<opcode>

  5、<shifter_operand>的寻址方式

二、数据传送指令

  1、MOV指令

    1.1、作用

      把一个数N送到目标寄存器Rd,其中N可以是寄存器,也可以是立即数

    1.2、语法格式(注:{}符号中的参数表示可选,<>符号加字母表示一个参数)

      MOV{<condition>}{S} <Rd>,<shifter_operand>

    1.3、参数说明(注:符号相同的参数在后面也有相同的含义)

      1.3.1、<cond>为指令编码中的条件域,它指示MOV指令在什么条件下执行

      1.3.2、S是用来更新CPSR中条件标志位的值,当更新状态寄存器CPSR中的条件标志位时,有两种情况:

          A、如果指令中的目标寄存器<Rd>不是R15,指令根据传送的数值设置CPSR中的N位(负数位)和Z位(零位)(如果数据在传送钱需要移位,则需要根据移位后的数值设置),并根据移位器的进位值设置CPSR的C位。标志位V和其他位不受影响。           

          B、如果指令中的目标寄存器<Rd>为R15,则当前处理器模式对应的SPSR的值复制到CPSR寄存器中,对于用户模式和系统模式,由于没有相应的SPSR,指令执行的结果不可预知。       

      1.3.3、<Rd>确定目标寄存器       

      1.3.4、<shifter_operand>确定操作数,为目标寄存器传送数据

  2、MVN指令     

    2.1、作用       

      MVN是反相传送指令,它将操作数的反码传送到目的寄存器,并根据操作的结果更新CPSR中相应的条件标志位。     

    2.2、语法格式

      MVN{<condition>}{S} <Rd>,<shifter_operand>

    2.3、参数说明同MOV

三、算术运算指令

  1、ADD加操作指令

    1.1、作用

      将寄存器<shifter_operand>的值加上<Rn>表示的数值,并将结果保存到目标寄存器<Rd>中,并根据指令的执行结果设置CPSR中相应的标志位。

    1.2、语法格式

      ADD{<condition>}{S} <Rd>,<Rn>,<shifter_operand>

    1.3、参数说明

      <Rd>指定目标寄存器

      <Rn>指定第一个源操作数寄存器

  2、ADC带进位的加法指令

    2.1、作用

      将两个操作数加起来,并把结果放置到目的寄存器中。它使用一个进位标志位,这样做既可以做比32位大的加法。

    2.2、语法格式

      ADC{<condition>}{S} <Rd>,<Rn>,<shifter_operand>

    

  3、SUB减操作指令

    3.1、作用

      从寄存器<Rn>中减去<shifter_operand>表示的数值,并将结果保存到目标寄存器<Rd>中。

    3.2、语法格式

      SUB{<condition>}{S} <Rd>,<Rn>,<shifter_operand>

  4、SBC带进位的减法指令

    4.1、作用

      用于执行操作数大于32位的减法操作,该指令从寄存器<Rn>中减去<shifter_operand>表示的数值,再减去寄存器CPSR中C条件标志位的反码。并将结果保存到目标寄存器<Rd>中,并根据指令的执行结果设置CPSR中相应的标志位。

    4.2、语法格式

      SBC{<condition>}{S} <Rd>,<Rn>,<shifter_operand>

  5、RSB减翻转指令

    5.1、作用

      从寄存器<shifter_operand>中减去<Rn>表示的数值,并将结果保存到目标寄存器<Rd>中,并根据指令的执行结果设置CPSR中相应的标志位。

    5.2、语法格式

      RSB{<condition>}{S} <Rd>,<Rn>,<shifter_operand>

  6、RSC带进位的翻转减指令

    6.1、作用

      从寄存器<shifter_operand>中减去<Rn>表示的数值,再减去寄存器CPSR中C条件标志位的反码,并将结果保存到目标寄存器<Rd>中,并根据指令的执行结果设置CPSR中相应的标志位。

    6.2、语法格式

      RSC{<condition>}{S} <Rd>,<Rn>,<shifter_operand>

四、逻辑运算指令

  1、AND逻辑与指令

    1.1、作用

      将<shifter_operand>表示的数值与寄存器<Rn>的值按位做逻辑与操作,并将结果保存到目标寄存器<Rd>中,同时根据操作的结果更新CPSR寄存器

    1.2、语法格式

      AND{<condition>}{S} <Rd>,<Rn>,<shifter_operand>

    1.3、逻辑与值表

  2、EOR逻辑异或指令

    2.1、作用

      将寄存器<Rn>中的值和<shifter_operand>的值执行按位“异或”操作,并将执行结果存储到目的寄存器<Rd>中,同时根据指令的执行结果更新CPSR中相应的条件标志位。

    2.2、语法格式

      EOR{<condition>}{S} <Rd>,<Rn>,<shifter_operand>

    2.3、异或值表

  3、ORR逻辑或指令

    3.1、作用

      将第二个源操作数<shifter_operand>的值与寄存器Rn的值按位做逻辑或操作,结果保存在Rd中

    3.2、语法格式

      ORR{<condition>}{S} <Rd>,<Rn>,<shifter_operand>

  4、BIC位清零指令

    4.1、作用

      将寄存器Rn的值与第二源操作数<shifter_operand>的值的反码按位做“逻辑与”操作,结果保存到Rd中

    4.2、语法格式

      BIC{<condition>}{S} <Rd>,<Rn>,<shifter_operand>

    4.3、BIC指令真值表

五、比较测试指令

  1、CMP比较指令

    1.1、作用

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

    1.2、语法格式

      CMP{<condition>}{S} <Rn>,<shifter_operand>

  2、CMN负数比较指令

    2.1、作用

      比较指令使用寄存器Rn的值加上shifter_operand,根据操作的结果更新CPSR中相应的条件标志位,以便后面的指令根据相应的条件标志来判断是否执行

    2.2、语法格式

      CMN{<condition>}{S} <Rn>,<shifter_operand>

  3、TST测试指令

    3.1、作用

      将一个寄存器Rn的值和一个shifter_operand表示的数值按位做逻辑与操作。条件标志位根据两个操作数做“逻辑与”后的结果设置。

    3.2、语法格式

      TST{<condition>}{S} <Rn>,<shifter_operand>

  4、TEQ测试相等指令

    4.1、作用

      将一个寄存器的值和一个算术值按位做逻辑异或操作,条件标志位根据两个操作数做“逻辑异或”后的结果设置,以便后面的指令根据相应的条件标志来判断是否执行。

    4.2、语法格式

      TEQ{<condition>}{S} <Rn>,<shifter_operand>            

ARM学习笔记3——数据处理指令的更多相关文章

  1. ARM学习笔记7——乘法指令

    ARM乘法指令完成两个数据的乘法,两个32位二进制数相乘的结果是64位的4积. 其中: 1.“RadHi:RdLo”是由RdHi(最高有效32位)和RdLo(最低有效32位)链接形成的64位数,“[3 ...

  2. angular学习笔记(三十)-指令(10)-require和controller

    本篇介绍指令的最后两个属性,require和controller 当一个指令需要和父元素指令进行通信的时候,它们就会用到这两个属性,什么意思还是要看栗子: html: <outer‐direct ...

  3. angular学习笔记(三十)-指令(7)-compile和link(2)

    继续上一篇:angular学习笔记(三十)-指令(7)-compile和link(1) 上一篇讲了compile函数的基本概念,接下来详细讲解compile和link的执行顺序. 看一段三个指令嵌套的 ...

  4. angular学习笔记(三十)-指令(7)-compile和link(1)

    这篇主要讲解指令中的compile,以及它和link的微妙的关系. link函数在之前已经讲过了,而compile函数,它和link函数是不能共存的,如果定义了compile属性又定义link属性,那 ...

  5. angular学习笔记(三十)-指令(6)-transclude()方法(又称linker()方法)-模拟ng-repeat指令

    在angular学习笔记(三十)-指令(4)-transclude文章的末尾提到了,如果在指令中需要反复使用被嵌套的那一坨,需要使用transclude()方法. 在angular学习笔记(三十)-指 ...

  6. angular学习笔记(三十)-指令(5)-link

    这篇主要介绍angular指令中的link属性: link:function(scope,iEle,iAttrs,ctrl,linker){ .... } link属性值为一个函数,这个函数有五个参数 ...

  7. angular学习笔记(三十)-指令(2)-restrice,replace,template

    本篇主要讲解指令中的 restrict属性, replace属性, template属性 这三个属性 一. restrict: 字符串.定义指令在视图中的使用方式,一共有四种使用方式: 1. 元素: ...

  8. JVM学习笔记——字节码指令

    JVM学习笔记——字节码指令 字节码 0与 1是计算机仅能识别的信号,经过0和1的不同组合产生了数字之上的操作.另外,通过不同的组合亦产生了各种字符.同样,可以通过不同的组合产生不同的机器指令.在不同 ...

  9. arm学习笔记

    学习ARM也有一定时间了,想想还是记点东西,要不以后就忘了.这是我的第一片,简简单单.但比较基础.1. ARM中一些常见英文缩写解释MSB:最高有效位:LSB:最低有效位:AHB:先进的高性能总线:V ...

随机推荐

  1. 初尝seajs,只提供自己学习做笔记

    (仅供自己使用,勿喷) 闲着无聊,尝试下seajs, 只是在公司项目上随便添加并测试了一下,做下记录, 方便以后自己使用更快的上手: 下载最新的sea.js, v- 3.0.0 新建seajsConf ...

  2. 第3章 Struts2框架--2、完整的Struts2框架应用实例

    1.建立一个Dynamic Web project,项目名:UserManager,把Struts2所必需的JAR复制到项目WEB-INF/lib目录下 2.修改web.xml文件,在web.xml文 ...

  3. 08_一个java.lang.NullPointException报错

    [报错代码] public class UserDaoTest{ private SqlSessionFactory sqlSessionFactory; //此方法在执行testFindUserBy ...

  4. zlib压缩解压示例

    #include <stdio.h> #include <string.h> #include <assert.h> #include "zlib.h&q ...

  5. mysql SELECT INTO OUTFILE ,can't create file (转)

    原文  http://blog.sina.com.cn/s/blog_6a5e34ad0100zfbi.html (转) 命令行模式进入mysql #mysql -uroot -p12345 #sel ...

  6. 用C#实现MD5算法

     /// <summary>     /// 一个实现MD5散列字符串的类     /// </summary>     public sealed class MD5Hash ...

  7. NS实现采用的技术大多是PHP,如果采用java、 .net是否同样适用?

    SNS采用的技术可不都是PHP (不局限于国内),特别是国外的新兴公司,基本上没有再用PHP的了,国内到还是蛮常用的.简单说说我知道的几个案例:Facebook (PHP):Facebook采用PHP ...

  8. JDK神坑:JAVA中Calendar的月份Month少1

    很多朋友在使初次使用Calendar时,会发现月份莫名其妙对不上,显示的结果总是比预期中小1个月,检查好几遍也没发现程序有错,于是开始抓狂.其实这个时候,只要去看JDK就会明白问题所在.JDK告诉我们 ...

  9. Word添加新编号

    要用到(1)(2),不想手写,但是word只有1.2.3和1)2)3),我就自定义哦.

  10. 如何监控 Tomcat?Zabbix 与 Cloud Insight 对比

    JVM 监控工具有很多,像命令 jstat,jmap,jstack,jinfo 可以根据不同需求查看不同的系统信息,还有图像化界面 jconsole,都是很方便的工具.这些可以参考 JAVA自带监控工 ...