Lecture chaine et comparaison[masm]

Contenu du snippet

Ce petit programme demande à l'utilisateur de rentrer une chaine , dans mon cas je demande si il veut choisir "steak" ou "patate" si l'utilisateur ne rentre pas l'une de ses 2 chaines le programme boucle sinon il y a l'affichage d'un message en fonction du choix de plat désiré.

J'utilise MASM32v10 et pour la compilation et édition de liens , j'utilise la séquence de commande suivante se trouvant dans le /BIN de masm32 ::
- ml /c mon_fichier.asm
- link16 mon_fichier

Il ne restera plus qu'à executer.

Source / Exemple :


.MODEL SMALL
.STACK 100h

.DATA
message db 10,13,"Que voulez - vous manger (steak/patate) :",10,13,"$"
message2 db 10,13,"Vous avez tapee : $"
message3 db 10,13,"Vous devez etre carnivore$"
message4 db 10,13,"Vous devez etre vegetarien$"
compa db "steak"
compa2 db "patate"
;taille maxi chaine = 12
chaine  db 13,?,14 dup(?),?

.CODE
.8086

debut:  

		MOV AX,@data
		MOV DS,AX
				
demande:
		;Affichage du message de demande de frappe
		MOV AH,09h
		MOV DX,OFFSET message
		INT 21h			
				
		;Effacement du buffer et du saisi clavier
		mov ah,0Ch
		;Saisie au clavier d'une chaine		
		mov al,0Ah
		;buffer ou sera placé la chaine
		mov dx,OFFSET chaine
		int 21h

		;On met bx à 0
		xor bx,bx
		;On met le nombre de caractere lu dans bl
		mov bl,byte ptr[chaine+1]
		;On met un $ à la fin de la chaine
		mov byte ptr[chaine+2+bx],24h
			
		;Affichage du message
		MOV AH,09h
		MOV DX,OFFSET message2
		INT 21h	
		
		;Affichage chaine rentré
		MOV AH,09h
		MOV DX,OFFSET chaine+2
		INT 21h
		
		;1er comparaison ( steak )
		mov  ax,ds
		mov  es,ax          ; ES = DS
		lea  si,chaine+2  ; DS:SI = adresse chaine
		lea  di,compa  ; ES:DI = adresse compa
		; Le nombre de caractères à comparer
		mov  cx,5
		repe cmpsb          ; Comparer les chaînes byte à byte
		jz   egalite        ; Si ZF = 0 alors les chaînes sont égales
		
		;2eme comparaison ( patate )
		mov  ax,ds
		mov  es,ax          ; ES = DS
		lea  si,chaine+2  ; DS:SI = adresse chaine
		lea  di,compa2  ; ES:DI = adresse compa2
		; Le nombre de caractères à comparer
		mov  cx,6
		repe cmpsb          ; Comparer les chaînes byte à byte
		jz   egalite2        ; Si ZF = 0 alors les chaînes sont égales	
		
		;si aucune comparaison réussi on redemande la saisi
		jmp demande
		
egalite:		
		;Affichage du message
		MOV AH,09h
		MOV DX,OFFSET message3
		INT 21h	
		
		;;fin du programme et retour au dos
		MOV AH,4Ch
		INT 21h		
		
egalite2:
		;Affichage du message
		MOV AH,09h
		MOV DX,OFFSET message4
		INT 21h	
		
		;;fin du programme et retour au dos
		MOV AH,4Ch
		INT 21h		
		
		END debut

Conclusion :


Je suis ouvert à toutes remarques , critiques , et optimisation de codes.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (w4kfu)