Угадывание языка ассемблера LC3 - PullRequest
0 голосов
/ 04 декабря 2018

Программа не отображает введенный символ и не ограничивает количество попыток до 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
...