调用机制
栈顶指针:%rsp
向着小地址增长(从上往下)
栈的指令:
-
pushq Src:
- 从Src取得指令
- 增加 %rsp 8
- write operand at address (%rsp)
-
popq Dest
- 同理
例子:
第一步:callq
- 将**%rip**的值改编为调用程序的IP
- 将原程序下一条指令入栈
第二步:Passing Data
栈的结构:%rbp和**%rsp**的位置
%rdi和**%rsi**前两个调用参数
寄存器保存Convention:
哪些是caller保存,哪些是callee保存
参数位置的转换
callee-Saved例子:将x交给rbx,让被调用程序保存
循环调用的代码:
!!!
Fb-1652263825371)]
循环调用的代码:
[外链图片转存中…(img-0BX5ZsJA-1652263825372)]
!!!