Solution de la s5

Transcription

Solution de la s5
Solution de la Série de TD N° : 5
Le Traitement des Chaines de Données
Ecrire des programmes en Assembleur 8086 qui permettent de :
1. Concaténer deux chaines de caractères ch1 et ch2 en une seule chaine ch3.
Concaténer deux chaines de caractères pour former une seule chaine reviens à copier la
première et la deuxième à l’offset de la troisième.
JMP Start
Ch1 db 'hello '
Ch2 db 'world!'
Ch3 db ''
Start :
MOV SI, offset Ch1
MOV DI, offset Ch3
MOV CX,6
REP MOVSB
MOV SI, offset Ch2
MOV CX,6
REP MOVSB
HLT
2. Convertir une chaine de minuscules en majuscules.
Le code ASCII du caractère ‘a’ est 61h, et le code de ‘A’ est 41h. Pour convertir un
caractère majuscule en minuscule, on ajoute 20h à son code ASCII. Pour convertir un
caractère minuscule majuscule en soustrait 20h de son code ASCII.
JMP Start
MSG1 DB 'allo'
Start :
MSG2 DB ''
MOV SI, offset MSG1
MOV DI, offset MSG2
BOUCLE:
MOV CX,4
LODSB
SUB AL,20H
STOSB
Solution de la Série de TD N° : 4
LOOP BOUCLE
HLT
3. Calculer le nombre de caractère ‘e’ dans une chaine de caractères ch. Le résultat sera
stocké dans un registre.
JMP START
START:
Ch DB 'Les chaines de caracteres'
MOV DI,offset Ch
MOV CX,25
MOV BL,0
MOV AL,'e'
BOUCLE:
SCASB
JNE NEXT
INC BL
NEXT:
LOOP BOUCLE
HLT
4. De déterminer la longueur d’une chaîne de caractères.
Pour déterminer la longueur d’une chaine de caractère on doit spécifier un caractère de
fin. Dans cet exercice on suppose que le caractère qui indique la fin de la chaine est ‘$’.
JMP Start
MSG1 DB 'Une phrase se termine par un point.$'
Start:
Boucle:
MOV DI,offset MSG1
MOV BL,0
MOV AL,'$'
SCASB
JE FIN
INC BL
JMP BOUCLE
Fin:
HLT
5. D’indiquer la présence de la chaîne de caractères ‘TEC568’, dans un tableau de
caractères de N éléments.
Si la chaine est présente dans le tableau le registre AL = 1. Si non AL = 0.
JMP Start
Tableau DB 'Les chaines de caracteres sont des suites de caracteres TEC586
ranges en memoire.'
MSG DB 'TEC586'
Solution de la Série de TD N° : 4
Start:
MOV SI,offset Tableau
MOV AL,0
MOV CX,77
Boucle:
PUSH CX
MOV DI,offset MSG
MOV CX,6
REPE CMPSB
JNE Next
MOV AL,1
JMP Fin
Next:
POP CX
LOOP Boucle
Fin:
HLT
6. De décider si un mot est un palindrome. Si le mot considéré est palindrome le registre
AL = 1. Si non AL = 0.
JMP Start
Mot DB 'RADAR'
Inv DB ''
Start:
MOV SI,offset mot
MOV DI,offset inv
ADD DI,4
MOV CX,5
Boucle:
MOV AL,[SI]
MOV [DI],AL
INC SI
DEC DI
LOOP Boucle
MOV SI, offset Mot
MOV DI,offset Inv
MOV CX,5
REPE CMPSB
JNE Non
MOV AL,1
JMP Fin
Non:
Fin:
MOV AL,0
HLT