zoukankan      html  css  js  c++  java
  • ARM寻址

    ARM几种寻址方式

    立即数寻址

    寄存器寻址

    寄存器间接寻址

    基址寻址

    相对寻址

    堆栈寻址

    块拷贝寻址

     

     

    • 立即数寻址

    1 SUBS  R0,R0,#1   ;R0 =R0 -1 ,结果放入R0(第一个R0寄存器)
    2 
    3 MOV  R0,#0xFF    ;R0 立即数0xFF装入R0

        立即数寻址,把立即数直接编码到opcode(指令编码当中),在可能有

     

    • 寄存器寻址

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

      

      操作的是寄存器中的数据,可能会用在一些变量之间的中间运算过程。

    • 寄存器间接寻址

    LDR    R0, [R1]        ;R0 <-- mem32[R1]
    
    STR    R0, [R1]        ;mem32[R1] <-- R0

      

      ARM的数据传送指令都是基于这种方式的,通过Load、Store 完成对(内存)数据的存取,全局变量的存取。

    • 基址寻址

    LDR    R2, [R3, #0x0C]        ;R2 <-- mem32[R3+0x0C]
    
    STR     R1, [R0,#-2]             ;R1 --> mem32[R0 - 2]
    
    LDR    R1, [R0, R3, LSL #1]  ;R1 <-- mem32[R0 + R3*2]
    
    ;前索引寻址----------------------------------------------------------------
    
    LDR    R0, [R1, #4]               ;R0 <-- mem32[R1+4]
    
    LDR    R0, [R1, #4]!              ;R0 <-- mem32[R1+4] ,R1 =R1 +4
                                                ; ! 表示在完成数据传送后将更新基址寄存器
    ;后索引寻址----------------------------------------------------------------
                                            
    LDR    R0, [R1], #4                ;R0 <-- [R1], R1 = R1+4            

      像对数组的寻址应该就是这种的了吧

    • 相对寻址

      

    BL    SUBR1            ;跳转到其他位置的时候使用
    ;--------------------------------------------------------
    
    BEQ    LOOP            ;跳转到标号也是这种方式

      

      这种寻址方式和x86里面的E8,E9是差不多的,使用的是偏移量作为跳转的位置。猜想是不是会对当前PC加上一个相对偏移然后跳转这种的。

    • 堆栈寻址

    STMFD   SP!,{R1-R7, LR}    ;寄存器R1到R7,LR都入栈
    
    LDMFD   SP!,{R1-R7,LR}     ;寄存器R1到R7,LR都出栈

     

     R13 即是SP指针

    • 堆栈寻址

    ; IA 存后加    IB 存前加    DA 存后减 DB 存前减
    
    STMIA    R9!, {R0, R1, R5}
    
    ;第一步 mem32[R9] <-- R0, R9 = R9 +4
    
    ;第一步 mem32[R9] <-- R0,  R9 = R9 +4
    
    ;第一步 mem32[R9] <-- R0,  R9 = R9 +4
  • 相关阅读:
    Putting Apache Kafka To Use: A Practical Guide to Building a Stream Data Platform-part 2
    Putting Apache Kafka To Use: A Practical Guide to Building a Stream Data Platform-part 1
    Apache Kafka之设计
    分布式内存文件系统Tachyon
    Tachyon:Spark生态系统中的分布式内存文件系统
    Python垃圾回收机制
    一行 Python 实现并行化 -- 日常多线程操作的新思路
    Hive SQL的编译过程
    vim调整粘贴时的文本缩进
    linux img文件 分区挂载
  • 原文地址:https://www.cnblogs.com/Lnju/p/4376349.html
Copyright © 2011-2022 走看看