Oppure

Loading
14/12 15:47
Aless
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:
mov ah,0eh
mov bh,0
xor ah,ah
Int 16h
Int 10h


Grazie.
Ultima modifica effettuata da Aless 14/12 15:48
16/12 1:08
nessuno
Messo in quel modo quel codice non ha senso. Se vuoi accettare un carattere da tastiera e visualizzarlo devi scrivere

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 nessuno 16/12 1:11
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
16/12 7:40
Aless
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
[CODE]
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
[/CODE]
Ultima modifica effettuata da Aless 16/12 8:26
16/12 13:12
nessuno
Dove inizializzi ES:DI ? Dove sta il buffer di memoria?

getche è una tua funzione o di libreria?

Di quale errore parli?

Usi DOSBOX per lo sviluppo?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
16/12 16:57
Aless
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 16/12 16:58
17/12 9:13
nessuno
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
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
18/12 9:15
Aless
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
18/12 18:45
nessuno
Su quale forum dovrei rispondere dato che hai postato anche su altri?

E nel tuo kernel non hai mai utilizzato aree dati?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.