How can I store an unknown number of inputs in different addresses in LMC (little-man-computer)?

£可爱£侵袭症+ 提交于 2019-12-12 21:28:53

问题


I want to create a code that ask the user to input a number n, then ask for n inputs and store them all in different addresses so they can be read as instructions to be executed.

However, I'm stuck, because I don't know how to store n inputs in n different adresses. So far I am able to ask for an input n and then ask for n inputs, but they are all stored in the same address.

Here is my code:

    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:


With LMC you need to use self modifying code to update the STO instruction so that it points to a different memory address each time. We will add one to the memory location so that each time through the values stored will be in a location one higher than the previous loop.

        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


来源:https://stackoverflow.com/questions/47346971/how-can-i-store-an-unknown-number-of-inputs-in-different-addresses-in-lmc-littl

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!