Lecture chaine et comparaison[masm]

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 395 fois - Téléchargée 16 fois

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

Ajouter un commentaire

Commentaires

42wawa42
Messages postés
143
Date d'inscription
dimanche 28 septembre 2003
Statut
Membre
Dernière intervention
6 septembre 2011
-
Quel est ton pc (CPU) ?
Le code est pour du 8086 mais je pense que tu as quelque chose de plus évolué en tant que processeur et il faudrait travailler avec un code qui est en fonction du CPU.
Si j’ai compris tu ne travailles pas avec Emulateur8086.

A plus
42wawa42
w4kfu
Messages postés
8
Date d'inscription
jeudi 2 avril 2009
Statut
Membre
Dernière intervention
13 avril 2009
-
Bonjour 42wawa42 , non je ne travaille pas avec Emulateur8086 et j'ai comme CPU un Intel Core 2 Duo.
Mais sans me tromper la portion de code : .code XX86 n'est pas obligatoire à croire ?
Il faut que je mette .386 dans mon cas c'est bien cela ?
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
13 -
Faudrait surtout faire du 32 bits, voire du 64.
Le 16 bits était deja mort bien avant la fin du siècle dernier.
nasmologue1
Messages postés
3
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
4 octobre 2010
-
Bonjour ;

est ce qu'il y a quelqu'un qui peut m'aider ed'avoir des exercices corrigé de MASM32? Merci
DrMimo
Messages postés
1
Date d'inscription
mercredi 28 mars 2012
Statut
Membre
Dernière intervention
2 mars 2013
-
Bonjour!
Je suis un débutant et je veux savoir comment compiler (assembler) un programme avec le MASM j'ai insallé un, et je peux écrire un peu de code mais comment le teste?
Merci d'avance ...!

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)