Como armazenar temporariamente valores seguidos em assembly?
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.
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.