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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top