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') ?
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