zoukankan      html  css  js  c++  java
  • (3) arm 指令

    1. 跳转指令
      1.1 B 跳转指令
        B{cond} label
        说明:如果条件cond满足,arm处理器将立即跳转到label指定的地址处继续执行.

      1.2 BL 带链接的跳转指令
        BL{cond} label
        说明:如果条件cond满足,会首先将当前指令的下一条指令的地址拷贝到R14(LR),
        然后跳转到label指定的地址处继续执行.

      1.3 BX 带状态切换的跳转指令
        BX{cond} Rm
        如果条件cond满足,则处理器会判断rm的位[0]是否为1,如果为1则跳转时自动将
        CPSR寄存器的标志T位置,并将目标地址处的代码解释为Thumb代码来执行,即处
        理器会切换至Thumb状态,反之,若Rm的位[0]为0,则跳转时自动将CPSR寄存器
        的标志T复位,并将目标地址处的代码解释为arm代码来执行,即处理器会切换到
        arm状态

      1.4 BLX 带链接和状态切换的跳转指令
        BLX{cond} rm
        BLX指令集合了BL与BX的功能,当cond条件满足时,除了设置链接寄存器,还根据
        Rm位[0]的值来切换处理器状态


    2. 存储器访问指令
      2.1 LDR 存储器加载数据到寄存器
        LDR{type}{cond} Rd,label
        LDRD{cond} Rd,Rd2,label
        type:指明了操作数据的大小,取值范围为:B(无符号字节),SB(有符号字节)
        ,H(无符号半字),SH(有符号半字)
        cond:执行条件
        Rd:为要加载的寄存器
        label:要读取的内存地址
        LDRD:一次加载双字的数据

      2.2 STR 寄存器保存数据到存储器
        STR{type}{cond} Rd,label
        STRD{cond}Rd,Rd2,label
        与LDR相同,但是type中的SB和SH对STR无效

      2.3 LDM 从存储器加载多个数据到寄存器列表
        LDM{addr_mode}{cond} Rn{!} reglist

        addr_mode取值:
      addr_mode 含义
      IA Increase After,基址寄存器在执行命令之后增加,这是默认情况
      IB Increase Before,基址寄存器在执行命令之前增加(仅ARM)
      DA Decrease After,基址寄存器在执行命令之后减少(仅ARM)
      DB Decrease Before,基址寄存器在执行命令之前减少
      FD 满递减堆栈,堆栈向高地址生长,堆栈指针指向最后一个入栈的有效数据项
      FA 满递增堆栈,堆栈向高地址生长,堆栈指针指向下一个要放入的空地址
      ED 空递减堆栈,堆栈向低地址生长
      EA 空递增堆栈,堆栈向高地址生长










        Rn:基地址寄存器,用于存储初始地址
        !:可选后缀,如果有!,则最终地址将写回到Rn寄存器中
        reglist:用来存储数据的寄存器列表,用大括号括起来,寄存器列表可以是多个连续的寄存器,
        多个寄存器可以用'-'连接,如R0-R3,如果多个寄存器是不连续的,则使用都好将它们分隔开来,如{R0,R1,R7}

      2.4 STM 将一个寄存器列表的数据存储到指定的存储单元
        STM{addr_mode}{cond} Rn{!} reglist
        STM与LDM的格式是一样

      2.5 PUSH 将寄存器推入满递减堆栈
        PUSH{cond} reglist

      2.6 POP 从满递减栈中弹出数据到寄存器可
        POP{cond} reglist

      2.7 SWP 寄存器与存储器数据交换
        SWP{B}{cond} Rd,Rm,[Rn]
        B:可选字节,表示交换字节,默认为32为的字
        cond:执行条件
        Rd:要从存储器加载加载数据的寄存器
        Rm:要写入数据到存储器的寄存器
        Rn:需要进行数据交换的存储器地址,Rn不能与Rd和Rm相同
        如果Rd与Rm相同,可实现单个寄存器与存储器的数据交换

    3. 数据处理指令
      3.1 MOV 数据传输指令
        将8位的立即数或寄存器的内容传送到目标寄存器中
        MOV{cond}{S} Rd,operand2

      3.2 MVN 数据非传送指令
        将8位的立即数或寄存器按位取反后传送到目标寄存器中
        MVN{cond}{S} Rd,operand2

      3.3 ADD 加法指令
        ADD{cond}{S} Rd,Rn,operand2

      3.4 ADC 带进位的加法
        将Rn寄存器与operand2寄存器的值相加,再加上CPSR寄存器的C条件标志位的值,最后将结果保存到Rd寄存器
        ADC{cond}{S} Rd,Rn,operand2

      3.5 SUB 减法指令
        Rn寄存器的值减去operand2寄存器的值,结果保存到Rd寄存器中
        SUB{cond}{S} Rd,Rn,operand2

      3.6 RSB 逆向减法指令
        operand2寄存器的值减去Rn寄存器的值,结果保存到Rd寄存器中

      3.7 SBC 带进位的减法
        Rn寄存器的值减去operand2寄存器的值,再减去CPSR寄存器的C标志位的值,最后将结果保存到Rd寄存器
        SBC{cond}{S} Rd,Rn,operand2

      3.8 RSC 带进位逆向减法指令
        用operand2寄存器的值减去Rn寄存器的值,再减去CPSR寄存器的C标志位的值,最后将结果保存到Rd寄存器
        RSC{cond}{S} Rd,Rn,operand2

      3.9 MUL  32位乘法指令
        将Rm寄存器与Rn寄存器的值相乘,结果的低32位保存到Rd寄存器中
        MUL{cond}{S} Rd,Rm,Rn

      3.10 MLS
        将Rm寄存器的值和Rn寄存器中的值相乘,然后再从Ra寄存器中的值减去乘积,最后将所得结果的低32位存入Rd寄存器
        MLS{cond}{S} Rd,Rm,Rn,Ra

      3.11 MLA
        将rm寄存器的值和rn寄存器中的值相乘,然后再将乘积与Ra寄存器中的值相加,最后将所得结果的低32位存入Rd寄存器
        MLA{cond}{S} Rd,Rm,Rn,Ra

      3.12 UMULL 无符号64位乘法指令
        将Rm寄存器和Rn寄存器的值作为无符号数相乘,然后将结果的低32位存入RdLo寄存器,高32位存入RdHi寄存器
        UMULL{cond}{S} RdLo,RdHi,Rm,Rn

      3.13 UMLAL
        将指令Rm寄存器与Rn寄存器作为无符号数相乘,然后将64位的结果与RdHi,RdLo组成的64位数相加,结果的低32位存入
        RdLo寄存器,高32位存入RdHi寄存器
        UMLAL{cond}{S} RdLo,RdHi,Rm,Rn

      3.14 SMULL 有符号的64位乘法指令
        将Rm寄存器和Rn寄存器的值作为有符号数相乘,然后将结果的低32位存如RdLo寄存器,高32位存存入RdHi寄存器
        SMULL{cond}{S} RdLo,RdHi,Rm,Rn

      3.15 SMLAL 
        将Rm寄存器和Rn寄存器的值作为有符号数相乘,然后将64位的结果与RdHi,RdLo组成的64位数相加,结果的低32位存入
        RdLo寄存器,高32位存入RdHi寄存器

      3.16 SMLAD
        将Rm寄存器的低半字和Rn寄存器的低半字相乘,然后将Rm寄存器的高半字和Rn寄存器的高半字相乘,最后将两个乘积
        与Ra寄存器的值相加并存入Rd寄存器
        SMLAD {cond}{S} Rd,Rm,Rn,Ra

      3.17 SMLSD
        将Rm寄存器的低半字和Rn寄存器的低半字相乘,然后将Rm寄存器的高半字和Rn寄存器的高半字相乘,接着使用第一个乘积
        减去第二个乘积,最后将所得的差值与Ra寄存器的值相加并存入Rd寄存器
        SMLSD{cond}{S} Rd,Rm,Rn,Ra

      3.18 SDIV 有符号数除法指令
        SDIV{cond} Rd,Rm,Rn

      3.19 UDIV 无符号数除法指令
        UDIV{cond} Rd,Rm,Rn

      3.20 ASR 算术右移指令
        将Rm寄存器算术右移operand2位,并使用符号位填充空位,移位结果保存到Rd寄存器
        ASR{cond}{S} Rd,Rm,operand2

      3.21 AND 逻辑与指令
        AND{cond}{S} Rd,Rn,operand2

      3.20 ORR 逻辑或指令
        ORR{cond}{S} Rd,Rn,operand2

      3.21 EOR 异或指令
        EOR{cond}{S} Rd,Rn,operand2

      3.22 BIC 位清除指令
        将operand2的值取反,然后将结果与Rn寄存器的值相"与",并保存到Rd寄存器中
        BIC{cond}{S} Rd,Rn,operand2

      3.23 LSL 逻辑左移指令
        将Rm寄存器逻辑左移operand2位,并将空位清0,并将结果保存到Rd寄存器中
        LSL{cond}{S} Rd,Rm,operand2

      3.24 LSR 逻辑右移指令
        将Rm寄存器逻辑右移operand2位,并将空位清0,并将结果保存到Rd寄存器中
        LSR{cond}{S} Rd,Rm,operand2

      3.25 ROR 循环右移指令
        将Rm寄存器循环右移operand2位,寄存器右边移出的位移回到左边,位移结果保存到
        Rd寄存器中
        ROR{cond}{S} Rd,Rm,operand2

      3.26 RRX 带扩展的循环右移指令
        将Rm寄存器循环右移1位,寄存器最高位用标志位的值填充,位移结果保存到Rd寄存器中
        RRX{cond}{S} Rd,Rm

      3.27  CMP 比较指令
        使用Rn寄存器减去operand2的值,与SUBS指令功能相同,但CMP指令不保存计算结果,
        仅根据比较结果设置标志位
        CMP{cond} Rn,operand2

      3.29 TST 位测试指令
        将Rn寄存器的值和operand2的值进行"与"运算,这与ADNS指令功能相同,但TST指令不保存
        计算结果,仅根据计算结果设置标志位
        TST{cond} Rn,operand2

      3.30 TEQ
        将Rn寄存器的值和operand2的值进行"异或"运算,这与EORS指令功能相同,但TEQ指
        令不保存计算结果,仅根据计算结果设置标志位

    4. 其它指令
      4.1 SWI 软中断指令
        用于产生软中断,从而实现用户模式到管理模式的切换,immed_24 为24位的中断号,在
        android系统中,系统功能调用为0号中断,使用R7寄存器存放系统调用号,使用R0-R3寄存器
        来传递系统调用的前4个参数,对于大于4个参数的调用,剩余参数采用堆栈来传递
        SWI{cond},immed_24

      4.2 NOP 空操作指令
        仅用于空操作或字节对齐,指令格式只有一个操作码NOP

      4.3 MRS 读状态寄存器指令
        psr的取值可以是CPSR或SPSR
        MRS Rd,psr

      4.4 MSR 写状态寄存器指令
        MSR Rd,psr_fields,operand2
        psr_fields指定传送的区域,它的取值表为

        
        field     含义  
      c 控制域屏蔽字节
      x 扩展域屏蔽字节
      s 状态域屏蔽字节
      f 标志域屏蔽字节
  • 相关阅读:
    微服务架构设计和应用
    Jenkins持续部署
    Jenkins服务器维护
    Jenkins管理插件(备份插件)
    Jenkins安全
    Jenkins分布式构建
    Jenkins报表 代码 指标分析
    Jenkins远程测试
    Jenkins邮件通知
    Jenkins自动化测试
  • 原文地址:https://www.cnblogs.com/trenail/p/5361640.html
Copyright © 2011-2022 走看看