跳到正文

4.3.4 Call和ret指令(函数调用的机器级表示)、如何访问栈帧(函数调用的机器级表示)、如何切换栈帧(函数调用的机器级表示)、如何传递参数和返回值(函数调用的机器级表示)

40 分钟

4.3.4 Call和ret指令(函数调用的机器级表示)、如何访问栈帧(函数调用的机器级表示)、如何切换栈帧(函数调用的机器级表示)、如何传递参数和返回值(函数调用的机器级表示)

编码与执行模型

call保存返回地址并跳转,ret取回返回地址。栈帧保存返回地址、旧帧指针、局部量及被调用者保存寄存器;参数/返回值优先走ABI规定寄存器,超出才上栈。

地址和状态推演

栈向低地址增长时push先减SP再写;pop先读再增SP。call后栈顶是返回地址,ret恢复PC。

推演逐步记录PC、SP、寄存器、有效地址EA及发生的内存访问。

错解反馈与迁移

错因认为所有参数都在栈或函数可随意破坏保存寄存器。迁移:递归每层必须拥有独立返回地址和局部状态。

小纸条

递归每层必须拥有独立返回地址和局部状态。

登录 后可看答案

Practice

本课练习

0

先独立作答再提交;编程题会在隔离沙箱中真实编译、运行并对拍。

本课练习正在补齐,暂不应标记为完成。