Po wywołaniu WAIT_KEY kod klawisza masz w akumulatorze i zpisujesz wszystkie "próby" na stosie do czasu aż zakończysz 0x0A. Potem zdejmujesz tylko te dwa ostatnie znaki (0x0A) i ten kod. A wszystkie pozostałe nie są ze stosu zdejmowane.
Masz wtedy niezrównoważony stos. Musisz mieć tyle samo rozkazów POP ile PUSH, bo inaczej Ci się stos przepełni dość szybko i zaczniesz nadpisywać dane ( albo rejestry) - zależy gdzie umieścisz wskaźnik początku stosu SP przy inicjalizacji.
Można zliczać ilość zapisów na stosie, albo przywrócić oryginalny startowy SP, albo też przebudować i zrobić to inaczej - bez stosu (z jednobajtową zmienną "podstawa")
MOV A,#01h ;domyslna "podstawa=01h" gdy pierwszy klawisz to "0Ah"
WPROWADZ_PODSTAWE:
MOV podstawa,A ;zapamietaj wprowadzony klawisz (<>0Ah) albo wartosc domyslna
LCALL WAIT_KEY
CJNE A,#0Ah,WPROWADZ_PODSTAWE ;sprawdz czy koniec kodem 0Ah
MOV A,podstawa ;odtworz wprowadzony znak przed kodem 0Ah
MOV R0,A
MOV R2,A