Académique Documents
Professionnel Documents
Culture Documents
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
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
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