Vous êtes sur la page 1sur 17

Chapitre 2 : La programmation en assembleur

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.2- Généralités sur la programmation


I- Langages informatiques
Les langages informatiques sont destinés à décrire l'ensemble des informations, des actions
consécutives qu'un ordinateur doit exécuter. Le langage utilisé par le processeur est le langage
machine encore appelé langage binaire. Toutefois le langage machine n'est pas facilement
compréhensible par l'homme, il faut donc utiliser un langage intermédiaire (assembleur) qui sera
ensuite transformé en langage machine pour être exploité par le processeur. Le langage assembleur
est donc le premier langage informatique qui a été utilisé. Cependant il dépend du type de
processeur, il n'est pas portable.
Les langages informatiques ont plusieurs avantages:
- Ils sont facilement compréhensibles que le langage machine.
- Ils permettent une plus grande probabilité. En général on classe les langages informatiques en
trois catégories:
1. Les langages interprétés.
2. Les langages compilés.
3. Les langages intermédiaires.
a)- Le langage interprété
Un programme écrit dans un langage interprété a besoin d'un auxiliaire (interprétateur) pour
traduire au fur et à mesure les instructions du programme, exemple: MathLab, Prolog, SciLab etc.
b)- Le langage compilé
Un programme écrit dans un langage compilé va être traduit une fois toute par un
programme annexe (compilateur) afin de générer un nouveau fichier autonome.
Les avantages d'un langage compilé sont:
- C'est un langage autonome car il n'a pas besoin d'un programme annexe pour s'exécuter. De
plus la traduction étant faite une fois pour toute, il est plus rapide à l'exécution.
- Il garantit une sécurité du code source, exemple: le Pascal, le C, le C++, le Fortan etc.
c)- Le langage intermédiaire
Ce sont des langages qui appartiennent aux deux premières catégories, exemple: assembleur, Java,
Python etc.

II- Introduction à la programmation


Un programme est une succession d'instruction exécutable par l'ordinateur. En général un
programme est un simple fichier texte (écrit dans un éditeur de texte), appelé fichier source.
Un fichier source contient des lignes de programme appelé code source. Le fichier source une fois
terminé doit être compilé (traduit à un code exécutable).

La compilation se déroule en deux étapes:


- Le compilateur transforme le code source en code objet (il traduit le fichier en langage
machine) et la sauvegarde dans un fichier objet.
- Le compilateur fait ensuite appel à un éditeur de lien encore appelé (linker ou binder) qui
permet d'intégrer dans le fichier final tous les éléments annexes (les fonctions ou les librairies)
auxquels le programme fait référence.

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.

1.3- Le jeu d’instructions du µp, Intel 8085

On peut diviser les instructions du 8086/88 en 6 groupes comme suit :


ƒ Instructions de transfert de données.
ƒ Instructions arithmétiques.
ƒ Instructions de bits (logiques).
ƒ Instructions de sauts de programme.
ƒ Instructions E/S et de commande et d’interruptions.

a) Les instructions de transfert de données :


Ils sont montrées dans le tableau suivant :

Les instructions d'usage général :Æ Quelques instructions du tableau précédant

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 destination, source :

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

LDA adr; A Å adr transfert du contenu de l’adresse Adr vers l’accumulateur A


Exemple:
LDA 2134h ; codée 3A 34 21h.

Exercice :
Poser l’explication convenable :
………………
LDA 8000h; ……………………
MOV B ,A
LDA 8001h; …………………….
…………..

STA adr, adrÅA transfert du contenu de A vers l’adresse adr

Exemple
STA 3000h; 3000H ÅA transfert du contenu de A vers l’adresse 3000h

Exercice :
Poser l’explication convenable :

LDA 2050H ; …………………


…… ………
STA 2051H ;…………………

NB : Pour le reste des instructions, consulter les sur le web.

b) Instructions arithmétiques :
Les instructions arithmétiques sont données dans le tableau suivant :

Quelques instructions :

Adition
Syntaxe : ADD Destination, source

ADD r ou val ; A Å A + r ou val addition du contenu de A avec le contenu du r ou avec val

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.

LXI H 8000h : HL pointe vers 8000h


MOV A, M : le 1er opérande
LXI H, 8001h: HL pointe 8001h
ADD M : AÅA+M
STA 8002h: 8002hÅA
etc………………………….

Exercice :
Déterminer la tâche accomplie par ce programme :

LDA 8000h MOV B ,A LDA 8001h ADD B STA 8002 ……………

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

INX pr: prÅpr+ 1 (pr= BC, DE, HL).

Exemple :
INX H; adresse contenue dans HL est incrémentée par 1

Exercice : LXI H, 8000h ; HL pointe vers 8000h


MOV A, M ; le 1er opérande
INX H; HLÅ 8000+1h
ADD M ; AÅA+M
INX H ; HLÅ 8001+1h
MOV M,A; 8002hÅA
etc………………………….
Si 8000hÅ7Fh et 8001hÅ79h alors, 8002hÅ ????????????????
Si 8000hÅ0Fh et 8001hÅF0h alors, 8002hÅ ????????????????
Si 8000hÅ127 et 8001hÅ129 alors, 8002hÅ ???????????????? ……….. Contenu de M= ?

