Retour au site
Connexion : S'inscrire

2 messages
Filtrer ok

[ASM] Palindrome

Un expert informatique vous aide immédiatement par téléphone.
Bonjour,

Voila, j'ai écrit un palindrome en ASM. Je demande à l'utilisateur d'entrer un mot et je lui dit si c'est un palindrome ou pas meme si il tape des virgules ou autre. (,:,;,::,:k:;,:;,,y ak => palindrome).
Pour saisir la chaine de caractere j'utilise la fonction 09h. Et je voudrais savoir comment je pourrait récuperer seulement le mot 'kayak'(voir exemple) pour l'afficher et afficher sa symetrie également (j'entend par là 'KAY') ?

Exemple de ce que je veut faire :

Utilisateur entre une chaine de caractere: :;:;:;::;ka :;:ya K

Résultat: 'kayaK' est un palindrome
Dont la symetrie est 'KAY'

Si vous pouviez m'aider ? MERCI

Programme:


Code :

Code :

.MODEL SMALL  
.STACK  
.DATA
  
   titre DB "PALINDROME$"
   slign DB "----------$"
   carintro Db "Entrer une chaine de caracteres : $"  
   carjuste DB 0ah, 0dh, "La chaine que vous avez entree est un palindrome !$"  
   carfaux DB 0ah, 0dh, "La chaine que vous avez entree n'est pas un palindrome !$"  
   recommencer DB 'Appuyer sur ENTER pour recommencer ou sur ESC pour arreter$'
   vecteur DB 250, ?, 251 dup ('$')
   vecteur2 DB 250, ?, 251 dup ('$')

.CODE  
 
MAINPROG :
  
   MOV AX, @DATA  
   MOV DS, AX

   MOV AH, 0Fh
   INT 10h

   MOV AH, 0h
   INT 10h

   MOV DH, 3
   MOV DL, 30
   MOV AH, 02h
   INT 10h
   MOV AX, 0900h
   LEA DX, titre
   INT 21h

   MOV DH, 4
   MOV DL, 30
   MOV AH, 02h
   INT 10h
   MOV AX, 0900h
   LEA DX, slign
   INT 21h
   
   MOV DH, 6
   MOV DL, 0
   MOV AH, 02h
   INT 10h
   MOV AX, 0900h   
   LEA DX, carintro  
   INT 21h                      
 
   MOV AH, 0Ah  
   LEA DX, vecteur  
   int 21h

PLACE:

   MOV SI, 2  
   MOV BX, OFFSET vecteur
   MOV AL, [BX + 1]
   MOV AH, 0
   MOV DI, AX
   INC DI
   PUSH DI   

PALINDROME:   
  
   CMP SI, DI  
   JB COMPARAISON_SI

SAUTFIN1:
   JMP FIN1
 
COMPARAISON_SI:
 
   CMP vecteur[SI], 30h  
   JB SI_PONCTUATION
   CMP vecteur[SI], 39h  
   JBE OK_SI
   
   CMP vecteur[SI], 41h  
   JB SI_PONCTUATION
   CMP vecteur[SI], 5Ah  
   JBE OK_SI
   
   CMP vecteur[SI], 61h  
   JB SI_PONCTUATION
   CMP vecteur[SI], 7Ah  
   JBE MAJ_SI
   
   CMP vecteur[SI], 82h
   JE MAJ_é_SI
   
   CMP vecteur[SI], 85h
   JE MAJ_à_SI
   
   CMP vecteur[SI], 88h
   JE MAJ_ê_SI
   
   CMP vecteur[SI], 8Ah
   JE MAJ_è_SI

SI_PONCTUATION:
  
   INC SI  
   JMP PALINDROME
   
MAJ_SI:

   SUB vecteur[SI], 20h
   JMP OK_SI

MAJ_é_SI:

   SUB vecteur[SI], 37h
   JMP OK_SI

MAJ_à_SI:

   SUB vecteur[SI], 44h
   JMP OK_SI

MAJ_ê_SI:

   SUB vecteur[SI], 43h
   JMP OK_SI

MAJ_è_SI:

   SUB vecteur[SI], 69h
   
OK_SI:

   MOV DL, vecteur[SI]   

COMPARAISON_DI:
 
   CMP vecteur[DI], 30h  
   JB DI_PONCTUATION
   CMP vecteur[DI], 39h  
   JBE VERIFICATION
   
   CMP vecteur[DI], 41h  
   JB DI_PONCTUATION
   CMP vecteur[DI], 5Ah  
   JBE VERIFICATION
   
   CMP vecteur[DI], 61h  
   JB DI_PONCTUATION
   CMP vecteur[DI], 7Ah  
   JBE MAJ_DI
   
   CMP vecteur[DI], 82h
   JE MAJ_é_DI
   
   CMP vecteur[DI], 85h
   JE MAJ_à_DI
   
   CMP vecteur[DI], 88h
   JE MAJ_ê_DI
   
   CMP vecteur[DI], 8Ah
   JE MAJ_è_DI

DI_PONCTUATION:

   DEC DI  
   JMP PALINDROME
   
MAJ_DI:

   SUB vecteur[DI], 20h
   JMP VERIFICATION

MAJ_é_DI:

   SUB vecteur[DI], 37h
   JMP VERIFICATION

MAJ_à_DI:

   SUB vecteur[DI], 44h
   JMP VERIFICATION

MAJ_ê_DI:

   SUB vecteur[DI], 43h
   JMP VERIFICATION

MAJ_è_DI:

   SUB vecteur[DI], 69h
         
VERIFICATION: 
   
   CMP vecteur[DI], DL  
   JNE FIN2  
   DEC DI  
   INC SI  
   JMP PALINDROME     

FIN1:
   
   MOV DH, 10
   MOV DL, 0                   
   MOV AH, 02h
   INT 10h
   MOV AX, 0900h              
   LEA DX, carjuste  
   INT 21h  
   MOV AX, 0900h              
   LEA DX, vecteur2  
   INT 21h  
   JMP RECOMMENCE  
 
FIN2:
  
   MOV DH, 10
   MOV DL, 0                   
   MOV AH, 02h
   INT 10h
   MOV AX, 0900h                
   LEA DX, carfaux  
   INT 21h

RECOMMENCE:

   MOV DH, 15
   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
   JMP MAINPROG
 
QUIT:
 
   MOV AX, 4C00h  
   INT 21h  
 
END
 
 
Bonjour,
je suis halluciné qu'on fasse encore de l'assembleur DOS, ça marche sous Windows ton prog?
Bon sinon, sans rentrer dans le détail assembleur, je suppose que l'interruption renvoie un code ascii? si oui, il faut ignorer les code ascii qui ne sont pas compris entre 'a' et 'z' ou 'A' et 'Z', donc en faisant une série de CMP ça doit le faire. Je pense qu' l'assembleur a une syntaxe pour rentrer directement les lettres (comme en C) sinon, tapper les codes ascii: lettres => >=61 et <=7A ou >=41 et <=5A
 
 

|
 
2 messages
Un expert informatique vous aide immédiatement par téléphone.
Filtrer ok
 
Vous devez être connecté pour écrire un message !
 

 Sujets Similaires: