LC3 如何将用户输入打印到屏幕上?

LC3 how do I print user input to screen?

这是我目前拥有的:

.orig x3000

Lea r0, EnterString             
puts                    
LOOP                    
getc                    

add r1, r0, -10         ;subtract 10 to identified if enter is pressed
brz OUTSIDE             ;if yes, go out of the loop

out                 
brnzp LOOP              

OUTSIDE                 
Lea r1, InputString
puts

Lea r0, EnterString
out
Halt                    

EnterString .stringz "Please enter a string: "
InputString .stringz "\nThe text you have typed is: "

.end

我试图让用户输入最多 99 个字符,然后将其打印出来,但是当我尝试打印输入的内容后,它只是在 InputString“\n您输入的文本是:”之后打印了一些奇怪的框被打印出来。

我认为这与我有关,也许不小心清除了我的 EnterString? r0?

我快要整理了吗?

我想放个截图,但是我的排名太低了。

您的一般方法不正确。这是您现在拥有的:

Print out welcome string
Get character
If character is a newline, exit loop, otherwise get another character
Print out "your string is"
Output (incorrectly) welcome string again.

所有PUTS所做的就是获取存储在r0中的有效地址并打印其中的每个字符,一次一个,直到它到达'\0'字符。 GETC 所做的只是获取单个字符并将其存储到 r0 中。它不创建堆栈或字符串,也不能存储多个字符。

为了从控制台存储一个字符串,您需要定义一个地方来放置它并实际将它放在那里。您需要创建一个 BLKW,其中包含您要存储的字符数(加上空字符的空间),然后您需要:

  1. 将此 BLKW 的地址加载到寄存器中
  2. 将字符从 r0 移动到此地址(提示:使用 STR
  3. 增加地址,这样你仍然指向一个空位置

为了再次打印出来,加载内存的有效地址 space 并调用 PUTS,就像您对欢迎字符串所做的那样。