ARM的寻址方式

    xiaoxiao2023-03-24  3

    寻址方式是根据指令中给出的地址码字段来寻找真实操作数地址的方式。 对Cortex-A8处理器支持的基本寻址方式有以下几种。

    1.寄存器寻址

    所需要的值在寄存器中,指令中地址码给出的是寄存器编码,即寄存器的内容为操作数。

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

    2.立即寻址

    立即寻址的指令中在操作码字段后面的地址码部分不是操作数地址,而是操作数本身。

    SUBS R0,R0,#1; R0-1->R0

    3.寄存器移位寻址

    该寻址方式是ARM指令集中所特有的,第二个寄存器操作数在与第一个操作数结合之前,选择进行移位操作。

    LSL。逻辑左移,空位补0 LSR。逻辑右移,空位补0 ASR。算术右移,保证符号不变 ROR。循环右移,移出位补空位 RRX。扩展为1的循环右移,操作数右移1位,空位用原C标志位填充

    ANDS R1,R1,R2,LSL R3; (R2<<3)&R1-->R1

    4.寄存器间接寻址

    指令中的地址给出某一通用寄存器的编号,在被指定的寄存器中存放操作数的有效地址,而操作数则存放在该地址对应的存储单元。

    LDR R1,[R2];将R2中数值作为地址,取出该地址中的数据保存在R1中。

    5.变址寻址

    将基址寄存器的内容与指令中给出的偏移量相加,形成操作数有效地址。

    LDR R2,[R3, #0X0F];将R3的数值加到0x0F作为地址,取出此地址的数值保存在R2中

    6.多寄存器寻址

    一次可以传送多个寄存器的值,允许一条指令传送16个寄存器的任何子集。

    LDMIA R1!,{R2-R7,R12};将R1所读到的数据放到R2-R7R12R1自动更新

    7. 堆栈寻址

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

    有以下四种情况

    满递增:先移位,再压入.LDMFA , STMFA 空递增:先压入,再移位.LDMEA , STMEA 满递减:先移位,再压出.LDMFD , STMFD 空递减:先压出,再移位.LDMED , STMED

    8.块拷贝寻址

    多寄存器传送指令用于把一块数据从存储器的某一位置复制到另一位置

    9.相对寻址

    即子程序调用指令

    BEQ LOOP;条件跳转到LOOP标号处
    转载请注明原文地址: https://ju.6miu.com/read-1201419.html
    最新回复(0)