LC-3 遍历内存块
LC-3 Iterating Through Memory Block
我有一个基本循环,要求用户输入一个值,然后将其打印到屏幕上。当用户按下回车键时,程序停止循环。我还想将其他输入保存到内存块中以备后用。根据我的简单理解,我认为我只是将值存储在第一个内存槽中,每次用户输入值时我都会覆盖该内存槽。如何遍历内存块?
谢谢
.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
好的,所以我们这里有一些问题...
memSpace .BLKW 30
应该是 在 HALT
之后以避免覆盖指令。
GETC
将字符复制到 R0
,因此您丢失了 memSpace
寄存器。将数组指针放在 R2
中;您已经根据需要递增 R2
。
- 现在,您需要
STR R0, R2, #0
。
ADD R1, R1, #-1
没有任何用处。
- 13是回车的ASCII码return;您可能想将其更改为 10 以换行。
还有其他几点值得一提。不使用 BRnzp LOOP
,而是使用 BR LOOP
无条件分支。另外,branch 和 halt 之间的 LEA
和 PUTS
指令是不可达的;我假设您将它们放在那里是为了调试目的。虽然您可能打算将 memSpace 的内容写入控制台显示,但 PUTS
不一定会这样做。它将在 space 时终止(或者,也许永远不会)。无论如何,在 PUTS
.
之前你需要 LEA R0, memSpace1
固定版本:
.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
我有一个基本循环,要求用户输入一个值,然后将其打印到屏幕上。当用户按下回车键时,程序停止循环。我还想将其他输入保存到内存块中以备后用。根据我的简单理解,我认为我只是将值存储在第一个内存槽中,每次用户输入值时我都会覆盖该内存槽。如何遍历内存块?
谢谢
.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
好的,所以我们这里有一些问题...
memSpace .BLKW 30
应该是 在HALT
之后以避免覆盖指令。GETC
将字符复制到R0
,因此您丢失了memSpace
寄存器。将数组指针放在R2
中;您已经根据需要递增R2
。- 现在,您需要
STR R0, R2, #0
。 ADD R1, R1, #-1
没有任何用处。- 13是回车的ASCII码return;您可能想将其更改为 10 以换行。
还有其他几点值得一提。不使用 BRnzp LOOP
,而是使用 BR LOOP
无条件分支。另外,branch 和 halt 之间的 LEA
和 PUTS
指令是不可达的;我假设您将它们放在那里是为了调试目的。虽然您可能打算将 memSpace 的内容写入控制台显示,但 PUTS
不一定会这样做。它将在 space 时终止(或者,也许永远不会)。无论如何,在 PUTS
.
LEA R0, memSpace1
固定版本:
.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