04_ARM64常用指令 - 图1

ARM指令所有指令都是带有条件的,默认是AL即无条件执行,当指令带有默认条件时不需要明确写出。ARM指令包含4位的条件码列表如下:

04_ARM64常用指令 - 图2

这里对ARM64下的栈操作指令进行补充说明:
由于在ARM64下,对于栈的操作都是要16个字节对齐的,所以都是双寄存器读写操作。

stp 写入指令

将数据从两个寄存器中读出来, 写入到栈中

ldp 读取指令

将数据从栈中读取出来, 存到两个寄存器中

;//汇编代码--堆栈操作练习
;//使用32字节空间作为这段程序的栈空间, 然后利用栈将x0, x1的值进行交换

sub sp, sp, #0x20 ; 拉伸栈空间32(20 = 2*16)个字节
stp x0 , x1, [sp, #0x10] ; sp往上加16(10 = 1 * 16)个字节,存放x0 和 x1
ldp x1 , x0, [sp, #0x10] ; 将sp偏移16个字节的值取出来,放入x1 和 x0

//注意: 拉伸栈空间是往低地址拉伸, 拉伸的字节数只能是16的倍数, 否则会崩溃(对照上面 16字节对齐理解 )
//第二,三句代码: sp指向的地址不会变, 只是将x0, x1的值从相应地址存入或读取.