Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Altri Linguaggi - Ottenere una stringa di caratteri in assembly 80x86
Forum - Altri Linguaggi - Ottenere una stringa di caratteri in assembly 80x86

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Aless (Normal User)
Newbie


Messaggi: 5
Iscritto: 14/12/2023

Segnala al moderatore
Postato alle 16:47
Giovedì, 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

  1. mov ah,0eh
  2. mov bh,0
  3. xor ah,ah
  4. Int 16h
  5. Int 10h



Grazie.

Ultima modifica effettuata da Aless il 14/12/2023 alle 16:48
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6362
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 2:08
Sabato, 16/12/2023
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

  1. xor ah,ah
  2. int 16h
  3. mov ah,0eh
  4. mov bh,0
  5. 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 il 16/12/2023 alle 2: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à.
PM Quote
Avatar
Aless (Normal User)
Newbie


Messaggi: 5
Iscritto: 14/12/2023

Segnala al moderatore
Postato alle 8:40
Sabato, 16/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

  1. Codice sorgente - presumibilmente Altri Linguaggi

  2. getstr: ; [SI = output string]
  3. xor si,si
  4. xor al,al
  5. getstr_loop:
  6. cld
  7.        call getche
  8.            cmp al,10
  9.            je getstr_endl
  10.            cmp al,13
  11.            je getstr_endl
  12.            cmp al,8
  13.            je backspace
  14.            cmp al,27
  15.            je getstr_abort
  16.            mov [ES:DI],AL
  17.            inc DI
  18. jmp getstr_loop
  19.  
  20. getstr_endl:
  21.        cld
  22.            mov al,0x0A
  23.        mov [ES:DI],AL
  24.            inc DI
  25.            mov al,0x0D
  26.        mov [ES:DI],AL
  27.            inc DI
  28.            mov al,0
  29.        mov [ES:DI],AL
  30.            inc DI
  31.            mov si,di
  32. ret
  33.  
  34. backspace:
  35.        mov ah,0eh
  36.            mov bl,0
  37.            mov bh,0
  38.            mov al,8
  39.            int 10h
  40.            mov al,' '
  41.            int 10h
  42.            mov al,8
  43.            int 10h
  44.            DEC di
  45.            mov al,' '
  46.            mov [ES:DI],AL
  47.            inc DI
  48. jmp getstr_loop
  49.  
  50. getstr_abort:
  51.        xor di,di
  52.            mov si,0
  53. ret



Ultima modifica effettuata da Aless il 16/12/2023 alle 9:26
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6362
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:12
Sabato, 16/12/2023
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à.
PM Quote
Avatar
Aless (Normal User)
Newbie


Messaggi: 5
Iscritto: 14/12/2023

Segnala al moderatore
Postato alle 17:57
Sabato, 16/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
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6362
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:13
Domenica, 17/12/2023
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à.
PM Quote
Avatar
Aless (Normal User)
Newbie


Messaggi: 5
Iscritto: 14/12/2023

Segnala al moderatore
Postato alle 10:15
Lunedì, 18/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

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6362
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:45
Lunedì, 18/12/2023
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à.
PM Quote
Avatar
Aless (Normal User)
Newbie


Messaggi: 5
Iscritto: 14/12/2023

Segnala al moderatore
Postato alle 19:58
Lunedì, 18/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

  1. Codice sorgente - presumibilmente Altri Linguaggi

  2. mov si,stringa
  3. call stampa
  4. stringa db 'ciao',0




è quello che intendi?

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo