adr,adrl和ldr指令的用法比较

简介:
ADR

    这是一条小范围的地址读取伪指令,它将基于PC的相对偏移的地址值读到目标寄存器中。

使用的格式:ADR register,exper。

    在编译源程序时,汇编器首先计算出当前PC到exper的偏移值#offset_to_exper,然后会用一条ADD或者

SUB指令来替换这条伪指令,例如:ADD register,PC,#offset_to_exper。

    注意,标号exper与指令必须在同一代码段。

ADRL:
    这是一条中等范围的地址读取伪指令,它将基于PC的相对偏移的地址值读到目标寄存器中

使用的格式:ADRL register,exper。

    在编译源程序时,汇编器会用两条合适的指令来替换这条伪指令。

例如:

             ADD register,PC,offset1

             ADD register,register,offset2 

与ADR相比,它能读取更大范围的地址。

    注意,标号exper与指令必须在同一代码段。
LDR:

第一种情况:

        当LDR用做ARM指令时,它将基于PC的相对偏移地址处存储的值读到目标寄存器中。

        应用格式:LDR register,[expr]

第二种情况:

         当LDR用做ARM伪指令时,它用于大范围的地址读取。

         其实说它用于大范围的读取,还不如说它用于大范围的地址赋值。我们来看一下这条伪指令的应

用格式:LDR register,=expr/label_expr ,显然,我们可以直观的看出,指令的目的就是要将expr或label_expr赋值(=)给register.所以在编译时,当expr或label_expr的值没有超出MOV和MVN的范围时,采用MOV或MVN指令来代替这条伪指令就显得理所当然了。当expr或label_expr的值超出MOV和MVN的范围时,汇编器将expr或label_expr放入文字池中,并使用一条程序相对偏移指令LDR从文字池读出常量。例如:LDR register,[PC,#offset to literal pool]。
目录
相关文章
|
4月前
|
前端开发 应用服务中间件 Linux
Ngnix的events块指令讲解和events指令配置实例
Ngnix的events块指令讲解和events指令配置实例
8086 汇编笔记(九):call 指令 和 ret 指令
8086 汇编笔记(九):call 指令 和 ret 指令
|
6月前
|
程序员
深入理解汇编:平栈、CALL和RET指令详解
深入理解汇编:平栈、CALL和RET指令详解
108 1
|
6月前
|
存储 程序员
【汇编】Loop指令、段前缀
【汇编】Loop指令、段前缀
494 0
【汇编】Loop指令、段前缀
|
6月前
|
存储 程序员 开发者
【汇编】其他转移指令、call指令和ret指令
【汇编】其他转移指令、call指令和ret指令
203 2
|
Linux
nasm简单用法和dd指令解析
nasm简单用法和dd指令解析
265 0
8086汇编中mov,add,sub语法
8086汇编中mov,add,sub语法
237 0
|
缓存 Shell Go
COPY指令详解
COPY指令详解
448 0
|
存储 数据处理 Android开发
【Android 逆向】x86 汇编 ( call 子函数调用指令 | jmp 跳转指令 | lea 加载指令 | mov 数据传送指令 )
【Android 逆向】x86 汇编 ( call 子函数调用指令 | jmp 跳转指令 | lea 加载指令 | mov 数据传送指令 )
237 0
|
Android开发
【Android 逆向】x86 汇编 ( cmp 比较指令 | test 比较指令 )
【Android 逆向】x86 汇编 ( cmp 比较指令 | test 比较指令 )
348 0