Pergunta

Estou criando um sistema operacional em modo real de 16 bits e quero passar comandos que o usuário digita.Posso fazer entradas, mas não tenho certeza de como armazenar a string resultante para que ela possa ser analisada posteriormente.Existe uma maneira melhor do que apenas colocar cada caractere na pilha e depois colocá-los e invertê-los quando quiserem ser usados?

Meu circuito principal:

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

O sistema operacional é chamado MOOS por falar nisso.

Agradeço a quem puder ajudar.

Foi útil?

Solução

Sua pilha fica assim após cada push:

 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.

Então você simplesmente armazena o stackpointer atual em algum lugar (aqui é 0).Conte o comprimento enquanto você está inserindo caracteres ou subtraia a pilha atual do valor salvo para obter o comprimento e copie-o em algum lugar.Pode ser necessário adicionar um byte 0 ou armazenar o comprimento junto com a string, dependendo de como suas strings estão organizadas.Claro que você também pode usar a string diretamente, sem a necessidade de copiá-la.

Depois de terminar, basta redefinir o ponteiro da pilha para o valor original 0 e você terminou.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top