2017-08-09 75 views
0

我的下面的代码应该只是打印一个提示,但是它会打印一堆y字符。任何想法我做错了什么?LC-3,LDI没有正确的地址?

CODE:

startPrompt .STRINGZ "Enter 'E' to encrpyt, 'D' to decrpyt, X to quit\n" 

startPromptAddress .FILL startPrompt 

LDI R0, startPromptAddress 

PUTS 

回答

0

我想你想LEA,不LDI。

LEA将一个寄存器加载到LABEL的地址(不是它的内容!)。通常与.STRINGZ和PUTS一起使用来打印字符串。

LDI获取存储在LABEL(或偏移量)处的地址,然后获得该地址的值(这是LDI的间接“i”部分)。

下面是完整的代码应该在一个典型的LC3模拟器的工作(我用了一个在lc3tutor.org验证:

---------------这里切 - --------------

那些.orig X3000

startPrompt .STRINGZ “输入 'E' 到encrpyt, 'd' 到decrpyt,X退出\ n”

LEA R0,startPrompt;将地址'startPrompt'加载到R0

PUTS;打印从R0开始的字符并持续到达到空字符(当您使用.STRINGZ指令时,会自动初始化部分内存)。这里

.END

--------------切---------------

希望这有助于

Jeff

+0

是的,帮助,谢谢!我没有正确理解LDI。 – NoviceProgrammer123