经常会看到xcode 返回变里面出现 stur 和 ldur之类的指令,网上资料不太多,今天做一下总结:
str 和 stur 存储指令
这是一对 存储指令,作用是把寄存器里的内容存储到右边地址中:用法格式如下:
str 寄存器,[内存地址]
stur 寄存器,[内存地址]
例如下面汇编代码
str w11, [x10, #0xa0]
stur w12, [x29, #-0x18]
从功能出发,这2条指令一般对应,存储数值,例如给变量赋值:
int a = 3;
c++中的一个局部变量的赋值对应下面汇编代码:
mov w12, #0x3
stur w12, [x29, #-0x18]
mov 先把3 赋值给寄存器w12,然后 stur存储指令把w12 寄存器里的内容写入内存地址 x29, #-0x18 里.
再看全局变量 int g_a = 0;
g_a = 10;
mov w11, #0xa
str w11, [x10, #0xa0]
mov 先把10=16进制0xa赋值给了 w11
str存储指令把w11里的内容写入 内存地址 x10, #0xa0 里面.
ldr 和 ldur 读取指令
接着上面的代码
int c1 = g_a;
因为上面 g_a 的内容已经被 str写入到地址:x10, #0xa0中,
下面 要把 g_a里的值赋值给c1,需要下面指令:
ldr w12, [x10, #0xa0]
stur w12, [x29, #-0x14]
ldr 把内存 x10, #0xa0 里的内容读到 w12中,
stur 把w12中的内容写入 x29, #-0x14 内存中, x29, #-0x14就是 变量c1的地址
ldur 跟ldr作用一样,都是读取就,只不过使用寄存器不同