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
本课练习
先独立作答再提交;编程题会在隔离沙箱中真实编译、运行并对拍。
本课练习正在补齐,暂不应标记为完成。