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

时间:2016-05-08 05:07:21

标签: lc3

这是我到目前为止所做的:

.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个字符,然后将其打印出来,但是当我尝试打印输入后,它只会在输入字符串后输出一些奇怪的框" \ n您输入的文字是: "得到印刷。

我认为它可能与我有意无意地清理我的EnterString? R0?

我接近排序吗?

我想要截屏,但我不能,因为我的排名过低。

1 个答案:

答案 0 :(得分:1)

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

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. 增加地址,使您仍然指向空位
  4. 要再次打印出来,请加载内存空间的有效地址并调用PUTS,就像使用欢迎字符串一样。