前言
Aarch64过程调用标准(AAPCS64)描述了在ARM 64位体系结构下应用程序二进制接口(ABI)在过程调用中应遵循的调用约束,涉及寄存器使用规则、堆栈布局、函数参数传递以及返回值保存等内容。
函数调用过程
Aarch64架构定义了多种跳转指令,其中函数调用主要使用BL指令,BL指令为分支与链接指令,链接的意思是包含了调用者的地址,以便子函数返回到正确的地址继续执行。与BL指令对应的返回指令是RET。
当调用过程执行BL指令时,处理器执行以下操作:
把当前程序执行的地址(PC寄存器值)加上4,保存到LR(X30寄存器)中;
加载被调用过程的指令地址到PC寄存器;
执行被调用过程。
被调用过程处理完成,调用RET指令返回,处理器执行以下操作:
把LR寄存器保存的返回地址加载到PC寄存器;
恢复调用过程执行。
这里可以和x86处理器的函数调用过程做个简单对比,x86处理器在执行函数调用时,会将返回地址等信息直接存放到堆栈中,然后从堆栈弹出返回地址到PC寄存器,完成函数调用返回;ARM则使用了独立的LR寄存器存储返回地址。
基本程序执行寄存器
ARM 64位处理器中包含了31个64位通用寄存器,依次为r0-r30:在64位上下文中,使用x0-x30的命名引用寄存器;在32位上下文中,则使用w0-w30的命名来使用寄存器。此外,处理器还提供了栈指针寄存器(SP)。对于所有基本程序执行寄存器在过程调用中的作用描述如下表所示:
寄存器名
功能描述
SP
栈指针寄存器,指向当前堆栈的栈
《鋁門窗清潔方法大全》窗溝、紗窗不拆也能輕鬆清理!鋁框清潔劑與五金保養指南-鋁窗知識
关于蚊子的网名大全(收集118个)(120句)