嗨,我有这个代码不会停止执行我不知道为什么。有什么建议吗?
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
答案 0 :(得分:1)
是的,我强烈建议使用lc3模拟器。最好允许您设置断点并逐步执行指令。
您的问题是您没有将字符写入DEST。
LDR R0, R1, #0
STR R2, R0, #0
您将字符加载到R0中,但是然后将R0中的值视为地址并存储该地址中R2中的任何内容,这很可能会覆盖陷阱向量表中的值,该值不是好(我工作的模拟器会警告这样的东西)。
我想,因为你在使用PUTS时没有在DEST写任何字符,所以它会反复打印出字符,直到你碰巧找到一个可能在你的模拟器中没有发生的NUL字符。 / p>
修复方法是切换R2和R0 STR R0, R2, 0