我有一个基本循环,要求用户输入一个值,然后将其打印到屏幕上。当用户点击进入时,程序停止循环。我还想将其他输入保存到内存块中供以后使用。根据我的简单理解,我认为我只将值存储在第一个内存插槽中,并且每次用户输入值时都会覆盖该内存插槽。如何遍历内存块?
由于
.ORIG x3000
LEA R0, memSpace
LOOP GETC
ADD R3, R0, #-13
BRz DONE
OUT
STR R2, R0, #0
ADD R2, R2, #1
ADD R1, R1, #-1
BRnzp LOOP
memSpace .BLKW 30
LEA R3, memSpace
PUTS
DONE HALT
.END
答案 0 :(得分:1)
好的,我们这里有一些问题......
memSpace .BLKW 30
应 HALT
之后的,以避免覆盖该指令。GETC
将该字符复制到R0
,因此您丢失了memSpace
个注册表。将数组指针放在R2
中;您已根据需要增加R2
。STR R0, R2, #0
。ADD R1, R1, #-1
没有任何用处。还有一些值得解决的问题。而不是使用BRnzp LOOP
,无条件地使用BR LOOP
分支。此外,分支和暂停之间的LEA
和PUTS
指令无法访问;我假设你把它们放在那里用于调试目的。虽然您可能打算将memSpace的内容写入控制台显示,但PUTS
不一定会这样做。它将终止于一个空间(或者,也许,永远不会)。无论如何,在LEA R0, memSpace1
之前您需要PUTS
。
修正版:
.ORIG x3000
LEA R2, memSpace
LOOP GETC
ADD R3, R0, #-10
BRz DONE
OUT
STR R0, R2, #0
ADD R2, R2, #1
BRnzp LOOP
DONE HALT
memSpace .BLKW 30
.END