【问题标题】:LC3 Assembly code loop not null terminating?LC3 汇编代码循环不是空终止?
【发布时间】:2022-07-20 01:26:50
【问题描述】:

我目前正在尝试让 Getstring 的汇编 lc3 程序工作,该程序使用 getletter 子例程获取字符串,然后应该在按下输入/换行符后终止/退出子例程。但是当我模拟它时,代码到达 RET 并返回到 ADD R1、R0、#-10 行,而不是退出到 main。我将如何终止循环或让它返回主循环?

GetString code: program that isn't functioning right

GetLetter subroutine

【问题讨论】:

  • 请不要将代码发布为图片。

标签: assembly lc3


【解决方案1】:

当一个函数调用另一个函数或调用陷阱时,它必须保存其传入的返回地址参数,该参数位于 R7 中,因为该寄存器将重新用于这些操作。

例如,当 A 调用 B 时,它会将 R7 中的返回地址传递给 B。 B 应该使用 A 提供的返回地址返回到正确的调用站点并恢复 A。但是,如果 B 调用 C,那么它还会在 R7 中提供一个返回地址,C 应该使用该返回地址返回 B。因此,如果 B 未能保留来自 A 的传入返回地址,那么调用 C 的工作将破坏该值,并且它与 A 的链接丢失。

【讨论】:

    猜你喜欢
    • 2021-12-02
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多