上篇文章:ARM 常见汇编指令学习 6 - bic(位清除), orr(位或), eor(异或)
下篇文章:ARM 常见汇编指令学习 8 - dsb sy 指令及 dsb 参数介绍
LDR指令 与 LDR伪指令 两者虽然名字相同但是作用却不相同,区分两者的方法就是看第二个参数,如果有等号,就是LDR伪指令。
LDR 指令
ldr r0, 0x80000000
上面语句的作用是将地址0x80000000
中的内容赋值给 r0
寄存器,需要注意的是不能使用mov
指令来做这个事情,因为mov
指令只能将数据在寄存器之间移动,或者把立即数移动到寄存器中:
mov r1, #0
mov r0, r1
LDR伪指令
ldr x7, =0x18bc0100
mov x8, xzr
ldr w9, =0xffffff00
ldr w8, [x7, #0x3c]
and w8, w8, w9
str w8, [x7, #0x3c]
dsb sy
isb
如上面arm汇编代码是将地址 0x18bc010
写入到 x7
寄存器中,将数据0xffffff00
写入到 w9
(x9 32bit形式)中。
LDR伪指令与MOV区别
mov
指令限制了立即数的长度为8
位,立即数范围是0-255
,而ldr
伪指令没有这个限制,如果使用ldr
伪指令后面的立即数没有超过8
位,那么汇编将会使用mov指令去替换LDR伪指令。
mov 后面的立即数可以进行位移操作,位移的位数范围是0-30
,步长为2,所以实际上可以表示的立即数范围更大。例如,文章来源:https://www.toymoban.com/news/detail-621492.html
ldr x0, =0x16002020
mov x1, #0
orr x1, x1, #(1 << 22)
str x1, [x0]
上篇文章:ARM 常见汇编指令学习 6 - bic(位清除), orr(位或), eor(异或)
下篇文章:ARM 常见汇编指令学习 8 - dsb sy 指令及 dsb 参数介绍文章来源地址https://www.toymoban.com/news/detail-621492.html
到了这里,关于【ARM 常见汇编指令学习 7 - LDR 指令与LDR伪指令及 mov指令】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!