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

好的,所以我们这里有一些问题...

  1. memSpace .BLKW 30 应该是 HALT 之后以避免覆盖指令。
  2. GETC 将字符复制到 R0,因此您丢失了 memSpace 寄存器。将数组指针放在 R2 中;您已经根据需要递增 R2
  3. 现在,您需要STR R0, R2, #0
  4. ADD R1, R1, #-1 没有任何用处。
  5. 13是回车的ASCII码return;您可能想将其更改为 10 以换行。

还有其他几点值得一提。不使用 BRnzp LOOP,而是使用 BR LOOP 无条件分支。另外,branch 和 halt 之间的 LEAPUTS 指令是不可达的;我假设您将它们放在那里是为了调试目的。虽然您可能打算将 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