Entrer au clavier une chaine de caractère et programme cherche les mot palindromes et les affiche a l'écran.
Source / Exemple :
.MODEL SMALL
.STACK
.DATA
Titre db "TP Architecture: mots palindromes dans un texte",10,13,"$"
Université db "UNIVERSITE A MIRA DE BEJAIA",10,13,"$"
Faculté db "FACULTE DE SCIENCES EXACTES",10,13,"$"
Département db "DEPARTEMENT D'INFORMATIQUE",10,13,"$"
Ligne DB "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~$"
msg1 Db "Entrer une chaine de caracteres : $"
msg2 DB 0ah, 0dh, "Les mots palindromes dans le texte sont: $"
msg3 DB 0ah, 0dh, "Le texte n'a pas de mots palindromes! ",10,13,"$"
msg4 DB 0ah, 0dh, "Le nombre des mots plindromes est: $"
mgs1a db "ANNEE UNIVERSITAIRE 2007_2008",10,13,"$"
mgs2a db "TINSALHI FAOUZI",10,13,"$"
realiser db "TARVAIL REALISER PAR :",10,13,"$"
recommencer DB 'VEUILLEZ FAIRE VOTRE CHOIX: ENTER POUR RECOMMENCER/ ESC POUR SORTIR.$'
tab DB 250, ?, 251 dup ('$')
A DW ?
B DW ?
C DW ?
L DB 11
K DB 5
.CODE
MAIN PROC
DEBUT:
MOV AX, @DATA
MOV DS, AX
MOV AH, 0Fh
INT 10h
MOV AH, 0h
INT 10h
MOV DH,5
MOV DL,15
MOV AH, 02h
INT 10H
mov ax,0900h
lea dx,Titre
int 21h
MOV DH,1
MOV DL,50
MOV AH, 02h
INT 10H
mov ax,0900h
lea dx,Université
int 21h
MOV DH,2
MOV DL,50
MOV AH, 02h
INT 10H
mov ax,0900h
lea dx,Faculté
int 21h
MOV DH,3
MOV DL,50
MOV AH, 02h
INT 10H
mov ax,0900h
lea dx,Département
int 21h
MOV DH, 6
MOV DL, 20
MOV AH, 02h
INT 10h
MOV AX, 0900h
LEA DX, Ligne
INT 21h
MOV DH, 8
MOV DL, 0
MOV AH, 02h
INT 10h
MOV AX, 0900h
LEA DX, msg1
INT 21h
MOV AH, 0Ah
LEA DX, tab
int 21h
PLACE:
MOV SI, 2
MOV BX, OFFSET tab
MOV AL, [BX + 1]
MOV AH, 0
INC AX
MOV A,AX
MOV C,0
;**************************************tester la fin de texte********************************************************
TESTER:
CMP SI, A
JBE RANGER
JMP FIN1
RANGER:
MOV BX,SI
MOV CX,0
;***************************************** SAUTER LES PONCTUATION DE TEXTE ****************************************
SAUTER_VIDE:
CMP tab[SI], 3Fh ;Comparaison pour les caractères ! " # $ % & ' ( ) * + , - . /O 1 .... 9: ; < = > ?
JB VID_SI
CMP tab[SI], 5Bh ;Comparaison pour les caractères A B C ... Z
JB TRANSFORMER
CMP tab[SI], 60h ;Comparaison pour les caractères [ \ ] ^ _
JB VID_SI
CMP tab[SI], 7Bh ;Comparaison pour les caractères a b c ... z
JB TRANSFORMER
CMP tab[SI], 7Fh ;Comparaison pour les caractères | ~
JB VID_SI
MOV BX,SI ;Sauvgarder dans BX le debut du prochain mot a verifier
JMP TRANSFORMER
VID_SI:
INC SI
mov bx,si
JMP TESTER
;*************************************quelques transformations d'un etat à un autre *******************************
TRANSFORMER:
CMP tab[SI], 40h ;Comparaison pour les caractères ! " # $ % & ' ( ) * + , - . /0 1 ... 9: ; < = > ?
JB FIN_MOT
CMP tab[SI], 5Ah ;Comparaison pour les caractères A B C ... Z
JBE VALIDER
CMP tab[SI], 61h ;Comparaison pour les caractères [ \ ] ^ _
JB FIN_MOT
CMP tab[SI], 7Ah ;Comparaison pour les caractères a b c ... z
JBE MAJUSCULE
CMP tab[SI], 82h ;Comparaison pour les caractères é
JE EGALE_é_e
CMP tab[SI], 85h ;Comparaison pour les caractères à
JE EGALE_à_a
CMP tab[SI], 88h ;Comparaison pour les caractères ê
JE EGALE_ê_e
CMP tab[SI], 8Ah ;Comparaison pour les caractères è
JE EGALE_è_e
CMP tab[SI], 97h ;Comparaison pour les caractères ù
JE EGALE_ù_u
MAJUSCULE:
SUB tab[SI], 20h
JMP VALIDER
EGALE_é_e:
SUB tab[SI], 3Dh
JMP VALIDER
EGALE_à_a:
SUB tab[SI], 44h
JMP VALIDER
EGALE_ê_e:
SUB tab[SI], 43h
JMP VALIDER
EGALE_è_e:
SUB tab[SI], 45h
JMP VALIDER
EGALE_ù_u:
SUB tab[SI], 42h
JMP VALIDER
;***********************************valider les transformations*************************************************************
VALIDER:
MOV DL,tab[SI]
MOV DH,0
PUSH DX
INC CX
INC SI
JMP TRANSFORMER
;*************************************reperer un mot du texte*************************************************************
FIN_MOT:
MOV B,SI
DEC SI ;Sauvgerder les paralettres
MOV DI,SI ;du nouveau mot a verifier
MOV SI,BX
CMP tab[SI+1], 27h
JE SUITE
JMP VERIFICATION
;*******************************verifier le mot**************************************************************************
VERIFICATION:
MOV DL,tab[SI]
CMP tab[DI],DL
JNE SUITE
INC SI
DEC DI
CMP SI,DI
JA AFFICHAGE
JMP VERIFICATION
SUITE:
MOV SI,B
INC SI
JMP TESTER
;*******************************AFFICHAGE DU MOT**************************************************************************
AFFICHAGE:
CMP C,0
JNE AFFICHAGE1
MOV DH, 9
MOV DL, 5
MOV AH, 02h
INT 10h
MOV AX, 0900h
LEA DX, msg2
INT 21h
AFFICHAGE1:
INC C
cmp c,8
je AFFICHAGE2
cmp c,15
je AFFICHAGE2
CMP C,22
je AFFICHAGE2
jmp AFFICHAGE3
AFFICHAGE2:
add k,15
mov l,11
AFFICHAGE3:
INC L
MOV DH, L
MOV DL, k
MOV AH, 02h
INT 10h
AFFICHAGE4:
POP DX
mov ah,02
int 21h
DEC CX
CMP CX,0
JNE AFFICHAGE4
JMP SUITE
FIN1:
CMP c,0
JE FIN2
MOV DH, 19
MOV DL, 0
MOV AH, 02h
INT 10h
MOV AX, 0900h
LEA DX, msg4
INT 21h
Mov Ax,C
mov bx,10
mov cx,0
boucle1:
mov dx,0
div bx
push dx
inc cx
cmp ax,0
je boucle2
jmp boucle1
boucle2:
pop dx
add dx,48
mov ah,2
int 21h
dec cx
cmp cx,0
jne boucle2
fboucle2:
JMP RECOMMENCE
FIN2:
MOV DH, 9
MOV DL, 0
MOV AH, 02h
INT 10h
MOV AX, 0900h
LEA DX, msg3
INT 21h
JMP RECOMMENCE
RECOMMENCE:
MOV DH, 23
MOV DL, 10
MOV AH, 02h
INT 10h
MOV DX, OFFSET recommencer
PUSH AX
MOV AX, 0900h
INT 21h
POP AX
MOV AH, 01h
INT 21h
CMP AL, 1Bh
JE QUIT
MOV L,11
mov k,5
JMP DEBUT
QUIT:
MOV AH, 0Fh
INT 10h
MOV AH, 0h
INT 10h
MOV DH,3
MOV DL,10
MOV AH, 02h
INT 10H
mov ax,0900h
lea dx,realiser
int 21h
MOV DH,5
MOV DL,30
MOV AH, 02h
INT 10H
mov ax,0900h
lea dx,mgs2a
int 21h
MOV DH,6
MOV DL,30
MOV AH, 02h
INT 10H
mov ax,0900h
lea dx,mgs1a
int 21h
MOV AX, 4C00h
INT 21h
main endp
END main
Conclusion :
ce code source ne vérifie pas toutes les lettres et les caractère spéciaux, et vous pouvez le modifier.
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.