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

    1.寻址方式:处理器根据指令中给出的地址信息来寻找物理地址的方式

    2.立即数寻址(立即寻址):操作数本身就在指令中给出,只要取出指令就取到了操作数。
    这个操作数被称为立即数,对应的寻址方式叫做立即寻址。
    ADD R0, R0, #1;  R0 + 1 --> R0
    ADD R0, R0, #0x3f;  R0 + 0x3f --> R0

    1)第二个源操作数即为立即数,要求以#为前缀
    2)十六进制表示的操作数,要求在#后面添加0x或者&

    3.寄存器寻址
    利用寄存器中的数值为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是执行效率比较高的寻址方式。
    ADD R0, R1, R2; R1 + R2--> R0
    寄存器R1和R2中的内容相加,放到寄存器R0中。


    4.寄存器间接寻址

    寄存器中的值为操作数的地址,而操作数本身在寄存器中。
    ADD R0, R1, [R2]; R1 + [R2]--> R0
    寄存器R2的值为操作数的地址,在存储器中取得一个操作数后与R1相加,结果存入寄存器R0中。
    LDR R0, [R1]; [R1]--> R0
    以R1的值为地址的存储器中的数据传送到R0中。

    5.基址变值寻址
    将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。
    LDR R0, [R1, #4];    [R1 + 4] -->R0
    LDR R0, [R1, #4]!;    [R1 + 4] -->R0、R1 + 4 --> R1
    LDR R0, [R1], #4;    [R1] -->R0、R1 + 4 --> R1
    LDR R0, [R1, R2];    [R1 + R2] -->R0


    6.多寄存器寻址
    一条指令可以完成多个寄存器值的传送。这寻址方式可以用一条指令完成传送最多16个通用寄存器的值。
    LDMIA R0,, {R1, R2, R3, R4};
    [R0] -- > R1
    [R0 + 4] -- > R2
    [R0 + 8] -- > R3
    [R0 + 12] -- > R4
    该指令的后缀IA表示在每次执行完加载/存储操作后,R0按字长度增加,因此,指令可以将连续存储单元的值传送到R1~R4

    7.相对寻址
    以程序计数器PC的当前值为基地址,指令中的地址标号为偏移量,将两者相加之后得到操作数的有效地址。
    以下程序段完成子程序的调用和返回,跳转指令BL采用了相对寻址方式:
    BL    NEXT;        跳转到子程序NEXT处执行
    ....
    NEXT
    ....
    MOV PC, LR;        从子程序返回

    8.堆栈寻址
    堆栈是一种数据结构,按照先进后出的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。

    递增堆栈:向高地址方向生长
    递减堆栈:向低地址方向生长

    满堆栈:堆栈指针指向最后压入堆栈的有效数据项
    空堆栈:堆栈指针指向下一个要放入数据的  空位置

  • 相关阅读:
    【c++算法】移除性算法
    【c++容器】标准库与boost库中一些容器的介绍
    【Marva Collins' Way】第十章
    pc后时代的vs2012
    【行业关注】决策
    .net控件
    Silverlight 全屏显示
    ImageError error #4001 in control 'Xaml1': AG_E_NETWORK_ERROR 异常
    Silverlight跨域,Silverlight在IIS中部署等问题解决之道
    演练:使用 Expression Blend 或代码创建 Silverlight 时钟
  • 原文地址:https://www.cnblogs.com/liulipeng/p/3024055.html
Copyright © 2011-2022 走看看