Vous êtes sur la page 1sur 16

REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET

POPULAIRE
MINISTERE DE L’ENSEIGNMENT SUPPERIEUR ET DE LA RECHERCHE
SCIENTIFIQUE
ECOLE NATIONALE POLYTECHNIQUE D’ORAN

DEPARTEMENT DE GENIE ELECTRIQUE


Compte Rendu N°03
Les multiplications et divisions les décalages et le tri à bulle

 Fait par : BENOUR Badereddine Habib


 Groupe : A1
 Chargé de TP : Mr ZEBBACH

Année universitaire : 2023/2024


But de TP :
1. Etablir des routines de multiplication et division pour le microprocesseur
z80
2. Etablir un programme de multiplication (méthode des additions
successives).
3. Etablir un programme de multiplication (la méthode des décalages
successifs).
4. Etablir un programme de division (la méthode des soustractions
successives).
5. Compatibilité du nombre de bits égaux à 1 dans un nombre de 32 bits.
6. Etablir un programme de tri à bulle.
I. Multiplication par addition successives :
Exercice 1 :
On va faire un programme qui multiplie deux nombre dont :
 Le multiplicande est dans le registre DE.
 Le multiplieur est dans le registre A
 Le résultat est dans le registre HL

 Le travail :
1. On établit l’organigramme sous forme d’un programme principal
qui appelle un S/P de multiplication nommé MULT8

Début S/P MULT8

DE 50 B A

HL 0
A 3

HL HL+DE
APPELLE LE S/P
MULT8
B B-1

Fin
NON OUI
B=0
Programme principale sous-programme

RET
2- On écrit le programme en langage assembleur
ORG 1800H
program
LD DE,val1
LD A,val2
CALL MULT8
HALT
MULT8: LD B,A
LD HL,0
LOOP: ADD HL,DE
DJNZ LOOP
RET
val1: EQU 25h
val2: EQU 4h
END program

3- On ouvre la fenêtre de l’éditeur de texte du simulateur et on saisit le


programme on vérifie le programme et on exécute le programme :
HL = 94h ; donc le résultat est correct.
37 X 4 = 148 = 94h
6- On modifie les valeurs de DE et A et on exécute le programme ; on remarque
qu’à chaque fois que le résultat est correct.

II. Multiplication par décalage successifs :


Exercice 02 :
Le programme :
ORG 1800H
program
LD HL,0
LD DE,MULTC
LD A,MUL
LOOP0:
SRL A
JP NC,LOOP1
ADD HL,DE
LOOP1:
JP Z,LOOP2
EX DE,HL
ADD HL,HL
EX DE,HL
JP LOOP0
LOOP2:
HALT
MULTC: EQU 20
MUL: EQU 5
END program
3- On saisit le programme
4- On vérifie le programme

5- On exécute le programme

Le registre HL contient le résultat après l’exécution du programme HL= 64h


On remarque que le résultat est juste car : 20*5=100=64h
6- On modifie les valeurs de DE et A ; on remarque que le résultat est juste.

III. Division par soustraction successives :


Exercice 03 :
1. On établit l’organigramme

Début DIV

HL 16 B 0

carry 0
DE 3

HL HL-DE-carry
APPELLE LE S/P DIV

Fin M=1
OUI

NON HL HL+DE
B B+1
RET
1. le programme :
ORG 1800H
LD HL,16
LD DE,3
CALL DIV
HALT
DIV: LD B,0
LOOP: XOR A
SBC HL,DE
JP M,LOOP1
INC B
JP LOOP
LOOP1 : ADD HL,DE
RET
END
2. On assemble le programme

3. On le charge dans la mémoire central, L’adresse de l’instruction d’appel


du S/P est : 1806h
4. On exécute le programme, on remarque que le résultat de division est
juste.
 Le registre HL=0001h (le reste)
 Le registre B= 07h (quotient)

Exercice 04 :
Le programme :
ORG 1800H
program
LD IX,0
LD HL,val1
EXX
LD HL,val2
LD A,L
CALL CONTBT
LD A,H
CALL CONTBT
EXX
LD A,L
CALL CONTBT
LD A,H
CALL CONTBT
HALT
CONTBT:
LD B,8
LOOP1:
RR A
JP NC,LOOP
INC IX
LOOP:
DJNZ LOOP1
RET
val1: EQU 0c5feh
val2: EQU 0bcf7h
END program

1. On saisit le programme dans la fenêtre de l’éditeur et le sauvegarder.


2. On le charge dans la mémoire centrale puis on l’exécute pas à pas
3. On observe qu’après chaque instruction d’appel ; l’adresse qui se suit va
enregistrer dans la pile
4. Le registre IX contient le résultat , 13h=19 bits égaux a 1
5. Commentaire :
 Lors l’exécution du programme on remarque que lorsqu’ l’appel de S/P
l’instruction CALL enregistre l’adresse de l’instruction qui la suit dans la
pile, le S/P se termine par RET , cette dernière examine le contenu de la
pile et revient à cette adresse.
 Le nombre des bits égaux a 1 est correct

 Questions :
 Ce qui nous a obligé d’utiliser S/P CONTBT 4 fois que pour tester un
nombre de 32 bits il faut test chaque registre
 L’avantage d’utiliser un sous-programme est de réduire la taille de
programme.
 De préférence d’utiliser le sous-programme comme un module dans un
programme pour ne pas consommer d’espace mémoire lors d’exécution
du programme, c.à.d. la mémoire à utiliser dans le cas où le programme
contient un sous-programme est moins qu’on inclut le sous-programme
comme des instructions du programme principal.

Exercice 05 :

Le programme :

ORG 1800H
program
loop3:
LD IX,1850H
LD B,nmax
DEC B
LD C,0
LD A,L
loop2:
LD A,(IX+0)
CP (IX+1)
JP Z,loop1
JP C,loop1
LD D,(IX+1)
LD (IX+1),A
LD (IX+0),D
LD C,1
loop1:

INC IX
DJNZ LOOP2
BIT 0,C
JP NZ,loop3
HALT
nmax: EQU 15
END program

Exemple 01
1. On charge les valeurs du tableau suivant :
Case mémoires Valeur
1850H 10
1851H 05
1852H 10
1853H 01
1854H 04
1855H 02
1856H 13
1857H 03
1858H 12
1859H 06
185AH 08
185BH 07
185CH 11
185DH O9
185EH 14
Apres l’exécution :
4- On observe que la tableau est tirer dans un ordre croissant

Exemple 02 :

1. On modifie le programme pour qu’il fasse le tri des lettres de l’alphabet


introduites

1850H 1851H 1852H 1853H 1854H 1855H 1856H 1857H 1858H 1859H 185A 185BH 185CH
H
r i o k t z f q v c n u h
72h 69h 6Fh 6Bh 74h 7Ah 66h 71h 76h 63h 6Eh 75h 68h
185D 185EH 185FH 1860H 1861H 1862H 1863H 1864H 1865H 1866H 1867H 1868H 1869
H
e m y b l w g p s a x d j
65h 6Dh 79h 62h 6Ch 77h 67h 70h 73h 61h 78h 64h 6Ah
Apres exécution du programme on remarque que les alphabets sont classés de
aàa

Case Lettr
mémoires e
1850H a
1851H b
1852H c
1853H d
1854H e
1855H f
1856H g
1857H h
1858H i
1859H j
185AH k
185BH l
185CH m
185DH n
185EH o
185FH p
1860H q
1861H r
1862H s
1863H t
1864H u
1865H v
1866H w
1867H x
1868H y
1869H z

Vous aimerez peut-être aussi