代码不会停止执行

Code won't stop executing

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

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

是的,我强烈建议使用 lc3 模拟器。最好是一个允许您设置断点和单步执行指令的程序。

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

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

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

我想因为您在使用 PUTS 时没有在 DEST 写入任何字符,所以它会不断重复打印出字符,直到您碰巧找到一个 NUL 字符,这可能不会在您的模拟器中发生。

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