
Aless (Normal User)
Newbie
    
Messaggi: 5
Iscritto: 14/12/2023
|
Buon pomeriggio,
Avrei bisogno di sapere come si può impostare un algoritmo che dia come risultato una stringa di caratteri dalla tastiera...
Similmente alla gets() del C/C++
Lavoro con un processore 80x86.
Per ottenere un carattere con echo utilizzo:
Codice sorgente - presumibilmente Altri Linguaggi |
mov ah,0eh
mov bh,0
xor ah,ah
Int 16h
Int 10h
|
Grazie.
Ultima modifica effettuata da Aless il 14/12/2023 alle 16:48 |
|

()
Newbie
    
Messaggi:
Iscritto:
|
Messo in quel modo quel codice non ha senso. Se vuoi accettare un carattere da tastiera e visualizzarlo devi scrivere
Codice sorgente - presumibilmente Altri Linguaggi |
xor ah,ah int 16h mov ah,0eh mov bh,0 int 10h
|
Per una stringa dovrai ripetere con un ciclo questo pezzo di codice e salvare AL in un buffer di memoria tramite un registro puntatore come DI. Controlla che il ciclo termini se si pressa RETURN (AL=0dh) oppure si raggiunge la cspacita' massima del buffer.
Ultima modifica effettuata da il 16/12/2023 alle 2:11 |
|

Aless (Normal User)
Newbie
    
Messaggi: 5
Iscritto: 14/12/2023
|
Ok grazie mille
ho scritto questa procedura seguendo il vostro suggerimento...
nonostante ciò non sono riuscito a trovare l'errore:
getche rappresenta la sua funzione
Codice sorgente - presumibilmente Altri Linguaggi |
Codice sorgente - presumibilmente Altri Linguaggi |
getstr: ; [SI = output string]
xor si,si
xor al,al
getstr_loop:
cld
call getche
cmp al,10
je getstr_endl
cmp al,13
je getstr_endl
cmp al,8
je backspace
cmp al,27
je getstr_abort
mov [ES:DI],AL
inc DI
jmp getstr_loop
getstr_endl:
cld
mov al,0x0A
mov [ES:DI],AL
inc DI
mov al,0x0D
mov [ES:DI],AL
inc DI
mov al,0
mov [ES:DI],AL
inc DI
mov si,di
ret
backspace:
mov ah,0eh
mov bl,0
mov bh,0
mov al,8
int 10h
mov al,' '
int 10h
mov al,8
int 10h
DEC di
mov al,' '
mov [ES:DI],AL
inc DI
jmp getstr_loop
getstr_abort:
xor di,di
mov si,0
ret
|
|
Ultima modifica effettuata da Aless il 16/12/2023 alle 9:26 |
|

()
Newbie
    
Messaggi:
Iscritto:
|
Dove inizializzi ES I ? Dove sta il buffer di memoria?
getche è una tua funzione o di libreria?
Di quale errore parli?
Usi DOSBOX per lo sviluppo?
|
|

Aless (Normal User)
Newbie
    
Messaggi: 5
Iscritto: 14/12/2023
|
per inizializzare DI non so come fare... io utilizzavo stosb ma poi ho deciso di muovere manualmente AL in DI ed incrementare DI
la getche è una mia procedura assembly ma non è quello il problema perché funziona... e ritorna in AL il codice ASCII del carattere digitato.
l'errore è che se provo a stamparla a video con un altra mia funzione non mostra alcun contenuto e poi non funziona li backspace perché muove solo il cursore indietro anche se io stampo 8,' ',8 e in altri contesti funziona.
no, non uso dosbox, questa è una funzione di un kernel asm a cui lavoro, ma durante la stesura mi sono incespicato qui...
Ultima modifica effettuata da Aless il 16/12/2023 alle 17:58 |
|

()
Newbie
    
Messaggi:
Iscritto:
|
Il codice (sbagliato) che ti ho corretto all'inizio era la getche?
Comunque se non definisci un buffer in memoria e assegni il suo indirizzo a es di il codice non funzionerà mai.
Scusa la franchezza ma vorresti scrivere un kernel (in modalità reale presumo, non protetta) ma non hai le basi delle basi... la vedo dura
|
|

Aless (Normal User)
Newbie
    
Messaggi: 5
Iscritto: 14/12/2023
|
Perdoni la mia inesperienza, e si il codice iniziale funge da getche..
Tuttavia, se non è un problema, potrebbe scrivermi lei un esempio di come andrebbe svolta l' assegnazione del buffer?
Grazie
|
|

()
Newbie
    
Messaggi:
Iscritto:
|
Su quale forum dovrei rispondere dato che hai postato anche su altri?
E nel tuo kernel non hai mai utilizzato aree dati?
|
|

Aless (Normal User)
Newbie
    
Messaggi: 5
Iscritto: 14/12/2023
|
dove vuoi, non è quello il punto, non è la prima volta che utilizzo aree dati ma comunque qui non so che fare, in un'altra funzione facevo
Codice sorgente - presumibilmente Altri Linguaggi |
Codice sorgente - presumibilmente Altri Linguaggi |
mov si,stringa
call stampa
stringa db 'ciao',0
|
|
è quello che intendi?
|
|