ldr和str指令
ARMv8也是基于指令加載和存儲的架構,即不能直接操作記憶體;
LDR <reg_dst>,<addr> //把存儲器位址的資料加載到目的寄存器中;
STC <reg_src>,<addr> //把原寄存器的值,存儲到記憶體中;
ldr指令尋址1:位址偏移模式
.global ldr_test //申明全局函數
ldr_test:
// 1. ldr位址偏移模式
mov x1, 0x80000
mov x3, 16
/* 讀取0x80000位址的值, 到x0寄存器*/
ldr x0, [x1]
/* 讀取0x80000+8位址的值*/
ldr x2, [x1, #8]
/* 讀取x1+x3位址=0x80000+16的值*/
ldr x4, [x1, x3]
/* 讀取(x1+ x3<<3) =0x80080位址的值*/
ldr x5, [x1, x3, lsl #3]
ret
用qemu+Eclipse單步調試,檢視寄存器值如下
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2csgmTYpVeWdEZxgnMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLiFTYwIWOlFjM2YDMjFTNiFTNiRjM5MGO0AjZ2MmNldzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)