Come memorizzare temporaneamente i valori in una riga in assemblaggio?
Domanda
Sto facendo un sistema operativo in modalità reale a 16 bit e voglio passare i comandi che l'utente digita. Posso fare input ma non sono sicuro di come memorizzare la stringa risultante in modo che possa essere in seguito analizzato.C'è un modo migliore che semplicemente mettere ogni personaggio sullo stack e poi pop e invertirli quando vogliono essere usati?
Il mio ciclo principale:
mainLoop:
mov bx, s_PROMPT
call printStr ; print the 'MOOS> ' prompt
inputLoop:
call getKeyPress ; wait for the user to press a key
call printChar ; print the pressed key so the user can
; see what they've typed
push bl???
cmp bl, 0xD ; 0xD = 13 = ASCII code for enter
jne inputLoop ; go to inputLoop if does not equal enter
call newLine
jmp mainLoop
.
Il sistema operativo è chiamato Moos a proposito.
Grazie a chiunque può aiutare.
Soluzione
La tua pila sembra questa push afteroard:
00: 's' - Assume that here starts your string by pusing each char
01: 't'
02: 'r'
03: 'i'
04: 'n'
05: 'g'
06: - Here is your stackpointer after the string has been completed.
.
Quindi puoi semplicemente memorizzare l'attuale stackpointer da qualche parte (qui è 0).Contare la lunghezza mentre il tuo pulshi è un caramello o sottrai la pila corrente dal valore salvato per ottenere la lunghezza e copiarla da qualche parte.Potrebbe essere necessario aggiungere un byte 0 o memorizzare la lunghezza insieme alla stringa, a seconda di come vengono organizzate le stringhe.Naturalmente è anche possibile utilizzare la stringa direttamente senza la necessità di copiarla.
Dopo averlo finito, basta reimpostare il puntatore dello stack sul valore originale 0
e hai finito.