• ARM学习笔记3——数据处理指令


    一、数据处理指令概述

      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>            

  • 相关阅读:
    减轻Temporal AA 的 拖影问题(ghosting)
    UE4开发PSVR游戏流程
    3.1 使用STC89C52控制MC20拨打电话
    2.6 基于ARDUINO UNO+MC20的路径显示功能
    2.5 使用ARDUINO做主控,手机发送短信控制开关LED
    2.4 使用ARDUINO控制MC20进行GPS数据的获取和解析
    2.3 使用ARDUINO控制MC20进行GPRS的TCP通讯
    2.2 使用ARDUINO控制MC20发短信
    2.1 使用ARDUINO控制MC20打电话
    1.8 使用电脑测试MC20的GPRS功能
  • 原文地址:https://www.cnblogs.com/zjzsky/p/3531107.html
Copyright © 2020-2023  润新知