0

プログラムの説明

.BLKW を使用して、ユーザーが入力する文字ごとに 20 の場所を割り当てました。今のところ、ユーザーが最初のプロンプトで入力した文字列を表示したいだけです。(これは豚のラテン語翻訳者になるため、2 番目のプロンプトになります。しかし、今は、ユーザー入力を出力できるかどうかを確認したいだけです)

問題

問題は、実行すると最後に余分な文字が表示されることです。

例えば:

English Word: apple
Pig-Latin Word: apple
English Word: at
Pig-Latin Word: atple
English Word: set
Pig-Latin Word: setle

マイプログラム

.ORIG x3000
START ST R1,SAVER1
ST R2,SAVER2
ST R3,SAVER3

LD R5,ENTER

REPEAT LEA R0,PROMPT          ; loading the starting address of prompt
PUTS                   ; displays PROMPT on screen


LEA R4,ENGLWORD        ; sets aside memory locations for typed characters
INPUT GETC             ; now that user has typed, read char into R0
ADD R6,R5,R0           ; adds the negative value of the ASCII enter key code to the input character
BRz PIGPROMPT          ; if the sum of the ASCII codes from step before is 0, that means user pressed enter so go to PIGPROMPT
OUT                    ; write char in R0 to console
STR R0,R4,#0           ; store typed character into memory location
ADD R4,R4,#1           ; increment memory location so you write next character to the next location
BRnzp INPUT            ; break no matter what to the INPUT step to receive next typed character

PIGPROMPT LEA R0,PIG             ; loads starting address of pig latin prompt
PUTS                             ; displays pig latin prompt on screen
LEA R0,ENGLWORD
PUTS
BRnzp REPEAT

LD R1,SAVER1           ; restore R1 to original value
LD R2,SAVER2           ; restore R2 to original value
LD R3,SAVER3           ; restore R3 to original value

HALT

SAVER1 .BLKW 1         ; allocates 1 memory location for SAVER1
SAVER2 .BLKW 1         ; allocates 1 memory location for SAVER2
SAVER3 .BLKW 1         ; allocates 1 memory location for SAVER3
ENGLWORD .BLKW #20

ENTER .FILL xFFF6      ; the negative value of the ASCII code for the enter key
NEWLINE .FILL x000A

PROMPT .STRINGZ "\nEnglish Word: "          ; initializes a sequence of stringLength+1 memory locations to hold string
PIG .STRINGZ "\nPig-Latin Word: "
DSR .FILL xFE04                           
DDR .FILL xFE06
KBSR .FILL xFE00
KBDR .FILL xFE02
.END

試みられた解決策

問題は、R4 が最初のユーザー入力の文字列をプログラム全体で保持していることだと考えていました。そのため、解決策として、R4 が表示された後に R4 をクリアして、次のユーザー入力を受け取る準備ができるようにすることを考えました。誰かが私がそれを行う方法を知っていますか?

4

2 に答える 2