如何在 LMC(小人机)的不同地址中存储未知数量的输入?
How can I store an unknown number of inputs in different addresses in LMC (little-man-computer)?
我想创建一个代码,要求用户输入一个数字 n,然后要求 n 个输入并将它们全部存储在不同的地址中,以便将它们读取为要执行的指令。
但是,我卡住了,因为我不知道如何将 n 个输入存储在 n 个不同的地址中。到目前为止,我能够请求一个输入 n,然后请求 n 个输入,但它们都存储在同一个地址中。
这是我的代码:
IN
STO N
loopTop
IN
STO NBS
LDA N
SUB ONE
STO N
BRZ done
BR loopTop
done
OUT
HLT
ONE
DAT 001
N
DAT 000
NBS
DAT 000
使用 LMC,您需要使用自修改代码来更新 STO
指令,以便它每次都指向不同的内存地址。我们将向内存位置添加一个,以便每次通过存储的值都位于比上一个循环高一个的位置。
IN ; Accumulator = number of values to read (N)
LOOP BRZ PRG ; If Accumulator (N) is 0 we are finished - execute program at PRG
SUB ONE
STO N ; N=N-1
IN ; Get value
ST STO PRG ; Store it in the program starting at PRG (this changes every loop)
LDA ST ; Get current store command (ST)
ADD ONE ; add one to store command to increment memory location
STO ST ; Update store command (ST)
LDA N ; Put current value of N in accumulator
BRA LOOP ; Continue loop
N DAT 0 ; Number of values to read
ONE DAT 1 ; Value 1
PRG DAT 0 ; We will store all of the values from this point onward
我想创建一个代码,要求用户输入一个数字 n,然后要求 n 个输入并将它们全部存储在不同的地址中,以便将它们读取为要执行的指令。
但是,我卡住了,因为我不知道如何将 n 个输入存储在 n 个不同的地址中。到目前为止,我能够请求一个输入 n,然后请求 n 个输入,但它们都存储在同一个地址中。
这是我的代码:
IN
STO N
loopTop
IN
STO NBS
LDA N
SUB ONE
STO N
BRZ done
BR loopTop
done
OUT
HLT
ONE
DAT 001
N
DAT 000
NBS
DAT 000
使用 LMC,您需要使用自修改代码来更新 STO
指令,以便它每次都指向不同的内存地址。我们将向内存位置添加一个,以便每次通过存储的值都位于比上一个循环高一个的位置。
IN ; Accumulator = number of values to read (N)
LOOP BRZ PRG ; If Accumulator (N) is 0 we are finished - execute program at PRG
SUB ONE
STO N ; N=N-1
IN ; Get value
ST STO PRG ; Store it in the program starting at PRG (this changes every loop)
LDA ST ; Get current store command (ST)
ADD ONE ; add one to store command to increment memory location
STO ST ; Update store command (ST)
LDA N ; Put current value of N in accumulator
BRA LOOP ; Continue loop
N DAT 0 ; Number of values to read
ONE DAT 1 ; Value 1
PRG DAT 0 ; We will store all of the values from this point onward