ARM 汇编指令学习:[1]ARM指令寻址方式

2017-01-12  本文已影响0人  techping

ARM 汇编指令学习:[1]ARM指令寻址方式


一、数据处理指令的操作数的寻址方式

<opcode>{<cond>}{S} <Rd>,<Rn>,<shifter_operand>

<shifter_operand>通常具有下面3种格式:

1、 立即数方式

    MOV R0, #0xFC0

2、 寄存器方式

    MOV R0, R1

3、 寄存器位移方式

    MOV R0, R0, LSL #n  ;R0=R0<<n

    MOV R0, R0, LSL R2  ;R0=R0<<R2

    MOV R0, R0, LSR #n  ;R0=R0>>n

    MOV R0, R0, LSR R2  ;R0=R0>>R2

    MOV R0, R0, ASR #n

    MOV R0, R0, ASR R2

    MOV R0, R0, ROR #n

    MOV R0, R0, ROR R1

    MOV R0, R0, RRX

二、字及无符号字节的Load/Store指令的寻址方式

1、 立即数方式


2、 寄存器方式


3、 寄存器及一个移位常数方式

每组第2个为事先访问,第3个为事后访问。


三、杂类Load/Store指令的寻址方式

操作数为半字(无符号数或者带符号数)数据的Load/Store指令;操作数为带符号的字节数据的Load指令;双字的Load/Store指令。

这类指令的语法格式为:

    LDR|STR{<cond>}H|SH|SB|B <Rd>, <addressing_mode>

其中,<addressing_mode>是指令中的内存单元的寻址方式,具体有以下6种形式:


STR与此上类似。


四、批量Load/Store指令的寻址方式

一条批量Load/Store指令可以实现在一组寄存器和一块连续的内存单元之间传输数据。

这类指令的语法格式为:

    LDM|STM{<cond>}<addressing_mode> <Rn>{!}, <registers>{^}

其中,<addressing_mode>表示地址的变化方式,具体有以下4种形式:

    LDMIA R0, {R5-R8} ;  将内存单元(R0)到(R0+12)4个字的数据读取到R5~R8的4个寄存器中
    LDMIB R0, {R5-R8} ;  将内存单元(R0+4)到(R0+16)4个字的数据读取到R5~R8的4个寄存器中
    LDMDA R0, {R5-R8} ;  将内存单元(R0-12)到(R0)4个字的数据读取到R5~R8的4个寄存器中
    LDMDB R0, {R5-R8} ;  将内存单元(R0-16)到(R0-4)4个字的数据读取到R5~R8的4个寄存器中

对应于栈操作的寻址方式

根据栈指针的指向:

  1. 栈指针指向栈顶元素(即最后一个入栈的数据元素)时称为FULL栈
  2. 栈指针指向与栈顶元素相邻的一个可用数据单元时称为EMPTY栈

根据数据栈的增长方向:

  1. 当数据栈向内存地址减少的方向增长时,称为DESCENDING栈
  2. 当数据栈向内存地址增加的方向增长时,称为ASCENDING栈

五、协处理器Load/Store指令的寻址方式

一条协处理器Load/Store指令可以实现在ARM处理器和协处理器之间传输数据。

这类指令的语法格式为:

    <opcode>{<cond>}{L} <coproc>, <CRd>, <addressing_mode>

其中,<addressing_mode>表示地址的变化方式,具体有以下4种形式:


参考自《ARM体系架构与编程》杜春雷


上一篇 下一篇

猜你喜欢

热点阅读