2017-11-17 6 views
2

数字nを入力し、n個の入力を求めてそれらをすべて異なるアドレスに格納するように指示するコードを作成して、実行する命令として読むことができるようにします。LMC(little-man-computer)の異なるアドレスに不明な入力数を保存するにはどうすればよいですか?

しかし、n個の入力をn個の異なるアドレスに格納する方法がわからないため、私は立ち往生しています。これまでは入力nを求めてからn入力を求めることができましたが、それらはすべて同じアドレスに格納されています。あなたはそれが別のメモリアドレスに、それぞれの時間を指すようにSTO命令を更新するために、自己書き換えコードを使用する必要がLMCで

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 
+0

Nの上限がかなり小さい場合は、プログラムでその量のメモリを予約することができます。それ以外の場合は、通常はオペレーティングシステムを呼び出して、必要に応じてさらに多くのメモリを要求する必要があります。あなたの環境でどのように動作するのか分かりません。 –

+0

LMCには間接指示用のポインタ(レジスタに格納されたアドレスまたはメモリに格納されたアドレス)を使用する方法がありますか?もしそうなら、そうする。ループ内のポインタをインクリメントします。 –

+0

うわー、ループ内のすべてのロード/ストア命令のアドレスを変更する必要があるのは不便です。しかし、それは十分にプログラマブルですが、まあまあです。 –

答えて

0

は、ここに私のコードです。メモリ位置に1を追加し、格納された値が前回のループよりも1つ高い位置に格納されるようにします。

 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 
+1

私の最初の考えは、そのような店の価値を増やさなければならないということでしたが、私はどのように把握できませんでした。ご助力ありがとうございます! –

関連する問題