PDA

Visualizza la versione completa : Problema in Assembly 8086


patocosmic
26-02-2014, 17:17
Salve a tutti, ho da poco cominciato a studiare il microprocessore 8086. Mi serve il vostro aiuto perch non riesco a risolvere un piccolo problema, dovrei leggere mediante 5 variabili una parola di 5 lettere e contare l'occorrenza della lettera A nella parola. Il mio problema che non riesco a controllare se stata effettivamente inserita la lettera A. Dovrei utilizzare un contatore ? Non abbiamo ancora cominciato i cicli, al momento utilizziamo le selezioni (IF). Ecco qui il mio codice:

.MODEL SMALL
.STACK
.DATA
car1 db? ;primo carattere
car2 db? ;secondo carattere
car3 db? ;terzo carattere
car4 db? ;quarto carattere
car5 db? ;quinto carattere
.CODE

INIZIO:
mov ax @data (http://www.tomshw.it/forum/members/data-33362.html)
mov ds,ax
;lettura primo carattere
mov ah,01
int 21h
mov car1,al
;controllo se car1 una 'A'



;lettura secondo carattere
mov ah,01
int 21h
mov car2,al
;controllo se car2 una 'A'




;lettura terzo carattere
mov ah,01
int 21h
mov car3,al
;controllo se car3 una 'A'




;lettura quarto carattere
mov ah,01
int 21h
mov car4,al
;controllo se car4 una 'A'




;lettura quinto carattere
mov ah,01
int 21h
mov car5,al
;controllo se car5 una 'A'

;fine programma
mov ah,4ch
int 21h
END INIZIO

Come vedete, ho lasciato in bianco lo spazio relativo al controllo. Chi di voi riesce a spiegarmi precisamente come devo procedere per terminare il programma ? Grazie in anticipo!

Konan90
26-02-2014, 17:26
Basta semplicemente usare una variabile come contatore

patocosmic
26-02-2014, 17:40
E come si fa ? E' la prima volta che devo utilizzare un contatore in ASM. Se non ho capito male dovrebbe essere cos:

;controllo se car1 una 'A'
cmp car1,a
;jne salta se car1 diverso da 'A'
jne uguale ad a
cont++ (in C)
jne fine salta se car1 diverso da 'A'
;leggi car2 ecc. ecc.

E' giusto ? Come posso utilizzare il cont++ in Assembly ? Grazie

Konan90
26-02-2014, 17:47
E come si fa ? E' la prima volta che devo utilizzare un contatore in ASM. Se non ho capito male dovrebbe essere cos:

;controllo se car1 una 'A'
cmp car1,a
;jne salta se car1 diverso da 'A'
jne uguale ad a
cont++ (in C)
jne fine salta se car1 diverso da 'A'
;leggi car2 ecc. ecc.

E' giusto ? Come posso utilizzare il cont++ in Assembly ? Grazie

Si, come pseudocodice giusto.
Per incrementare il contatore puoi usare l'istruzione INC.

patocosmic
26-02-2014, 20:22
E dove lo dovrei azzerare il contatore ? Puoi farmi un esempio specifico nel mio caso ?

Konan90
27-02-2014, 22:42
Il contatore lo azzeri ovviamente solo all'inizio.
Nel tuo esempio, al posto di cont++ devi scrivere la funzione di incremento INC.

Prova a farlo tu e magari lo correggo :D

Loading