【发布时间】:2022-07-20 01:26:50
【问题描述】:
我目前正在尝试让 Getstring 的汇编 lc3 程序工作,该程序使用 getletter 子例程获取字符串,然后应该在按下输入/换行符后终止/退出子例程。但是当我模拟它时,代码到达 RET 并返回到 ADD R1、R0、#-10 行,而不是退出到 main。我将如何终止循环或让它返回主循环?
【问题讨论】:
-
请不要将代码发布为图片。
我目前正在尝试让 Getstring 的汇编 lc3 程序工作,该程序使用 getletter 子例程获取字符串,然后应该在按下输入/换行符后终止/退出子例程。但是当我模拟它时,代码到达 RET 并返回到 ADD R1、R0、#-10 行,而不是退出到 main。我将如何终止循环或让它返回主循环?
【问题讨论】:
当一个函数调用另一个函数或调用陷阱时,它必须保存其传入的返回地址参数,该参数位于 R7 中,因为该寄存器将重新用于这些操作。
例如,当 A 调用 B 时,它会将 R7 中的返回地址传递给 B。 B 应该使用 A 提供的返回地址返回到正确的调用站点并恢复 A。但是,如果 B 调用 C,那么它还会在 R7 中提供一个返回地址,C 应该使用该返回地址返回 B。因此,如果 B 未能保留来自 A 的传入返回地址,那么调用 C 的工作将破坏该值,并且它与 A 的链接丢失。
【讨论】: