【问题标题】:Code won't stop executing代码不会停止执行
【发布时间】:2017-12-14 00:23:30
【问题描述】:

您好,我的这段代码不会停止执行,我不知道为什么。有什么建议吗?

LEA R1, SOURCE
 LEA R2, DEST
LOOP: LDR R0, R1, #0
 STR R2, R0, #0
 BRz DONE
 ADD R1, R1, #1
 ADD R2, R2, #1
 BRnzp LOOP
DONE: LEA R0, DEST
 TRAP x22 ; PUTS
 TRAP x25 ; HALT
SOURCE .STRINGZ "\"My sources say no\""
DEST .BLKW #20

【问题讨论】:

  • LDR 正在加载单词,您需要字节。请改用LDB/STB。您对商店的操作数也有误。此外,您有一个调试器/模拟器,所以使用它 找出代码损坏的原因。
  • LDB/STB 是 LC3-b 特定的。
  • 是的,添加到我在 LC3 stringz 中的最后一条消息会用字符填充每个单词,所以这不是问题,但就像我说的 LDB/STB 是特定于 LC3-b 的,它与 ISA 略有不同香草LC3

标签: assembly lc3


【解决方案1】:

是的,我强烈建议使用 lc3 模拟器。最好是允许您设置断点并逐步执行指令的一种。

您的问题是您没有将字符写入 DEST。

LDR R0, R1, #0
STR R2, R0, #0

您将字符加载到 R0 中,但随后将 R0 中的值视为地址并将 R2 中的任何内容存储在该地址,这很可能会覆盖陷阱向量表中不好的值(我使用的模拟器会警告这样的东西)。

我想,由于您在使用 PUTS 后没有在 DEST 写入任何字符,因此它会不断重复打印字符,直到您碰巧找到一个可能在您的模拟器中没有出现的 NUL 字符。

解决方法是切换 R2 和 R0 STR R0, R2, 0

【讨论】:

    最近更新 更多