ARM64汇编

一般来说学习汇编可以从寄存器、指令、堆栈 入手,下面我们慢慢学习:

生成汇编文件:

xcrun --sdk iphoneos clang -S -arch arm64 main.c -o main.s

寄存器

1. 通用寄存器:

    64bit􏰋􏰌的:x0 ~ x28

    32bit的:w0 - w28

    x0 - x7通常用来存放函数的参数,更多的参数使用堆栈来传递

    x0通常拿来存放函数的返回值

2. 程序计数器:

    pc (Program Counter)

    记录CPU当前指令的是哪一条指令

    存储着当前CPU正在执行的指令的地址

􏰤􏰥􏰦􏰗􏰈3. 堆栈指针

    sp (Stack Pointer)

    fp (Frame Pointer) ,也就是x29

4. 链接寄存器

    lr (Link Register),也就是x30

    存储着函数的返回地址

5. 程序状态寄存器

  cpsr  (Current Program Status Register)

  spsr  (Saved Program Status Register),异常状态下使用

指令

mov

ret

    ret是函数返回指令

     将lr (x30) 寄存器的值赋给pc寄存器

add

sub

cmp

    cmp是将2个寄存器相减

    相减的结果会影响cpsr寄存器的标志位

b

    b是跳转指令

   可以带条件跳转,一般跟cmp配合使用

bl

    bl是带返回的跳转指令

    执行的操作:将下一条指令的地址存储到lr (x30) 寄存器中,

    跳转到标记处开始执行代码

条件域

    EQ: equal,相等

    NE: not equal , 不相等

    GT: great than, 大于

    GE: great equal,大于等于

    LT: less than,小于

    LE: less equal,小于等于

内存操作

    load,从内存中读取数据

    ldr 、ldur 、dp

    store,往内存中写入数据

    str、stur、stp、零寄存器,里面存储的值是0(wzr、xzr)

函数的堆栈

函数的类型:

    叶子函数

    非叶子函数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容