这是我到目前为止所做的:
.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?
我接近排序吗?
我想要截屏,但我不能,因为我的排名过低。
答案 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
,其中包含您要存储的字符数(加上空字符的空间),然后您需要:
BLKW
的地址加载到注册表STR
)要再次打印出来,请加载内存空间的有效地址并调用PUTS
,就像使用欢迎字符串一样。