Vous êtes sur la page 1sur 16

DIMA DIMA

JBILO
Solution :
Solution :
7. Calculer le factoriel d’un nombre entier n de 8 bits (stocké en mémoire à l’adresse
0210H)
noté n!. Le résultat doit être stocké en mémoire à l’adresse 0220H.
- Quelle peut être la taille du résultat ?
Pour calculer le factoriel d’un nombre on effectue des opérations de multiplication, le
résultat pourra être un nombre de 32 bits.
- Quelle condition doit satisfaire le nombre n pour qu’il n’y ait pas dépassement de
cette taille ?
Le plus grand nombre qu’on peut représenter sur 32 bits est 232 – 1 = 4294967295.
Pour ne peut dépasser la taille de 32 bits, il faut que : n! ≤ 4294967295.
C’est-à-dire : n ≤ 11.
- Il faut prendre en considération le cas 0! = 1.
Le programme :
MOV AX, [0210H]
MOV DX, 0
CMP AX, 0
JNZ NONZERO
MOV AX, 1
JMP FIN
NONZERO: MOV CX, AX
DEC CX
FACTORIAL: MUL CX
LOOP FACTORIAL
FIN: MOV [0220H], AX
MOV [0222H], DX
HLT
Calculer la somme des nombre entiers pairs (de 0 à 100) et stocker le résultat dans le
registre BX.
Calculer la somme des nombre entiers impairs (de 0 à 100) et stocker le résultat dans le
registre DX.
Le programme doit utiliser une seule boucle.
Le programme :
MOV CX, 100
MOV BX, 0
MOV DX, 0
B1: MOV AX, 1
AND AX, CX
JZ Pair
ADD DX, CX
JMP Next
Pair: ADD BX, CX
Next: LOOP B1
HLT

5. Trier par ordre croissant (du plus petit au plus grand) les 50 éléments d’un tableau stocké
en mémoire à l’adresse 300H.
Le programme :
MOV CX, 50
MOV SI, 300H
B1: MOV AL, [SI]
PUSH CX
DEC CX
CMP CX, 1
JL Fin
B2: MOV BX, CX
CMP AL, [BX + SI]
JNG Next
XCHG AL, [BX + SI]
MOV [SI], AL
Next: LOOP B2
INC SI
Fin: POP CX
LOOP B1
HLT
4. Compter le nombre de 1 dans un mot binaire de 16 bits (contenu dans AX). Le résultat
sera stocké dans la case mémoire d’adresse 1200H.
Le programme :
MOV CX, 16
MOV BL, 0
B1: SHR AX, 1
JNC Next
INC BL
Next: LOOP B1
MOV [1200H], BL
HLT

3. Compter le nombre d’éléments nuls dans un tableau de 100 octets stockés en mémoire
à partir de l’adresse 200H. Le résultat sera stocké dans la case mémoire d’adresse 400H.
Le programme :
MOV CX, 100
MOV SI, 200H
MOV BL, 0
B1: CMP [SI], 0
JNE Next
INC BL
Next: INC SI
LOOP B1
MOV [400H], BL
HLT

2. Evaluer l’expression suivante et stocker le résultat en mémoire à l’adresse 0300H :


Y = 2x2 + 3x - 1.
Tel que x est un nombre positif (1 octet) stocké en mémoire à l’adresse 0100H.
Le programme :
MOV AL, [0100H]
MUL [0100H]
MOV BX, 2
MUL BX
XCHG AX, BX
MOV AX, 3
MUL [0100H]
DEC AX
ADD AX, BX
ADC DX, 0
MOV [0300H], AX
MOV [0302H], DX
HLT
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'
MSG2 DB ''
Start : MOV SI, offset MSG1
MOV DI, offset MSG2
MOV CX,4
BOUCLE: LODSB
SUB AL,20H
STOSB
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
Ch DB 'Les chaines de caracteres'
START: 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: MOV DI,offset MSG1
MOV BL,0
MOV AL,'$'
Boucle: 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'

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: MOV AL,0
Fin: HLT

Vous aimerez peut-être aussi