Académique Documents
Professionnel Documents
Culture Documents
1.1- Introduction
Dans ce chapitre, nous allons aborder les trois sous titres suivants :
I- Généralités sur la programmation,
II- Le jeu d’instructions du µp, Intel 8085,
III- Méthode de programmation.
1 Dr. M. DJARALLAH
Chapitre 2 : La programmation en assembleur
Après l'édition de lien il est créé un fichier exécutable qui contient tout ce dont le programme a
besoin pour fonctionner de façon autonome. Le fichier ainsi créé possède une extension .exe (fichier
exécutable), ou .HEX flashable.
MOV :Elle permet de transférer les données (un octet ou un mot) d'un registre à un autre
registre ou d'un registre à une case mémoire, sa syntaxe est comme suit :
MOV rd, rs ; rd Å rs transfert du contenu de rs vers rd, 01001111 = 4Fh Æ MOV C,A
2 Dr. M. DJARALLAH
Chapitre 2 : La programmation en assembleur
Exemples :
MOV A, B ; Transfert d'un registre de 8 bits vers un registre de 8 BitsÆ 78h
MOV A, L ; Transfert d'un registre de 8 bits vers un registre de 8 bitsÆ 7Dh
MOV A, Val1 ; Transfert du contenu d'une case mémoire 8 bits vers AÆ ……
MOV Val2, A ; Transfert du contenu du A vers une case mémoire D'adresse Val2Æ ……
Remarque :
Il est strictement interdit de transférer le contenu d'une case mémoire vers une autre
case mémoire comme suit
MOV Val1, Val2
Pour remédier à se problème on va effectuer cette opération sur deux étapes :
MOV A, Val2
MOV Val1, A
MVI rd, val; rd Å val transfert (du contenu) de val vers le registre rd
Example:
MVI A,30H ; codé 3Eh et 30
ou
Val equ 30h
……………
……………
MVI A,val
Exemple :
MVI D, 8Bh
MVI C, 6Fh
MOV A, C
…………..
………….
Etc………
LXI rd16, val16; rd16Åval16 transfert d’1 val16 vers couple de registre ( rd16= BC, DE,HL)
Exemple:
LXI H,0520H; codée comme: 21 20 50 h
Exercice :
Poser l’explication convenable :
……………
LXI D, 2050; ………………………..
MVI A, 27; …………………………
LXI H, 2070; ……………………….
MOV M, A ;………………………..
………….
………….
3 Dr. M. DJARALLAH
Chapitre 2 : La programmation en assembleur
Exercice :
Poser l’explication convenable :
………………
LDA 8000h; ……………………
MOV B ,A
LDA 8001h; …………………….
…………..
Exemple
STA 3000h; 3000H ÅA transfert du contenu de A vers l’adresse 3000h
Exercice :
Poser l’explication convenable :
b) Instructions arithmétiques :
Les instructions arithmétiques sont données dans le tableau suivant :
Quelques instructions :
Adition
Syntaxe : ADD Destination, source
Exemple :
ADD 20h ; AÅA+20
ADD B ; AÅ A+B
Exercice:
Poser l’explication convenable :
…………………………
MVI D, 8Bh; ………….
MVI C, 6Fh; …………..
MOV A, C ; ……………
ADD D; ……………
STA 8000h; ……………
…………………………
4 Dr. M. DJARALLAH
Chapitre 2 : La programmation en assembleur
Addition du contenu de 8000h et de contenu 8001h ensuite le résultat est place dans 8002h.
Exercice :
Déterminer la tâche accomplie par ce programme :
Incrimination:
INR rd; rdÅrd+1
Le contenu du registre ou d’une case mémoire sont incrémentés par 1 et le résultat est stocké dans
la même place.
Si l’opérande est une case mémoire ; sa localisation est donnée dans la paire de registre
HL.
Exemple :
INR B; BÅB+1
INR M; Le contenu de la paire HL (adresse) est augmenté par 1
Exemple :
INX H; adresse contenue dans HL est incrémentée par 1
5 Dr. M. DJARALLAH
Chapitre 2 : La programmation en assembleur
Soustraction :
Exemples :
SUB A,B ; A Å A – B (Soustraction sur 8 bits )
Décrémentation :
Syntaxe :
DCR Destination
Elle permet de décrémenter le contenu de la destination
Destination Å Destination - 1
Le contenu du registre ou d’une case mémoire sont décrémentés par 1 et le résultat est stocké
dans la même place.
Si l’opérande est une case mémoire ; sa localisation est donnée dans la paire de registre
HL.
Exemple :
DCR B; BÅB-1
DCR M; Le contenu de la paire HL (adresse) est réduit par 1
Exemple :
DCX H; adresse contenue dans HL est décrémentée par 1
Exercice
Le contenu de 8000h est soustrait du de contenu de 8001h et le résultat est stocké dans 8002h.
c) Instruction logiques
CMP : (Comparaison)
Syntaxe : CMP Destination , Source
6 Dr. M. DJARALLAH
Chapitre 2 : La programmation en assembleur
Elle soustrait la source de la destination , qui peut être un octet ou un mot , le résultat n'est
pas mis dans la destination , en effet cette instruction touche uniquement les indicateurs pour être
tester avec une autre instruction ultérieure de saut conditionnel
; ………………...
………….
mvi b, 30H
mvi c, 40H
EGA:
Exercice: mov a, b mvi a, 01H
cmp c ………
……….
Déduire la tâche principale accomplie par ce programme jz EGA
jc GRD GRD:
puis ajouter les lignes manquantes. mov a,c
………. ………
……….
7 Dr. M. DJARALLAH
Chapitre 2 : La programmation en assembleur
RST: - Appelle aux cases mémoires par interruption (RST 0 vers 0000h, RST1 vers 0008h,
RST 2 vers 0010h, RST 3 vers 0018h, RST 4 vers 0020h, RST 5 vers 0028h, RST 6 vers
0030h, RST 7 vers 0038h).
NB : RST 1 Æ début du programme MONITOR du kit SYDICOM+ (curseur) ; donc,
généralement les programmes de ce kit terminent par cette instruction au lieu
HLT (arrêt).
8 Dr. M. DJARALLAH
Chapitre 2 : La programmation en assembleur
Elle permet de récupérer des données d'un port (donc de la périphérie) ou restituer des données à
un port, dans les deux cas s'il s'agit d'envoyer ou de recevoir un octet on utilise l'accumulateur A :
9 Dr. M. DJARALLAH
Chapitre 2 : La programmation en assembleur
10 Dr. M. DJARALLAH
Chapitre 2 : La programmation en assembleur
11 Dr. M. DJARALLAH
Chapitre 2 : La programmation en assembleur
Donc en conclusion pour assembler un programme on doit passer par les phases suivantes :
Remarque 1 :
On ne peut passer du code source vers le code objet que si le programme source ne présente
aucune erreur.
La saisie se fait par des logiciels qui s'appellent éditeurs de texte, donc on peut utiliser
n'importe quel éditeur de textes (tel que EDLINE sous MSDOS de Microsoft) sauf les
éditeurs sous Windows car ces éditeurs ajoutent dans le fichier des informations
(la taille des caractères, la police utilisée, la couleur etc...) que l'assembleur ne peut pas
comprendre .Pour utiliser les éditeurs sous Windows il est conseiller d'enregistrer les
fichiers sous forme RTF.
12 Dr. M. DJARALLAH
Chapitre 2 : La programmation en assembleur
Editeur de lien :
permet de lier plusieurs codes objets en un seul exécutable.
permet d'inclure des fonctions prédéfinies dans des bibliothèques.
Plusieurs logiciels permettent le passage entre les trois phases présentée dans la figure précédente
on peut citer : MASM (Microsoft Assembler : avec LINK comme éditeur de lien), TASM
(Turbo assembler : avec TLINK comme éditeur de lien) et NASM etc ...
Remarque 2 :
On peut générer à partir d'un fichier objet d'autres formes de fichier pour des systèmes autres que
l'ordinateur (compatible IBM). Les formes les plus connues sont INTEL HEX, ASCII HEX etc ...
Remarque 3 :
L'assembleur est utilisé pour être plus prés de la machine, pour savoir exactement les instructions
générées (pour contrôler ou optimiser une opération) On retrouve l'assembleur dans :
- la programmation des systèmes de base des machines (le pilotage du clavier, de l'écran, etc...),
- certaines parties du système d'exploitation,
- le pilotage de nouveaux périphériques (imprimantes, scanners, etc..
- l'accès aux ressources du système,
L'avantage donc de l'assembleur est de générer des programmes efficaces et rapides (à l'exécution)
par contre ses inconvénients : développement et mise au point long.
- Le champ opérande est un champ optionnel selon l'instruction (parfois l'instruction nécessite
une opérande et parfois non).
- Le champ commentaire : champ sans signification syntaxique et sémantique pour
l'assembleur , il est optionnel mais très intéressant lorsque on programme en assembleur,
en effet les instructions en assembleur sont des instructions élémentaires donc dans un
programme le nombre d'instructions et assez élevé (par exemple pour utiliser des fonctions tels que
COS ou SIN il faut réaliser ça en utilisant des opérations arithmétiques et logiques de base)
donc contrairement au langage évolué de programmation dans les programmes source on va
trouver plus d'instructions. Ce qui va rendre la compréhension des programmes assez délicate et
difficile. Pour cette raison lorsque on programme en assembleur il vaut mieux mettre des
commentaires pour que le programme soit lisible pour les utilisateurs.
Remarque :
Les commentaires sont mis en général dans les passages délicats.
- Le champ Label (étiquette) est destiné pour marquer une ligne qui sera la cible d'une instruction de
saut ou de branchement. Une label peut être formée par 31 caractère alphanumérique ({A.. Z} {a..
z} {0.. 9} {.?@_$}) au maximum .Les noms des registres ainsi que la représentation mnémonique
des instructions et les directives (voir plus loin) ne peuvent être utilisées comme Label. Le champ
Label doit se terminer par ' : ' et ne peut commencer par un chiffre. De même il n'y a
pas de distinction entre minuscules et majuscules.
Exemple :
13 Dr. M. DJARALLAH
Chapitre 2 : La programmation en assembleur
Exemple de directives :
Les directives de données : EQU :
Exemples :
VAL EQU 50 ; assigne la valeur 50 au nom VAL
ET1 EQU VAL* 5 + 1 ; assigne une expression calculer a VAL
DB/DW/
Ces deux directives sont utilisées pour déclarer les variables : L'assembleur attribue à
chaque variable une adresse. Dans le programme, on repère les variables grâce à leurs noms. Les
noms des variables sont composés d'une suite de 31 caractères au maximum, commençant
obligatoirement par une lettre. Le nom peut comporter des majuscules, des minuscules, des chiffres,
plus les caractères @, et _. Lors de la déclaration d'une variable, on peut lui affecter une valeur
initiale.
a) DB (Define byte): définit une variable de 8 bits : c a d elle réserve un espace mémoire d'un
octet : donc les valeurs qu'on peut stocker pour cette directive sont comprises entre 0 et 255
( pour les nombres non signés ) et de -128 jusqu'à 127 pour les nombres signés .
Vil DB 12H ; Définit une variable (un octet) de valeur Initiale 12.
Tab DB 18H, 15H, 13H ; définit un tableau de 3 cases
;(3 octet) Qui démarre à partir de l'adresse TAB.
Mess DB 'ISET' ; définit aussi un tableau mais les valeurs de chaque case
;n'est autre que le code ascii de chaque lettre.
Name DB ? ; définit une variable 8 bits de valeur initiale quelconque.
14 Dr. M. DJARALLAH
Chapitre 2 : La programmation en assembleur
b) DW ( define word) : définit une variable de 16 bits : c a d elle réserve un espace mémoire
d'un mot : donc les valeurs qu'on peut stocker pour cette directive sont comprises entre 0 et
65535 ( pour les nombres non signés ) et de -32768 jusqu'à 32767 pour les nombres signés .
15 Dr. M. DJARALLAH
Chapitre 2 : La programmation en assembleur
D’après la forme, et les définitions inclues, on peut donner un programme en LN-XASM, qui charge touts les registres
du 8085 par les valeurs indiquées (H=hexadécimal, d=décimal et b=binaire).
Org 7000h
Debut: ; Ce label marque le début des actions, rien que ça !!!!.
MVI A , cnst8 ; charger immédiatement la valeur de cnst8 dans le registre du 8085, A
MVI B , const8 ; même chose que l’étape précédente, mais pour B.
MVI C , 0d ; chargement de zéro, en décimal, dans C.
LXI D , const16 ; chargement immédiate d’une paire de registre HL par 2 octets ; MVI
; ne peut faire que pour un seul octet.
LXI H, const16 ; même chose que pour la paire DE.
RST 1 ; retour au programme monitor.
END
16 Dr. M. DJARALLAH
Chapitre 2 : La programmation en assembleur
Exercice:
Déduire la tâche du programme suivant:
Title ;……………………………………….
; Initialisation
pile equ 8000h
serv equ 9000h
rcmd equ 53h
porta equ 50h
portb equ 51h
mvi a, 00
out porta ; demi p‚riode … 0
call tempo
in portb
dcr a
jp serv ; activation de l'interruption logiciel
; par l'un des interrupteur du port b
jmp Gperiod
; sous-programme de temporisation
tempo push psw
mvi d, 212
boucle dcr d
jnz boucle
pop psw
ret
17 Dr. M. DJARALLAH