• ARM传输数据以及移位操作


    3.2.2 数据传送指令

        LDR/STR指令用来在寄存器和内存之间输送数据。如果我们想要在寄存器之间传送数据,则可以使用MOV指令。MOV指令的格式如下。

    MOV {cond} {s}Rd, oprand2

    MOV {cond} {s}Rd, oprand2

     其中,{cond}为条件指令可选项,{s}用来表示是否影响CPSR寄存器的纸,如MOVS指令就会影响寄存器CPSR的值,而MOV则不会,MVN指令用来将操作数operand2 按位取反后传送到目标寄存器Rd, 操作数operand2 可以是一个立即数,也可以是一个寄存器。

    MOV和MVN指令的一般使用方法如下。

    MOV R1, #1

    MOV R1, R0

    MOV PC, LR

    MVN R0, #0xff

    MVN R0, R1

     算术运算指令包括基本的加减乘除,逻辑运算指令包括与或非异或消除等,指令格式如下。

    AOD {cond} {S} Rd, Rn operand2, 

    ADC {cond} {S}Rd, Rn, operand2

    SUB {cond} {S}Rd, Rn, operand2

    AND {cond} {S}Rd, Rn, operand2

    ORR {cond} {S}Rd,Rn, operand2

    EOR  {cond} {S}Rd,Rn, operand2

    BIC  {cond} {S}Rd,Rn, operand2

    算数逻辑运算指令的基本使用方法以及说明如下

    ADD R2,R1, #1

    ADC R1,R1,#1

    SUB R1, R1, R2

    SBC R1, R1, R2

    AND R0, R0, #3

    ORR R0, R0, #3

    EOR R0, R0, #3

    BIC R0, R0, #3

    3.2.4 操作数,operand2详解

       ARM指令的可选项很多,操作数也很灵活,很多ARM指令会使用第二个参数operand2, 可以是一个常数,也可以是寄存器 + 偏移的形式,操作数operand2 在汇编程序中经常出现的两种格式如下。

    #contant

       第一种格式比较简单,操作室是一个立即数,第二种格式可以直接使用寄存器的值作为操作数。在3.2.3 节中的ADD, SUB, AND指令示例种,第二个操作数要么是一个常数,那么是一个寄存器,在第二种格式中, 通过{shift}可选性,我们还可以通过多种移位或者循环移位的方式。构建更加灵活的操作数,可以选择的移位方式如下。

    #constant 将立即数constant 循环右移n位

    ASR 算数右移n位,n的取值范围

    LSL 逻辑左移n位,n的取值范围{1,32}

    ROR 向右循环移动n位,n取值范围{1,31}

    RRX 向右循环移动1位 带扩展

    type Rs 仅仅在ARM中可用,,其中type指ASP, LSL, LSR, RCR, Rs 是提供移位数据的指令

  • 相关阅读:
    Webpack 和 Vite 的区别
    踩坑笔记 NFS坑-2个pod读写文件延迟问题
    bean的生命周期
    阿里云SLB之:基于URL调度场景的SLB七层负载均衡配置(十三)
    flinkcdc监控sqlserver,数据库的表中该字段是空值,而cdc中该字段的值是'N,不一致
    人工智能数学课高等数学线性微积分数学教程笔记(目录)
    Flink 物理执行图
    Weblogic SSRF 漏洞(CVE-2014-4210)分析
    微信小程序:uniapp解决上传小程序体积过大的问题
    Java Collections singletonList()方法具有什么功能呢?
  • 原文地址:https://blog.csdn.net/fantasy_ARM9/article/details/134173878