5 Dr. M. DJARALLAH
Chapitre 2 : La programmation en assembleur

Soustraction :

Syntaxe : SUB Destination, source


Elle permet de soustraire la destination de la source (octet ou un mot) le résultat est mis dans la
destination
Destination Å Destination - source

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

DCR pr: prÅpr- 1 (pr= BC, DE, HL).

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.

LXI H, 8000h, HL pointe vers 8000h


MOV A, M ; Mise du 1er operand dans A
INX H ; HL pointe vers 8001h
SUB M ; Soustraction de 2eme operand de A
INX H ; HL pointe 8002h
MOV M, A ; 8002h ÅA
…………………………………………….
Si 8000hÅ7Fh et 8001hÅ79h alors, 8002hÅ ????????????????
Si 8000hÅ0Fh et 8001hÅF0h alors, 8002hÅ ????????????????
Si 8000hÅ127 et 8001hÅ129 alors, 8002hÅ ???????????????? ……….. Contenu de M= ?

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

si (A) < (reg/mem): CY (Carry flag) est mise à un (CY=1)


si (A) = (reg/mem): Z (zero flag) est mise à zéro (Z=1)
si (A) > (reg/mem): CY et Z (Carry et Zero) sont mise à zéro (Z = 0)

Example: CMP B or CMP M

; ………………...
………….
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

d) Instructions de branchement (QQ)

JMP: Branchement inconditionnel vers:

i) Une adresse JMP 2034h ( saut vers l’adresse 2034h)


ii) Une étiquette JMP ABC (saut vers le label abc)

JZ: Branchement conditionnel, Si Z=1 (or zero flag is 0) vers :

i) Une adresse JZ 2034h ( saut vers l’adresse 2034h, Si Z=1)


ii) Une étiquette JZ ABC (jump to the level abc if Z=1)

JNZ: Branchement conditionnel, Si Z#0 (or zero flag is # 0) vers :


i) Une adresse Si Z# 0 (or zero flag is # 0)
ii) Une étiquette JNZ ABC (jump to the level abc if Z # 0)

Appelle à une routine


Syntaxe CALL adresse Æ provoque le stockage des contenus de registres dans la Pile.
RET (return) fait l’opposé du call (retour vers le PP).

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

e) Instructions E/S et de commande et d’interruptions

i) les instructions d'entrées-sorties :ÆIN/ OUT:

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 :

Syntaxe : IN adresse du port d’entrée


OUT adresse du port de sortie

NB : Sydicom+ Æ ports de sortie (A): 50h et commande : 53h


port d’entrée (B) : 51h

9 Dr. M. DJARALLAH
Chapitre 2 : La programmation en assembleur

10 Dr. M. DJARALLAH
Chapitre 2 : La programmation en assembleur

f) Les instructions logiques


Ils sont divisés en trois sous-groupes comme le montre le tableau suivant :

1.4- Méthode de programmation


i) Introduction :
Lorsque l'on doit lire ou écrire un programme en langage machine, il est
difficile d'utiliser la notation hexadécimale. On écrit les programmes à l'aide des instructions en
mnémonique comme MOV, ADD, etc. Les concepteurs de processeurs, comme Intel,
fournissent toujours une documentation avec les codes des instructions de leurs processeurs, et
les symboles correspondantes. L'assembleur est un utilitaire qui n'est pas interactif,. Le programme
que l'on désire traduire en langage machine (on dit assembler) doit être placé dans un fichier texte
(avec l'extension .ASM sous DOS).
La saisie du programme source au clavier nécessite un programme
appelé éditeur de texte. L'opération d'assemblage traduit chaque instruction du programme source
en une instruction machine. Le résultat de l'assemblage est enregistré dans un fichier avec
l'extension .OBJ (fichier objet).

11 Dr. M. DJARALLAH
Chapitre 2 : La programmation en assembleur

Le fichier .OBJ n'est pas directement exécutable. En effet, il arrive


fréquemment que l'on construise un programme exécutable à partir de plusieurs fichiers
sources. Il faut (relier) les fichiers objets à l'aide d'un utilitaire nommé éditeur de lien (même si l'on
a qu'un seul). L'éditeur de liens fabrique un fichier exécutable, avec l'extension .EXE.
Le fichier .EXE est directement exécutable. Un utilitaire spécial du système
d'exploitation (DOS ici), le chargeur est responsable de la lecture du fichier exécutable, de son
implantation en mémoire principale, puis du lancement du programme.

Donc en conclusion pour assembler un programme on doit passer par les phases suivantes :

- Saisie du code source avec un éditeur de texte.


- Compiler le programme avec un compilateur.
- Editer les liens pour avoir un programme exécutable. Les trois phases sont schématisées par la
figure suivante :

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.

ii) Le fichier source (code source) :


Comme tout programme, un programme écrit en
assembleur (programme source) comprend des définitions, des données et des
instructions, qui s'écrivent chacune sur une ligne de texte.
Les données sont déclarées par des directives, mots clefs
spéciaux que comprend l'assembleur (donc ils sont destinés à l'assembleur. Les instructions
(sont destinées au microprocesseur).

iii) Les instructions :


