CoreBreaker
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
13 avril 2003 à 21:26
Version définitive
Voici l'exemple d'un source qui tient compte des espaces qui ne fait aucune différence entre majuscule et minuscule mais pas pour les accents. De plus lors de la saisie, tu ne dois pas appuyer sur les touches F (F1 à F12).
;---------------------------------------------------
; 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
invite db "Veuillez saisir une chaine:", 13, 10, '$'
mot db "Mot saisi:", 13, 10, '$'
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 invite ; Affichage de l'invite
mov ah, 9
int 21h
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, 20h ; Mettre en minuscule
stosb
cmp al, ' '
loopne chercherMotLoop
mov al, 13
stosb
mov al, 10
stosb
mov al, '$'
stosb
mov ah, 9
mov dx, offset mot
int 21h
mov ah, 9
mov dx, offset chaine
int 21h
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 :)