ARM64 汇编指令基础

2021-04-08  本文已影响0人  七维树

大端小端

寄存器

基础指令

指令 作用
mov x0 x1 把x0的数据放入到x1
add x0 #2 x1 2 + x1内到数据存入到x0
ldr x0 sp 加载内存数据到寄存器中
str sp x1 把sp中的值存入到x1寄存器
adrp x0,1 把pc寄存器地址低12位清0,加上一个便宜值0x fab给到寄存器
bl sp 跳转到某个label,并把下一条指令存入lr(x30)寄存器中
b 无返回值跳转
adds 改变状态寄存器nzcv
b.ne 条件跳转eq/ne/lt/gt/lt/gt
ret 返回
cmp 比较两个值一般后面跟b跳转指令,比较的结果在状态寄存器查看,其核心是做减法
ldrsw x8 [ x9, x10, lsl #2] x10左移2位 + x9的值 给到 x8
lsl/asl 逻辑/算数左移
lsr/asr 逻辑/算数右移

简写

sub sp,sp,#0x10
stp x0,x1,[sp]

stp x0,x1,[sp,#-0x10]! -> sp = sp + #-0x10 -> ++sp用前+
ldr x0,[sp],#0x4 -> sp = sp + #0x4 -> sp++ 用后+

ldr/str 用于正数
ldur/stur 用于负数
ldp/stp 操作两个寄存器

函数

Switch

声明和定义

.text :代码段
.global a,b : 定义两个全局变量

内存分区

常用命令

//OC文件转汇编
scrub --sdk phones clang -S -arch arm64 main.c -o main.s

//lldb
register read x0 -> 读取x0寄存器的值
register write pc 0xf123 -> 把值写入pc寄存器
上一篇下一篇

猜你喜欢

热点阅读