代码不会停止执行
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
您好,我的这段代码不会停止执行,我不知道为什么。有什么建议吗?
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