Программа не отображает введенный символ и не ограничивает количество попыток до 9. Я пытался выяснить, что изменить, чтобы исправить, но я не очень хорошо понимаю сборку.Не могли бы вы объяснить, что это за ошибка и что нужно сделать, чтобы ее исправить?
Программа представляет собой игру на угадывание чисел на ассемблере LC-3.
.ORIG x3000
LD R4, const ;Stored value set to 6
AND R5, R5, #0; ;Initialize guesses
LD R0, NL ;new line
OUT ; print
AND R0, R0, #0 ;Clear R0
LEA R0, guess ;Load R0 with msg
PUTS ; Print R0
GETC ;input to R0
AND R6, R6, #0 ;Clear R6
ADD R6, R6, R0 ;Copy input to R6
AND R0, R0, #0 ;Clear R0
BRnzp checkNum
checkNum:
ADD R5, R5, x0001 ;Increment guesses
AND R2, R2, #0 ;Clear R2
LD R2, MAX ;Add 57 to check if ASCII 0-9
NOT R2, R2 ;Invert R2
ADD R2, R2, #1 ;2's complement
ADD R2, R2, R6 ;Subtract R6 from 39
BRp invalidInput ;If positive, INVALID input
AND R2, R2, #0 ;Clear R2
LD R2, MIN ;Add 48 to check if ASCII 0-9
NOT R2, R2 ;Invert
ADD R2, R2, #1
ADD R2, R2, R6 ;Subtract R6 from 39
BRn invalidInput ;If negative, INVALID input
NOT R6, R6 ;Invert
ADD R6, R6, #1 ;2's complement
ADD R6, R6, R4 ;Subtraction
BRp tooS
BRn tooB
BRz win
tooS:
AND R0, R0, #0 ;Clear R0
LD R0, NL ;new line
OUT ;print
LEA R0, small ;Load "Too Small" message
PUTS ;Print R0
BRnzp guessAgain ;Branch to guess again
tooB:
AND R0, R0, #0 ;Clear R0
LD R0, NL ;New Line
OUT ;Print New Line
LEA R0, big ;Load "Too Big" message
PUTS ;Print R0
BRnzp guessAgain ;Branch to guess again
guessAgain:
AND R0, R0, #0 ;Clear R0
LD R0, NL ;new line
OUT ;print
LEA R0, guessA ;Load "Guess Again"
PUTS ;Print R0
GETC ;Input to R0
AND R6, R6, #0 ;Clear R6
ADD R6, R6, R0 ;Copy input to R6
BRnzp checkNum ;check number
win:
AND R0, R0, #0 ;Clear R0
LD R0, NL ; new line
OUT ; print
LEA R0, correct ;Load "Correct! You took" message
PUTS ; print message
AND R0, R0, #0 ;Clear R0
LD R0, ZERO ;Load ASCII value for 0, to offset with number of guesses
ADD R0, R0, R5 ;Offset 0 in ASCII with number of guesses
OUT ;Print # corresponding to guesses
LEA R0, correct2 ; "guesses."
PUTS ;Print Message
BRnzp endIt
invalidInput:
LD R0, NL ;New Line
OUT ;Print New Line
LEA R0, INV ;Load invalid message
PUTS ;Print invalid message
BRnzp guessAgain ;Branch to guess again
endIt HALT ;
const .FILL x0036 ;correct guess is 6
guess .STRINGZ "Guess a number:" ;prompt to guess the first time
small .STRINGZ "Too Small." ;guess too small
big .STRINGZ "Too Big." ; guess too big
guessA .STRINGZ "Guess again:" ;
correct .STRINGZ "Correct! You took " ; First part of winning message
correct2 .STRINGZ " guesses." ;Second part of winning message
INV .STRINGZ "Invalid Input" ;
ZERO .fill x30
NL .fill x0A ;Newline
MAX .fill #57 ;Max input value
MIN .fill #48 ;Min input value
.end