ARM杂项伪指令

来源:互联网 发布:mac口红dare you和d 编辑:程序博客网 时间:2024/06/10 19:35

1. ADR伪指令:小范围的地址读取伪指令。

ADR指令将基于PC相对偏移的地址值读取到寄存器中。在汇编编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能。

 指令格式:ADR{cond} register ,expr

    Register  加载的寄存器

    Expr 程序相对偏移或寄存器相对偏移的表达式

    非字对齐地址在-255~255字节范围内;

     字对齐地址在-1020~1020字节范围内。

   举例:

      Start   MOV  R1,#10

            ADR   R4,start   ;相当于PC-10后赋值给R4


2. ADRL指令:中等范围的地址读取伪指令。

ADRL指令将基于PC相对偏移的地址值或基于相对偏移的地址值读取到寄存器中,比ADR伪指令可读取更大范围的地址。在汇编编译源程序时,ADRL伪指令被编译器替换成两条合适的指令。若不能用两条指令实现ADRL伪指令功能,则产生错误,编译失败。

   其指令格式与ADR相同

   非字对齐地址在64K字节范围内;

   字对齐地址在256K字节范围内。

   举例:

    Start   MOV  R1,#10

           ADR   R4,start+6000   ;=>ADD R4,PC,#0xe800    ADD R4,R4,#0x254


3. LDR指令  大范围的地址读取伪指令

LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器。

在汇编编译源程序时,LDR指令被编译器替换成一条合适的指令,若加载的常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替该LDR伪指令,否则汇编器将常量放入字池(内存),并使用一条程序相对偏移的LDR指令从文字池读出常量。

指令格式:LDR {cond} register , = expr/label_expr

          Expr 32位立即数

          Label_expr 基于PC的地址表达式或外部表达式

举例

         LDR   R0,=0x123987   ;加载32位立即数

         LDR   R0,=DATA_BUF+60 ;加载DATA_BUF地址+60


4. NOP指令

NOP指令产生所需的ARM无操作代码。可以使用指令MOV R0,R0。NOP不能有条件使用。执行和不执行无操作指令是一样的,因而不需要有条件执行。ALU状态不受NOP影响。

0 0
原创粉丝点击