2011-11-30 7 views
1

LC-3アーキテクチャを使用して簡単なプログラムを作成しようとしています。 私がやろうとしているのは、コンソールから文字列を読み込んで、何とかメモリに保存してから、それを印刷し直すことです。アセンブリのLC-3に文字列を保存する

は、これは私がこれまで

; This program attemps to read a string and then output it 

     .orig x3000 
     and  r1,r1,0 
    lea  r0,prompt 
    puts 
loop: 
    getc 
    putc 
    add r4,r4,1 
    ld  r7,nlcomp ; check for 
    add  r7,r7,r0 ; end of line 

brz finish 

    st r0,lets 
    br  loop 

finish: 

    lea r0,lets 
    puts 

    halt 

lets: .blkw 20 
prompt: .stringz "Emter String" 
nlcomp .fill xfff6   
.end 

出力が表示された文字列の唯一の最後の文字を持っているものです。私が "steve"と入力すると、 "e"が印刷されます。

明らかに私の問題は、読み込んだ各文字を自分の記憶場所に保存する必要があることです。私は.blkwを使ってこれを行うと思ったが、明らかにその位置にあるビットを上書きする。

私の質問はどのようにシーケンシャルメモリの場所に文字を格納し、それをコンソールに出力するのですか?

答えて

3

STR命令を使用すると、ベースオフセットのアドレッシングが可能になります。 STRの構文は次のとおりです。

STR <src register> <base register> <immediate offset> 

ので、以下のようなものが有効になります:

LEA R1,MEMORYSPACE ; saves the address of the storage memory block 
loop: 
    GETC    ; input character -> r0 
    PUTC    ; r0 -> console 
    STR R0,R1,#0  ; r0 -> (memory address stored in r1 + 0) 
    ADD R1,R1,#1  ; increments the memory pointer so that it 
         ; always points at the next available block 
    BR loop 

MEMORYSPACE .blkw 100 ; declares empty space to store the string 
+1

この作品。ちょうど試みた。あなたは私のために数時間の不満を救った。ありがとうございました。 – Madushan

0

私はLC-3に精通していませんが、私があなたのコードを読んだとき、私が見ることは、あなたが指しているアドレスには常に ' 'して'プラスオフセット。これは宿題としてマークされているので、私はあなたがそれを行う方法を理解させるでしょう! :)

関連する問題