Question pour les connaisseurs en assembleur!

Fermé
med7sassi Messages postés 11 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 16 octobre 2010 - 16 oct. 2010 à 23:09
ghuysmans99 Messages postés 2496 Date d'inscription jeudi 14 juillet 2005 Statut Contributeur Dernière intervention 5 juin 2016 - 17 oct. 2010 à 01:30
Bonjour,
Je cherche à créer une application en assembleur qui permet de remplir un tableau d'âges et d'afficher le minimum et le max en un seul passe, ainsi que la moyenne des âges, l'affichage des résultats.
Bah, la saisie et l'affichage tournent !
Mais le problème ce que j'arrive pas à trouver le min et le max !!!!!!! Plutôt comment faire la comparaison entre deux chaines de caractères !
Qui peut m'aider ...... Alooooooo



TITLE ex
.model small
.stack 100h
.386
.data
mot1 db 20 dup('$')
return db 13,10,('$')
Adr1 dw ?
Adr2 dw ?
Adr3 dw ?
tab db 10 dup('$')

msg1 db 10,13,"Veuillez saisir l'age :$"
msg2 db 10,13,"Vous avez saisie :$"

msg3 db 10,13,"Le min est :$"
msg4 db 10,13,"Le max est :$"

min db 20 dup('9') ;initialisation
max db 20 dup('0')
.code
main PROC
mov ax, @data
mov ds, ax


mov cx, 10

saisie :

;Affichage message demande frappe
mov dx, OFFSET msg1
mov ah, 9
int 21h

;-------lecture de la chaine
mov ah,0Ah
mov dx,offset mot1
int 21h
;-----Affectation de l'adresse de debut de chaine dans
;-----la variable adr
lea dx,[mot1+2]
mov adr1,dx

;on range le caractere dans bl
mov bl, al
mov tab[si], bl


;teste sur le min
cmp bl,min
JGE val_min
mov al, bl
mov min, al

JMP sortie_min
val_min :
NOP ;Ne fait rien
sortie_min :


;teste sur le max
cmp bl,max
JLE val_max
mov al, bl
mov max, al

JMP sortie_max
val_max :
NOP ;Ne fait rien
sortie_max :




;Affichage message vous avez appuyez
MOV DX,OFFSET msg2
MOV AH,09h
INT 21h

;-----Affichage de la chaine saisie
mov ah,09h
mov dx,adr1
int 21h

;-----Affichage de retour chariot
mov ah,09h
mov dx,offset return
int 21h

inc si
loop saisie


;Affichage message min
MOV DX,OFFSET msg3
MOV AH,09h
INT 21h
;on copie le min
MOV DL,min
;On affiche le min present dans dl
MOV AH,2
INT 21h




;Affichage message max
MOV DX,OFFSET msg4
MOV AH,09h
INT 21h
;on copie le max
MOV DL,max
;On affiche le max present dans dl
MOV AH,2
INT 21h



mov ah, 4Ch
int 21h
.exit
main ENDP
END main

2 réponses

countvenom Messages postés 1195 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 17 octobre 2010 270
17 oct. 2010 à 01:28
Je ne suis pas un expert en assembleur, loin de là. Mais je doute que tu trouve beaucoup d'aide sur ce site pour ce genre de problématique.

Néanmoins, pour comparer une chaîne de caractères, si mais souvenir son bon, tu peux utiliser les instructions cmp et (je / jne)

cmp : compare.
je : jump equal.
jne : jump no equal.

Il te suffit de créer des labels dans lesquels tu vas comparer tes caractères un à un et de jumper vers eux.

Mais sinon, tu ferais mieux de te rendre sur des forums plus sérieux, comme ce de
https://asm.developpez.com/
0
ghuysmans99 Messages postés 2496 Date d'inscription jeudi 14 juillet 2005 Statut Contributeur Dernière intervention 5 juin 2016 339
17 oct. 2010 à 01:30
Tu dois d'abord convertir ce qui est tapé par l'utilisateur en byte ...
0