如何在LMC(小人计算机)中的不同地址中存储未知数量的输入?

时间:2017-11-17 09:13:35

标签: assembly 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

1 个答案:

答案 0 :(得分:0)

使用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