问题
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