第1-4个参数分别保存在x0-x7,剩下的从右向左依次入栈,被调用者实现栈平衡,返回值在x0
通用寄存器,64位,也可以当作32位(w0-w30)使用
x30,储存返回地址
指向即将执行的下一条指令,arm64中不能直接改写pc寄存器
状态寄存器
arm64中取消32位的ldm,sdm,push,pop
arm64对栈的操作16字节对齐
add x0,x1,x2 ;x1和x2的值相加后赋给x0
sub x0,x1,x2 ;x1和x2的值相减后赋给x0
and x0,x0,#0xF ;x0的值与0xF相位与后的值赋给x0
orr x0,x0,#0xF ;x0的值与0xF相位或后的值赋给x0
eor x0,x0,#0xF ;x0的值与0xF相异或后的值赋给x0
和x86的mov差不多一个意思
mov x0,#0x0 ;x0=0
str(store register)
把寄存器的数据写到某个地址
stp同时操作两个寄存器
stp x0,x1,[sp,#0x10] ;将x0,x1写入sp+0x10
ldr(load register)
把某个地址的数据写到寄存器
ldp同时操作两个寄存器
ldp x1,x0,[sp,#0x10] ;从sp+0x10指向的数据写入寄存器x1,x0
ldr x0,[x1] ;将x1指向的数据写入寄存器x0
ldr x0,[x1,x2] ;将x1+x2指向的数据写入寄存器x0
ldr x0,[x1,#8] ;将x1+8指向的数据写入寄存器x0
ldr x0,[x1,x2] ! ;将x1+x2指向的数据写入寄存器x0,并将新地址x1+x2写入x1
ldr x0,[x1,#8] ! ;将x1+8指向的数据写入寄存器x0,并将新地址x1+8写入x1
ldr x0,[x1],x2 ;将x1指向的数据写入寄存器x0,并将新地址x1+x2写入x1
ldr x0,[x1,x2,LSL#2] ! ;将x1+x2×4指向的数据写入寄存器x0,并将新地址x1+x2×4写入x1
ldr x0,[x1],x2,LSL#2 ;将x1指向的数据写入寄存器x0,并将新地址x1+x2×4写入x1
bl
l:将下一条指令的地址放入lr寄存器
b:跳转
blr
lr:从寄存器中取得地址放入lr寄存器
b:跳转
blr x0
ret
lr的值赋给pc
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议(CC BY-NC-ND 4.0)进行许可。
This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License (CC BY-NC-ND 4.0).