0

私は LC-3 をいじるのが初めてで、問題が発生しています。「こんにちは、私の名前はコナーです」などの文字列全体を入力できるようにしたいのですが、Enter キーを押すと、コンソールにエコーされます。文字を読み取り、スペースが押されるまで継続的にエコーする前に問題を解決しましたが、文字列全体を作成して入力時にエコーする方法がよくわかりません。始めるための助けはありますか?

最終的には次のようになります (すべての .fill コマンド):

.ORIG x3000     ; specify the "origin"; i.e., where to load in memory

; machine instructions
.FILL x2006
.FILL x2206
.FILL x0403
.FILL xF021
.FILL X127F
.FILL x0FFC
.FILL xF025
.FILL x005A
.FILL x0064

.END
4

1 に答える 1

1

前の問題では、ユーザーから文字を取得した後に OUT のトラップを呼び出すことができました。ユーザーから新しい行まで文字列全体を読み取るには、新しい行に入るまで各文字をメモリに格納してから、PUTS のトラップを呼び出す必要があります。

あなたがまだここまで進んでいるかどうかはわかりませんが、最初に、基本的なアイデアを確実に理解するために、アセンブリでプログラムを書きました。

MAIN
    LEA r1, INPUT       ; r1 = address of input

PROMPT
    TRAP x20            ; getc, r0 = character input
    STR r0, r1, #0      ; mem[r1 + INPUT] = r0
    ADD r1, r1, #1      ; r1 = r1 + 1
    ADD r0, r0, #-10    ; r0 = r0 - new line
    BRnp PROMPT         ; branch if r0 != 0

END
    ADD r1, r1, #-1     ; subtract one from r1
    STR r0, r1, #0      ; mem[r1 + INPUT] = r0 (which is zero)
    LEA r0, INPUT       ; r0 = address of input

    TRAP x22            ; puts, display string
    TRAP x25            ; halt

; data segment
INPUT .BLKW 64

次に、1 行ずつ進み、バイナリで手動で命令を作成します。

.ORIG x3000

; main
    1110 001 000001010      ; lea r1, INPUT

; prompt
    1111 0000 x20           ; TRAP x20, halt
    0111 000 001 000000     ; STR r0, r1, #0
    0001 001 001 1 00001    ; ADD r1, r1, #1
    0001 000 000 1 10110    ; ADD r0, r0, #-10
    0000 101 111111011      ; BRnp PROMPT (jump -5 if zero)

; end
    0001 001 001 1 11111    ; ADD r1, r1, #-1
    0111 000 001 000000     ; STR r0, r1, #0
    1110 000 000000010      ; LEA r0, input ( + 2)

    1111 0000 x22           ; TRAP x22, puts
    1111 0000 x25           ; TRAP x25, halt

.BLKW 64                    ; input
.END

そして最後に、それらを 16 進数に変換し、それぞれを .FILL に入れます。

.ORIG x3000

; main
    .FILL xE20A

; prompt
    .FILL xF020
    .FILL x7040
    .FILL x1261
    .FILL x1036
    .FILL x0BFB

; end
    .FILL x127F
    .FILL x7040
    .FILL xE002

    .FILL xF022
    .FILL xF025

; data
.BLKW 64

.END
于 2014-10-23T23:58:13.167 に答える