2017-08-09 83 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