Palindrome en ASM

bugs2600 Messages postés 14 Date d'inscription dimanche 24 novembre 2002 Statut Membre Dernière intervention 6 septembre 2008 - 30 janv. 2003 à 18:06
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 - 13 avril 2003 à 20:59
Salut,

Quelqu'un pourrait-il m'aider, je suis débutant en asm et je dois faire un exrecice sur un palindrome c'est-à-dire que je dois entrer au clavier un mot ou une phrase il le programme dois dire si c'est un palindrome ou non?

Merci d'avance

1 réponse

CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
13 avril 2003 à 20:59
Voici l'exemple d'un source:

;---------------------------------------------------
; assembleur: TASM
; Taille saisie max: 80 caractères

.model small
.386

TAILLE_MAX equ 80

pile segment use16
db 1000h dup(?)
pile ends

data segment use16 stack
buffer db TAILLE_MAX + 1
nbCar db 0
chaine db (TAILLE_MAX + 1) dup(?)
resPos db "Ce mot est un palindrome", 13, 10, '$'
resNeg db "Ce mot n'est pas un palindrome", 13, 10, '$'
nbMess db 10
nbConv db "00"
db " caracteres saisis", 13, 10, '$'
noCarMess db "Aucun caractere saisi", 13, 10, '$'
fin db 1000h dup(0) ; Evite les effets de bord
data ends

code segment use16
assume cs:code, ds: data, es: data, ss: pile

start:
push data ; Initialisation
push data
pop ds
pop es
cld

mov dx, offset buffer ; Saisie de la chaine
mov ax, 0A00h
int 21h

mov di, offset nbConv ; Teste du nombre de caractères
xor dx, dx
xor ax, ax
mov al, byte ptr [nbCar]
push ax
or al, al
jnz convertCar

mov dx, offset noCarMess
mov ah, 9
int 21h

mov al, 2 ; Code retour 2
jmp short termine

convertCar:
mov bx, 10 ; Conversion du nombre de caractères
div bx
add al, '0'
add dl, '0'
stosb
xchg ax, dx
stosb

mov dx, offset nbMess ; Affichage du nombre de caractères
mov ah, 9
int 21h

pop cx ; Cherher la fin du mot
mov si, offset chaine
mov di, si

chercherMotLoop:
lodsb
or al, 32h ; Mettre en minuscule
stosb
cmp al, ' '
loopne chercherMotLoop

cherchePalind: ; Verifier que le mot est un palindrome
dec si
mov di, offset chaine

cherchePalindLoop:
cmpsb
jne pasTrouve
sub si, 2
cmp si, di
jnbe cherchePalindLoop

trouve:
mov dx, offset resPos
mov ah, 9
int 21h

xor ax, ax ; Code retour 0
jmp short termine

pasTrouve:
mov dx, offset resNeg
mov ah, 9
int 21h

mov al, 1 ; Code retour 1

termine:
mov ah, 4Ch
int 21h
code ends

end start

; Fin du source
;---------------------------------------------------

Core Breaker :)
0
Rejoignez-nous