1

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 を使用するとこれが行われると思っていましたが、明らかにその位置にあるビットを上書きします。

私の質問は、文字を連続したメモリ位置に保存してからコンソールに出力する方法です。

4

2 に答える 2

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
于 2013-12-05T23:03:43.183 に答える
0

私は LC-3 にはまったく詳しくありませんが、あなたのコードを読んでみると、'lets' が指すアドレスではなく、'lets' が指すアドレスに常に格納していることがわかります。オフセット。これは宿題としてマークされているので、それを行う方法を理解させます! :)

于 2011-11-30T07:24:42.930 に答える