La syntaxe des instructions est comme suit :

{Label :} Mnémonique {opérande} { ; commentaire}

- 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

ET1 : MOV AX , 500H ; mettre la valeur 500 dans le registre AX

iv) Les directives :


Pour programmer en assembleur, on doit utiliser, en plus des
instructions assembleur, des directives ou pseudo-instructions : Une directive est une
information que le programmeur fournit au compilateur. Elle n'est pas transformée en une
instruction en langage machine. Elle n'ajoute donc aucun octet au programme compilé. Donc les
directives sont des déclarations qui vont guider l'assembleur.
Une directive est utilisée par exemple pour créer de l'espace mémoire pour des variables, pour
définir des constantes, etc...
Pour déclarer une directive il faut utiliser la syntaxe suivante :

{Nom} Directive {opérande} { ; commentaire}

ƒ Le champ opérande dépend de la directive


ƒ Le champ commentaire a les mêmes propriétés vues dans le paragraphe précèdent.
ƒ Le champ Nom indique le nom des variables : c'est un champ optionnel (selon la
directive).

Exemple de directives :
Les directives de données : EQU :

Syntaxe : Nom EQU Expression

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 .

Syntaxe : Nom DB Expression


Exemple :

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 .

Syntaxe : Nom DW Expression


Exemple :
TT1 DW 500H ; réserve deux cases mémoire (un mot) a partir de l'adresse TT1.
TAB1 DW 10H,11H,14H ; réserve u tableau de 6 cases chaque valeur sera mise sur deux cases
YY DW ? ; réserve un mot dans la mémoire de valeur initial quelconque.

v) Structure d'un programme source (sur le kit Sydicom+):

Un simple programme de SYDICOM+ peut prendre la forme suivante :

15 Dr. M. DJARALLAH
Chapitre 2 : La programmation en assembleur

Title ‘Titre du programme’


; Commentaire, par exemple : titre du programme
va1 equ const1 ; la constante cont1, en Hex., Dec. Ou Binaire, est assignée à la varible va1
… …. ……… ; ……………………………………………………………………………
… …. ……... ; ……………………………………………………………………………
org adress ; l’instruction Org définie l’origine du programme (Hexa ) en mémoire,
; dont l’adresse du début est donne par la constante adress.
Debut : ; Ce ci un label, on l’utilise dans le cas d’un branchement conditionnel
Action 1 ; Ces actions peuvent être par exemple : chargement immédiate d’un
Action 2 ; registre (hl) du 8085 (ex. : LXI h, 2000h et MVI reg, donne) . Un
Action 3 ; ensemble d’instructions vont prises ultérieurement.
………
………
Action n
RST 1 ; Retour au programme monitor du SYDICOM+
Fin : end

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).

Titre ‘Chargement des registres : A, BC, DE, HL’


cnst8 Equ 127d ; un octet
const8 Equ 11111111b ; un octet
const16 Equ ffffh ; 2 octets

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

LOOP: MVI B,5H ;SET CONTROL COUNTER


LXI H,260H ;LOAD H&L WITH SOURCE ADDR
LXI D.900H ;LOAD D&E WITH DESTINATION ADDR
MOV A,M ;LOAD BYTE TO BE MOVED
STAX D ;STORE BYTE
DCX D ;DECREMENT DESTINATION ADDRESS
DCX M ;DECREMENT SOURCE ADDRESS
DCR B ;DECREMENT CONTROL COUNTER
JNZ LOOP ;REPEAT LOOP UNTIL COUNTER=O

; Programme (a) ; Programme de (b) ; Programme de (c) ; Prog. de (c suite)

org 7000h org 7500h org 7500h out 50h


mvi a, 0a2h mvi a, 0a2h mvi a, 0a2h rst 1
out 53h out 53h out 53h
EGA:
mvi b,8bh mvi b,39h mvi b, 30H mvi a, 01H
mvi c,6fh mvi c,30h mvi c, 40H out 50h
mov a,b mov a,b ret
add c sub c mov a, b
cmp c GRD:
out 50h out 50h mov a,c
rst 1 rst 1 jz EGA out 50h
jc GRD ret

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

;***************** PP: Programme principale ********************


org 7000h
lxi sp, pile
mvi a, 0A2h
out rcmd ; port A en sortie, port B en entr‚e
Gperiod mvi a, 01
out porta ; demi p‚riode … 1
call tempo

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

; routine de service de l'interruption


org serv
mvi a,00h
out porta
rst 1
ret

17 Dr. M. DJARALLAH

Vous aimerez peut-être aussi