Vous êtes sur la page 1sur 26

Med Ali KAMMOUN Programmation assembleur avec DEBUG

TP N 1 : Programmation Assembleur avec


DEBUG
I.But du TP
Se familiariser avec le langage assembleur sur PC avec DEBUG.

II.Prsentation de DEBUG

II.1. Assembleur sur PC avec DEBUG


Le Pentium est le successeur du 80486 de la famille Intel. Il soriente vers les techniques des architectures RISC
(Reduced Instruction Set Computer). Il adopte des instructions simples cbles sur silicium, une architecture
superscalaire avec deux pipelines, il travaille en appliquant le concept des branchements prdictifs. Il fait appel
des caches spcialiss instructions et donnes. Mais il est toujours un processeur CISC (Complexe Instruction
Set Computer.
Dans ce TP nous allons nous intresser lutilisateur du DEBUG, un outil permettant de suivre de prs
lexcution dun programme, et mieux matriser larchitecture et le jeu dinstructions du Pentium.

II.2. Jeu dinstructions du Pentium


Le jeu dinstruction du Pentium drive de ses prdcesseurs 40486 et le 80386. Ceci permet de garder la
compatibilit des systmes. Nous citons ci-dessous les instructions les plus utilises :

Code Fonction Exemple signification


Instructions de transfert
MOV Dplacement MOV AH,09 AH :=09
doprande
PUSH Chargement dans la PUSH AX Charger AX dans la pile
pile
POP Extraction de la pile POP BX Charger le sommet de la
pile dans BX
Instructions arithmtiques
ADD Addition ADD AX,3 AX :=AX+3
INC Incrmenter de 1 INC AX AX :=AX+1
SUB Soustraction SUB CX,5 CX :=CX-5
DEC Dcrmenter de 1 DEC AX AX :=AX-1
CMP Comparaison CMP CX,3 Comparer CX avec 3
MUL Multiplication MUL AX,7
DIV Division DIV AX,9
Instructions logiques
AND ET logique AND AX,BX AX=AX and BX
OR OU logique OR AX,BX AX =AX or BX
XOR OU exclusif XOR AX,BX AX=AX xor BX
NOT Inversion logique NOT AX AX=not AX
Instructions de branchement
conditionnel
JE Saut si gal JE tiquette
JNE Saut si non gal JNE tiquette

ISET Mahdia Informatique Industrielle 3me niveau 2


Med Ali KAMMOUN Programmation assembleur avec DEBUG

Code Fonction Exemple signification


Branchement inconditionnel
et appel de procdures
JMP Branchement JMP tiquette IP :=tiquette si
inconditionnel branchement court
LOOP Boucle LOOP
tiquette
CALL Appel de procdures CALL proc IP :=adresse de procdure
RET Retour de procdure RET IP :=adresse de retour
Instructions
dentres/sorties
IN Entre doprante
OUT Sortie doprande
Instructions pour adresses
LEA Charger ladresse AX :=adresse de ltiquette
effective

III.Utilisation du DEBUG
On appelle DEBUG pour suivre lexcution dun programme dj dit dans un fichier ou pour diter un
nouveau programme. Pour appeler Debug, placez-vous sous DOS et tapez :

C:\>DEBUG
-
Tout programme charg est plac en mmoire dans un segment appropri. Un dplacement de 100H par rapport
au dbut du segment indique ladresse de dpart. Il faut la mentionner au Debug.

C:\>DEBUG
-A 100

Debug slectionne une adresse pour votre programme. Il laffiche et lui ajoute votre dplacement.
Q1 : Quelle est ladresse de segment choisie par votre Debug ?

Pour un segment dadresse 21CB et un dplacement de 100, ladresse relle de la premire instruction de votre
programme est gale (21CB0H+100H).

Q2 : Quelle est ladresse du dbut de programme choisie par votre Debug ?

Pour diter un programme on procde comme suit :

C:\>DEBUG
-A 100
21CB :0100 MOV DL,3F
21CB :0102 MOV AH,2
21CB:0104 INT 21H
21CB:0106 INT 20H
21CB:0108

Les deux instructions MOV AH,2 et INT 21H permettent laffichage du caractre dont le code ASCII est
stock dans DL. Pour excuter le programme on effectue :

-G
?
Fin normale du programme
-

Q3 : Ecrire un programme qui permet dafficher le caractre A.

ISET Mahdia Informatique Industrielle 3me niveau 3


Med Ali KAMMOUN Programmation assembleur avec DEBUG

Pour savoir le contenu dune zone mmoire on utilise la commande U (Unassembler).

- U 100 107
21CB :0100 B23F MOV DL,3F
21CB :0102 B402 MOV AH,2
21CB:0104 CD21 INT 21H
21CB:0106 CD20 INT 20H

Q4 : Analyser et dcoder les instructions MOV et INT.

Pour sauvegarder le travail effectu dans un fichier TP1.com, on utilise les commandes suivantes :
-N TP1.com
-R CX
CX 000
:8
-R BX
BX 000
:
-W
-Q
C:\>

Les deux registres CX et BX indiquent la taille du programme sauvegarder. Dans ce cas il sagit de 8 octets
partir de ladresse de dpart (100).

Pour excuter le programme on doit taper le nom du fichier :

C:\>TP1
?
C:\>

IV.Exercices
1. Ecrire un programme TP1-1.COM qui affiche toutes les lettres minuscules.
2. Ecrire un programme TP1-2.COM qui affiche toutes les lettres majuscules.
3. Ecrire un programme TP1-3.COM qui affiche tous les chiffres de 0 9.
4. Dsassembler le programme TP1-3.COM .
5. Afficher ltat des registres en utilisant la commande
-R
6. Excuter le programme pas par pas en utilisant la commande
-T
7. Relancer lexcution du programme en utilisant la commande
-G 100
8. Lancer lexcution dune portion du programme en utilisant
-G=100 106
9. Faire un vidage de la mmoire (DUMP) en utilisant la commande
-D 100
10. Modifier la case mmoire dadresse xxxx :0101
-E 101
xxxx :0101 xx.41
11. Faire un dump mmoire pour visualiser la date du BIOS
D F000 :FFF0
12. Ecrire un programme qui affiche un message lcran.

ISET Mahdia Informatique Industrielle 3me niveau 4


Programmation assembleur avec NASM

Objectifs :
Lobjectif de cette manipulation est de familiariser ltudiant lenvironnement de
programmation assembleur NASMIDE. On utilisera cet outil pour crer des programmes
avancs bass surtout sur des instructions de branchement conditionnel et inconditionnel.

Matriels utiliss :
- Un PC ou compatible.

Logiciels :
- Microsoft Windows.
- NASMIDE.

Dure :
3H00mn
Med Ali KAMMOUN Programmation assembleur avec NASM

TP N 2 : Programmation Assembleur avec


NASM

I. But du TP
Se familiariser avec assembleur freeware NASM associ l'diteur syntaxique NASMIDE.

II.Prsentation de NASM

II.1. Qu'est ce que NASM ?


NASM (http://kent.dl.sourceforge.net/sourceforge/nasm/nsm09838.zip) est un assembleur 80x86 libre
d'utilisation. NASMIDE (http://www.inglenook.co.uk/rob/index.html ) est un environnement de dveloppement
spcialement dvelopp pour travailler avec NASM sous DOS. (Il existe galement une version de NASMIDE
sous Windows permettant de dvelopper des programmes en assembleur 32 bits).

II.2. Structure d'un programme assembleur


Un programme en assembleur commence en gnral par la dfinition des donnes puis ensuite par le code.
Il s'agit tout d'abord de prciser l'assembleur si on va crire du code 16 bits ou 32 bits. Dans notre cas, nous
gnrerons du code 16 bits en prcisant la directive [BITS 16]. Il faut ensuite prciser l'adresse du programme
dans le segment de code en utilisant la directive [ORG 0x100]. (0x100 signifie que 100 est un nombre en
hexadcimal)
Ensuite, il faut prciser par [SEGMENT .data] que l'on va dfinir des variables et constantes dans le segment de
donnes.
La directive [SEGMENT .text] permet ensuite d'introduire les instructions du programme en langage
assembleur.

II.3. Edition d'un programme


Vrifier que les options suivantes sont configures dans le menu options|assembler

ISET Mahdia Informatique Industrielle 3me niveau 6


Med Ali KAMMOUN Programmation assembleur avec NASM

Vrifier que les options suivantes sont configures dans le menu options|directories

- Editer le programme qui affiche un caractre A l'cran (le mme celui du TP 1). (Attention, int 21
s'crit maintenant int 0x21 ou int $21)
- Appuyer sur la touche F2 pour sauver le programme.
- Appuyer simultanment sur les touches alt + F9 pour assembler le programme.
- Une fentre d'erreur doit normalement indiquer qu'aucune erreur n'est survenue.

- Appuyer simultanment sur les touches Ctrl + F9 pour excuter le programme.

ISET Mahdia Informatique Industrielle 3me niveau 7


Med Ali KAMMOUN Programmation assembleur avec NASM

En rsum, attention au format des constantes numriques:

100 dcimal
100h hexadcimal
0x100 hexadcimal aussi
$100 hexadcimal galement mais le premier caractre doit tre un chiffre
10000100b binaire

II.4. Dclaration de variables dans le segment de donnes


Il est possible de dfinir des variables de type caractre, chane de caractres, entier, entier long, rel,.. grce
des pseudo instructions.

Dclaration de variables entires de type octet: db

nb db $10
tab db 1, 2 ,3 ,4 ,5 ,6 ,7 ,8 ,10
message db 'bonjour les IUP GSI TI',13,10,'$'
(13 retour chariot, 10 ligne suivante, $ fin de chane de caractres)

Dclaration de variables entires de type mot: dd

R dd 1024

Dclaration de variables en virgule flottante: dd, dq, dt

A dd 1.2
B dd 1.e10
C dd 1.e+10
D dq 1.e-10
pi dt 3.141592353589793238462

II.5. Utilisation des variables dans le programme


r db 40
Exemple: mov al, [r]
mov [r], cl

Il est impossible d'affecter une variable directement une autre variable, il faut obligatoirement passer
par un registre.

Il est galement impossible d'affecter une constante directement une variable, il faut galement passer
par un registre.

II.6. Dfinition d'tiquettes


Contrairement DEBUG, il est possible de dfinir des tiquettes vers lesquelles certaines instructions pourraient
se brancher. Ceci vite le comptage laborieux des octets lorsqu'il s'agit de raliser un saut dans le programme.
Une tiquette se dclare par un nom de taille infrieure 8 caractres et se terminant par :

Exemple:

BOUCLE: ADD AX,CX ; Ax = Ax + Cx


.
.
.
JNE BOUCLE ; jump if not equal

ISET Mahdia Informatique Industrielle 3me niveau 8


Med Ali KAMMOUN Programmation assembleur avec NASM

III. Exercices
Exercice 1:

1) Faire l'organigramme du programme qui calcule la somme des 11 premiers entiers


(0 + 1 + 2 ++ 10 +11). Ecrire ensuite le programme en assembleur 8086. On utilisera pour cela linstruction
MOV, CMP, JNE, ADD, DEC ou INC On utilisera une variable R pour stocker le rsultat et une variable N
pour stocker le nombre 11.

2) Afficher ensuite le rsultat l'cran en utilisant l'interruption $21 puis dduire en fonction du caractre
affich la valeur numrique du rsultat.

3) Mme exercice mais en utilisant l'instruction LOOP

Exercice 2: Utilisation de l'interruption $21 en mode 9

L'interruption $21 avec ah 9 permet d'afficher des chanes de caractres qui se terminent par le caractre 13, 10
,'$'. (13 retour chariot, 10 ligne suivante, $ fin de chane de caractres)
Pour cela, il faut dfinir un message avec la pseudo instruction db (voir explications de db) en terminant ce
message par 13, 10, '$'.
Il faut ensuite affecter au registre dx l'adresse de ce message (mov dx, mess o mess est le nom donn au
message).

Ecrire un programme qui affiche dix fois l'cran le message suivant avec retour la ligne et saut de ligne:

Si je travaille bien en TP, je deviendrai un dieu de l'assembleur et le prof sera fier de moi

Exercice 3:

Concevoir une application qui ralise le produit de deux nombres A = 100 et B = 170. Les nombres A et B sont
cods sur 8 bits chacun.
Quelle instruction faut il utiliser ?
O se trouvent les oprandes ?
O se trouve le rsultat de l'opration.
Afficher les octets du registre contenant le rsultat de l'opration.
Dduire le rsultat numrique partir des caractres affichs.

Mmes questions mais avec des nombres A et B de 16 bits. Prendre A = 1642 et B = 10.
Essayer avec A=3227 et B=5.
Comment apparat le rsultat ?
Comment faire pour que des caractres imprimables apparaissent tout le temps ?

ISET Mahdia Informatique Industrielle 3me niveau 9


Programmation assembleur avec NASM :
adressage

Objectifs :
Lobjectif de ce T.P. est dintroduire les principes de la manipulation des donnes complexes
travers des programmes assembleurs avancs. On utilisera pour cela NASMIDE comme
outil pour la cration de quelques programmes bass sur le principe dadressage bas
index . Ce principe sera utilis pour manipuler les lments des tableaux et des chanes de
caractres. A la fin de cette manipulation, ltudiant devra traduire un algorithme de tri que
lon appliquera sur une chane de caractre.

Matriels utiliss :
- Un PC ou compatible.

Logiciels :
- Microsoft Windows.
- NASMIDE.

Dure :
1re partie : 3H00mn
2me partie : 1H30mn
Med Ali KAMMOUN Programmation assembleur avec NASM : adressage

TP N 3 : Programmation Assembleur avec


NASM : adressage
I. But du TP
Matriser les diffrents types d'adressage, notamment pour accder aux lments de tableaux.

II.Rappels
Pour adresser les diffrents lments d'un tableau, il faut utiliser l'adressage index bas en prenant le registre
BX comme base et le registre DI ou SI comme indexe. Pour mettre la base du tableau (dplacement du tableau
dans le segment de donnes) dans BX, il suffit d'crire :
MOV BX, nom du tableau.
Ensuite l'adressage index bas s'utilise de la manire suivante:
MOV AL, [BX+SI] ; mettre le SI me lment du tableau dans le registre AL
O SI reprsente la position de l'lment du tableau que l'on veut atteindre.

III.Exercices
Exercice 1:
Soit le tableau suivant:
tab db 5, 30, 20, 1,11, 8
Faire le somme des 6 lments de ce tableau et mettre le rsultat dans une variable S. Afficher le rsultat
l'cran, en dduire la valeur numrique.

Exercice 2:
Ecrire une application qui compte le nombre de lettres 'e' dans une phrase quelconque (50 caractres minimum)
se terminant par le caractre '$'.
- Reprsenter l'organigramme.
- Mettre le rsultat dans le registre dl et ajouter 32.
Imprimer le caractre l'cran et vrifier si le caractre qui apparat est cohrent

Exercice 3:
Dfinir une chane de caractres de longueur au moins 50 caractres se terminant par '$'.
Raliser une application (organigramme + programme) qui remplace toutes les lettres d'un type donn par un
autre type (par exemple tous les 'e' par des 'a').
On entrera les deux lettres au clavier en utilisant l'interruption 21,8.
Les saisies clavier seront prcdes d'un message du type 'Remplacer:' et 'par:'

Exercice 4: Tri d'un tableau


Soit le tableau tab suivant: 5, 8, 1, 7, 6
Soit l'algorithme suivant:

ISET Mahdia Informatique Industrielle 3me niveau 11


Med Ali KAMMOUN Programmation assembleur avec NASM : adressage

i0
j1
n5
tant que i < n-1
tant que j <n
Si tab[i]>tab[j] alors Permuter(tab,i,j)
j = j +1
fin tant que
i = i+1
j = i+1
fin tant que

Appliquer l'algorithme suivant au tableau tab en remplissant le tableau d'tat suivant:

Etape i j tab[0] tab[1] tab[2] tab[3] tab[4]

Soit la chane de caractres suivante:

message db "le but de ce probleme est de trier par ordre croissant de code ASCII cette chane de caractere"

- Ecrire le programme qui tri par ordre croissant de code ASCII la chane prcdente.
- On prendra SI pour l'index i et DI pour l'index j.
On affichera le rsultat grce l'interruption $21, 9.

ISET Mahdia Informatique Industrielle 3me niveau 12


Programmation assembleur graphique en
mode MCGA

Objectifs :
Lobjectif de cette manipulation est de prsenter les principes de la programmation graphique
en utilisant le langage assembleur. A la fin de cette manipulation, ltudiant sera capable de
produire des formes gomtriques complexes, en manipulant directement la mmoire vido,
par des programmes en assembleur.

Matriels utiliss :
- Un PC ou compatible.

Logiciels :
- Microsoft Windows.
- NASMIDE.

Dure :
6H00mn
Med Ali KAMMOUN Programmation assembleur graphique en mode MCGA

TP N 4 : Programmation Assembleur
Graphique en mode MCGA

I.But du TP
Programmer l'affichage en mode Graphique MCGA.

II.Prsentation du mode MCGA


Le mode MCGA est un mode graphique cr par IBM. Sa particularit est de possder 256 couleurs et une
dfinition de 320 pixels par 200 pixels. De ce fait, chaque pixel est reprsent par un octet. La mmoire cran est
donc reprsente par 320*200*1 octets contigus (64000).

320
0 1 2 3 4 5 6 7 318 319
. . . . . . .
. . . . . . .
320 321

200

III.Accs au mode MCGA


Pour accder au mode MCGA, nous allons utiliser les interruptions logicielles du BIOS. L'interruption du BIOS
est l'interruption 0x10 et la fonction qui permet de choisir son mode vido est la fonction 0. Dans cette fonction
il faut prciser le mode vido que l'on dsire. Le mode correspondant au MCGA est le mode 0x13.
En rsum pour activer le mode MCGA il faut:
- ah 0
- al 0x13
- Appel de l'interruption 0x10

Pour se remettre en mode texte la fin du programme, on utilisera le mode 0x03.


- ah 0
- al 0x03
- Appel de l'interruption 0x10

IV.Accs aux pixels


Pour accder un pixel, il faut crire dans la mmoire vido du mode MCGA. Cette mmoire vido commence
l'adresse 0xa000 et s'tend sur 64000 octets.
[ ] [ ]
Pour accder un pixel de coordonnes x, y, x 0,319 et y 0,199 il faut donc accder la mmoire
vido d'adresse y*320+x.
La couleur de ce pixel dpendra de l'octet que l'on crira l'adresse du pixel. La couleur associe une valeur de
l'octet est dfinie dans une palette qu'il est galement possible de modifier. Mais ceci est une autre histoire
Pour crire l'adresse 0xA000 + dplacement, il faut utiliser l'extra segment ES associ un dplacement
reprsent par BX. On peut ventuellement ajouter tout cela un dplacement fixe ou variable avec les registres
SI et DI.

ISET Mahdia Informatique Industrielle 3me niveau 14


Med Ali KAMMOUN Programmation assembleur graphique en mode MCGA

Exemple:

mov ax,0xa000
mov es,ax
mov dl, 0xaa
mov bx, 160
mov [es:bx], dl ; on crit l'adresse 0xa000 + 160

ou
mov bx, 160
mov [es:bx + 320], dl ; on crit l'adresse 0xa000 + 160 +320

ou

mov bx, 160


mov si, 320
mov [es:bx + si], dl ; on crit l'adresse 0xa000 + 160 +320

ou

mov bx, 160


mov si, 320
mov [es:bx + si + 640], dl ; on crit l'adresse 0xa000 + 160 +320 +640

V.Exercices
Exercice 1:
- Allumer le pixel de coordonnes (200,100) avec la couleur de code 0x32.
- Allumer les 256 premiers pixels leur associant une couleur variant de 0 255.
- Mme question mais en augmentant l'paisseur du trait (5 lignes).
- Mme question mais sur toute la hauteur de l'cran (cf figure suivante).

Exercice 2:
- Encadrer l'cran avec un cadre d'paisseur 5 pixels de la couleur de votre choix
- Quadriller l'cran avec une ligne de 5 pixels d'paisseur et un espacement de 10 pixels entre les lignes.

Exercice 3: (pour les meilleur(e)s)


- Ecrire un programme qui dplace un motif rectangulaire (8*6 pixels) en bas de la fentre de gauche droite,
de droite gauche, tant qu'aucune touche n'est appuye.
- L'affichage et l'effacement devront se faire avec un ou exclusif pour ne pas effacer ce qui se trouve
ventuellement dj sur l'cran.

ISET Mahdia Informatique Industrielle 3me niveau 15


Med Ali KAMMOUN Programmation assembleur graphique en mode MCGA

- Le test de l'appui d'une touche se fera en utilisant l'interruption 0x16 (voir annexe)
- Les variables utiliser seront les suivantes:

- Entre chaque affichage, il est ncessaire (au moins sur les Pentiums) de gnrer une temporisation. Pour cela
on crira un sous-programme de temporisation simple du type:

tempo: mov cx,0xffff


tt: nop
loop tt
ret

- Pour dplacer le motif vers la gauche ou vers la droite, on utilisera une variable delta qui prendra la valeur 1
ou 1 selon le sens du dplacement. Cette variable servira d'incrment pour afficher la position suivante du
motif.
- Il faudra tester si on arrive au niveau de la limite suprieure droite (320-L) pour donner delta la valeur 1 et
tester la limite infrieure gauche (0) pour mettre delta +1.

Exercice 4: (pour les meilleur(e)s des meilleur(e)s)

- Ecrire un Casse brique en assembleur 8086 (raquette + balle + briques).

Rq:

Vous pouvez utiliser: INT 16,1 - Get Keyboard Status


AH = 01
On return:
ZF = 0 if a key pressed (even Ctrl-Break)
AX = 0 if no scan code is available
AH = ~scan code~ ; AL = ASCII character or zero if special function key

ISET Mahdia Informatique Industrielle 3me niveau 16


Programmation assembleur avec TASM

Objectifs :
Lobjectif de cette manipulation est dintroduire les principes de la programmation
assembleur selon la syntaxe TASM. On utilisera pour cela Turbo-ASM de Borland comme
outil pour la cration de quelques programmes simples.

Matriels utiliss :
- Un PC ou compatible.

Logiciels :
- Microsoft Windows.
- TASM.

Dure :
3H00mn
Med Ali KAMMOUN Programmation assembleur avec TASM

TP N 5 : Programmation Assembleur avec


TASM

I. But du TP
Programmer en langage assembleur avec Turbo ASM

II.Prsentation du Turbo Assembleur


Turbo assembleur est un compilateur-assembleur qui transforme un fichier texte contenant des instructions
assembleurs (mnmoniques) en code binaire pour tre excuter sous un PC x86 (ou compatible).
Il faut donc diter le fichier source dans lditeur de texte compris, sauvegarder, puis assembler (on dit assembler
plutt que compiler ; mot rserve aux langages haut niveau comme le C ou Pascal). Une documentation
indpendante est votre disposition sur Turbo ASM

III.Structure dun programme en TASM


Comme dans tout programme le fichier source doit tre saisi de manire rigoureuse. Chaque dfinition et chaque
instruction doivent ainsi s'crire sur une nouvelle ligne (pour que l'assembleur puisse diffrencier les diffrentes
instructions) Le fichier source contient:

1. Un nom du programme sous TITLE sui vie dun nom. Cette partie est facultative.
2. Une partie pour dclarer une pile qui est dfinie dans le segment de pile dlimit par les directives
SEGMENT STACK et ENDS
3. Des dfinitions de donnes dclares par des directives. Celles-ci sont regroupes dans le segment de donnes
dlimit par les directives SEGMENT et ENDS
4. Puis sont places les instructions (qui sont en quelque sorte le coeur du programme), la premire devant tre
prcde d'une tiquette, c'est--dire par un nom qu'on lui donne. Celles-ci sont regroupes dans le segment
d'instructions dlimit par les directives SEGMENT et ENDS
5. Enfin, le fichier doit tre termin par la directive END suivi du nom de l'tiquette de la premire instruction
(pour permettre au compilateur de connatre la premire instruction excuter (Les points-virgules marquent le
dbut des commentaires, c'est--dire que tous les caractres situs droite d'un point virgule seront ignors)
Voici quoi ressemble un fichier source (fichier .ASM):

TITLE nom_programme

Pile SEGMENT Stack;

Pile ENDS

DATA SEGMENT

; Dclarer ici les donnes

DATA ENDS

CODE SEGMENT

ASSUME DS:DATA,CS:CODE

DebutCode:

; Mettez ici le code de votre programme

CODE ENDS

ISET Mahdia Informatique Industrielle 3me niveau 18


Med Ali KAMMOUN Programmation assembleur avec TASM

END DebutCode
Exemple :

;***********************************
;* A F I C H A I N . A S M *
;****************************TA 2.0*
TITLE AFICHAIN

Pile SEGMENT Stack;

Pile ENDS

Data SEGMENT

ChaineDonnees DB 'Ce texte est dans le segment des donnees.$'

Data ENDS

CODE SEGMENT
ASSUME DS:Data,CS:CODE
DebutCode:
mov bx,Data
mov ds,bx ;fait pointer DS sur le segment .DATA
mov dx,OFFSET ChaineDonnees
;fait pointer DX sur le dplacement de
;ChaineDonnees dans le segment .DATA
mov ah,9 ;fonction d'affichage de chane du DOS
int 21h ;appel de la fonction
mov ah,4ch ;fonction de dsactivation de programme
;du DOS
int 21h ;appel du DOS
CODE ENDS
END DebutCode

IV.Edition et excution dun programme avec TASM


L'algorithme pour la rsolution du problme pos tant tabli, la premire tape consiste crer le fichier
contenant le programme source en langage Assembleur en utilisant pour cela tout diteur de texte: EDIT de
MS/DOS ou l'diteur inclus dans le compilateur Pascal ou C, ... Ce fichier doit avoir l'extension .ASM. Pour
assembler ce programmer et en faire un module objet, il faut utiliser un assembleur: MASM de Microsoft ou
TASM de Borland.
Si le fichier source est TOTO.ASM, l'assembleur crera le fichier TOTO.OBJ, et optionnellement les fichiers
TOTO.LST et TOTO.CRF.
Le fichier TOTO.OBJ contient le code binaire du programme. Ce code n'est pas encore excutable. Il le sera
aprs l'dition de liens.
La sortie du fichier TOTO.LST sur cran ou imprimante indique pour chaque ligne du programme source le code
gnr, l'adresse relative des instructions ou de la zone mmoire gnre et un message d'erreur
ventuellement.
A la fin de l'assemblage, l'assembleur affiche un message qui indique le nombre d'avertissements (WARNINGS)
qui pourraient donner un mauvais fonctionnement du programme et le nombre d'erreurs graves (SEVERE
ERRORS). Corriger les erreurs et refaire l'assemblage s'il y a lieu.
L'tape suivante est l'dition de liens que nous demandons en excutant LINK TOTO. L'diteur de liens cre le
fichier TOTO.EXE qui contient le module objet excutable et le fichier TOTO.MAP qui contient la liste des
symboles globaux. On peut soumettre plusieurs modules objet en entre de noms TOTO.OBJ, TITI.OBJ et
TATA.OBJ, en appelant l'diteur de liens par LINK TOTO TITI TATA.
Enfin l'excution du programme sera lance en tapant TOTO (sous le contrle de MS/DOS).
La mise au point du programme peut tre faite l'aide du programme de mise au point DEBUG en tapant
DEBUG TOTO.EXE. Il existe d'autres programmes de mise au point qui sont TurboDebugger fourni avec le
compilateur C, CodeView plus complets que DEBUG, mais ce dernier a l'avantage d'tre fourni avec MS/DOS).

ISET Mahdia Informatique Industrielle 3me niveau 19


Med Ali KAMMOUN Programmation assembleur avec TASM

V.Exercices
Exercice 1:
- Dressez lorganigramme dun programme qui affiche le message Salut tout le monde sur lcran. Traduisez
lorganigramme en programme et vrifiez son bon fonctionnement.
- Modifier le programme prcdant en affichant le mme message 10 fois. Commencez par dresser
lorganigramme.

Exercice 2:
- Dressez lorganigramme dun programme qui vous pose la question : Somme-nous laprs midi ? (O/N). Si
vous tapez O il vous affiche Bon aprs midi , sinon il vous affiche Bonjour .
- Traduisez lorganigramme en programme assembleur sous TASM.

Exercice 3:
- Dressez lorganigramme dun programme qui lit un caractre minuscule au clavier et le convertit en
majuscule.
- Transformer lorganigramme en programme sous TASM.

Exercice 4 :

- Dressez lorganigramme dun programme qui affiche la forme suivante

* *
** **
*** ***
********
Lutilisation dune boucle est obligatoire.
Transformer lorganigramme en programme sous TASM.

ISET Mahdia Informatique Industrielle 3me niveau 20


Programmation assembleur dune interface
dEntre/Sortie : le i8255

Objectifs :
Lobjectif de cette manipulation est de prsenter ltudiant les principes de la
programmation de linterface parallle 8255. Lexprimentation porte sur un port parallle
implment sur le Kit MTS-86C et est pilot par un 8255. Le rle de ltudiant est de
manipuler ce port en crivant des codes en assembleur permettant de commander des diodes
ou recevoir des informations depuis des boutons poussoirs.
Matriels utiliss :
- Le Kit MTS-86C.
- Un PC ou compatible dot dun port de communication srie.

Logiciels :
- Microsoft Windows
- Hyper Terminal

Dure :
1re tape : 3H00mn
Med Ali KAMMOUN Programmation assembleur dune interface dEntre/Sortie : le i8255

TP N 6 : Programmation Assembleur dune


interface dEntre/Sortie : le i8255

I.But du TP
Le but de cette manipulation est de se familiariser avec lutilisation de linterface de communication parallle
8255 intgre au systme MTS-86C.

II.Prsentation
Les changes entre le microprocesseur et son environnement externe (clavier, cran, imprimante,) se font
laide de circuits dinterface appels souvent coupleurs dEntres/Sortie . Ces changes peuvent tre effectus
en parallle ou en srie.
Dans le cadre de cette manipulation, nous allons utilis un coupleur pour liaison parallle de la famille 8200 de
Intel : il sagit du PPI (Programmable Peripheral Interface) 8255.

III.PPI 8255

Le Intel 8255 est une interface programmable dentre/sortie destin lutilisation avec les microprocesseurs
Intel. Elle possde 24 pins dentres/sorties programmable par deux groupes de 12 pins chacun et elle peut tre
utilise en 3 modes.

Dans le premier mode (MODE 0), chaque groupe de 12 pins peut tre programm par lot de 4 broches en entre
ou en sortie. Dans le (MODE 1), le deuxime mode, chaque groupe peut tre programm de sorte que 8 lignes
soient configures en entres ou en sorties. Le troisime mode, (MODE 2), est un mode bidirectionnel o 8
lignes sont utilises comme bus bidirectionnel.

III.1. Fonctions des broches

Data Bus Buffer


Ce bus bidirectionnel 3 tats est utilis pour interfacer le 8255 au bus du systme. Les donnes sont transmises
et reues via le buffer suivant linstruction de input ou de output gnre par le microprocesseur. Le Control
Word et les informations de configuration sont aussi transmis via ce bus.
Read/Write et Control logic
La fonction de ce bloc est de grer tous les transferts, internes et externes, des donnes, de contrle ou du Status
Words.

__
CS
Cette broche, active ltat bas, permet la communication entre le 8255 et le CPU.
__
RD
Cette broche, active ltat bas, permet au 8255 de transfrer les donnes ou les informations de configurations
au CPU via le data bus.

__
WR

ISET Mahdia Informatique Industrielle 3me niveau 22


Med Ali KAMMOUN Programmation assembleur dune interface dEntre/Sortie : le i8255

Cette broche, active ltat bas, permet au microprocesseur denvoyer des donnes ou le Control Words vers le
8255.

A0 et A1
Ces broches dentres, conjugues aux broches WR et RD, contrlent la slection des ports (A, B ou C) ou du
registre du Control Word.

__ __ __
A1 A0 RD WR CS Oprations dInput (Lire)

0 0 0 1 0 Port A->Data Bus


0 1 0 1 0 Port B->Data Bus
1 0 0 1 0 Port C->Data Bus
Oprations dOutput (Ecrire)
0 0 1 0 0 Data Bus -> Port A
0 1 1 0 0 Data Bus -> Port B
1 0 1 0 0 Data Bus -> Port C
1 1 1 0 0 Data Bus -> Control
Fonctions de dsactivation
x x x x 1 Data Bus -> 3 tats
1 1 0 1 0 Condition illgale
x x 1 1 0 Data Bus -> 3 tats

III.2. Le contrle des groupes


Le CPU envoie un Control Word vers le 8255 pour configurer les ports. Le Control Word contient des
informations comme : le mode, le bit set, le bit reset, etc.
Chaque bloc de contrle (Groupe A et Groupe B) accepte les commandes depuis le Read/Write Control logic, et
reoit le Control Word depuis le bus interne des donnes et envoie les commandes au port qui lui est associ.
Le Groupe A de Contrle --- Port A et Port C (de poids fort) [C7-C4].
Le Groupe B de Contrle --- Port B et Port C (de poids faible) [C3-C0].

III.3. La slection des modes


Il existe 3 modes dutilisation de linterface 8255 : Le Mode 0, le Mode 1 et le Mode 2.
Quand lentre RESET est ltat haut, tous les ports sont configurs en entre. Si lentre RESET est
dsactive, linterface 8255 garde son tat (en entre) sans aucune initialisation pralable.
Les modes des ports A et B peuvent tre configurs sparment. Cependant le port C est divis en deux groupes
configurs suivants les besoins des ports A et B.

ISET Mahdia Informatique Industrielle 3me niveau 23


Med Ali KAMMOUN Programmation assembleur dune interface dEntre/Sortie : le i8255

Format du Control Word en MODE 0

Format du Control Word en MODE 1

ISET Mahdia Informatique Industrielle 3me niveau 24


Med Ali KAMMOUN Programmation assembleur dune interface dEntre/Sortie : le i8255

Format du Control Word en MODE 2

IV.Manipulation
Le systme MTS-86C dispose de 3 interfaces parallles programmable 8255. Linterface n3 (PPI-3) est utilise
pour lexprimentation et elle est connecte aux diodes et aux boutons SW suivant les schmas lectroniques
disponible en annexe.
Daprs ces schmas, le port A est donc connect aux boutons SW et le port B est connect aux diodes via les
circuits 74LS240.

IV.1. Exemple de programmation

Supposons que lon veut crire un programme en assembleur qui nous permet dallumer la diode LED en
appuyant sur le bouton SW correspondant.
Le programme scrit alors comme suit :

CNT3 EQU 3FD6H; Assignation des adresses des ports


APORT3 EQU 3FD0H
BPORT3 EQU 3FD2H

CODE SEGMENT
ASSUME CS:CODE,DS:CODE
ORG 0

START : MOV SP,4000H ; Configuration du Stack Pointer


MOV AL,90H ; Configuration du Control Word du 8255
;(Port A=Input, Port B et C=Output)
MOV DX,CNT3 ;Configuration du port de sortie
OUT DX,AL ; Ecriture du Control Word

ISET Mahdia Informatique Industrielle 3me niveau 25


Med Ali KAMMOUN Programmation assembleur dune interface dEntre/Sortie : le i8255

J1: MOV DX,APORT3 ; Configuration du port dentre


IN AL,DX ; Faire entrer les donnes
NOT AL ; Inverser le signal
MOV DX,BPORT3 ; Configuration du port de sortie
OUT DX,AL ; Faire sortir les donnes
JMP J1 ; Reboucler vers J1

CODE ENDS
END START

-Tester le bon fonctionnement du programme prcdant sur la carte MTS-86C.

VI.2. Programmation de linterface 8255

Ecrire un programme permettant dallumer toutes les LEDS.


Ecrire un programme permettant dafficher le nombre hexadcimal 95 sur les 8 LEDS.
Ecrire un programme permettant dalterner lallumage des diodes de droite gauche en continu (On
allume les 4 diodes de droite puis de gauche et on reprend).

ISET Mahdia Informatique Industrielle 3me niveau 26


Med Ali KAMMOUN Travaux pratiques Microprocesseurs

Annexe
ASCII Table (7-bit)

Decimal Octal Hex Binaire Valeur 063 077 03F 00111111 ?


-------------------------------------------------------------------------------------- 064 100 040 01000000 @
000 000 000 00000000 NUL (Null char.) 065 101 041 01000001 A
001 001 001 00000001 SOH (Start of Header) 066 102 042 01000010 B
002 002 002 00000010 STX (Start of Text) 067 103 043 01000011 C
003 003 003 00000011 ETX (End of Text) 068 104 044 01000100 D
004 004 004 00000100 EOT (End of Transmission) 069 105 045 01000101 E
005 005 005 00000101 ENQ (Enquiry) 070 106 046 01000110 F
006 006 006 00000110 ACK (Acknowledgment) 071 107 047 01000111 G
007 007 007 00000111 BEL (Bell) 072 110 048 01001000 H
008 010 008 00001000 BS (Backspace) 073 111 049 01001001 I
009 011 009 00001001 HT (Horizontal Tab) 074 112 04A 01001010 J
010 012 00A 00001010 LF (Line Feed) 075 113 04B 01001011 K
011 013 00B 00001011 VT (Vertical Tab) 076 114 04C 01001100 L
012 014 00C 00001100 FF (Form Feed) 077 115 04D 01001101 M
013 015 00D 00001101 CR (Carriage Return) 078 116 04E 01001110 N
014 016 00E 00001110 SO (Serial In)(Shift Out) 079 117 04F 01001111 O
015 017 00F 00001111 SI (Serial Out)(Shift Out) 080 120 050 01010000 P
016 020 010 00010000 DLE (Data Link Escape) 081 121 051 01010001 Q
017 021 011 00010001 DC1 (XON) (Device Control 1) 082 122 052 01010010 R
018 022 012 00010010 DC2 (Device Control 2) 083 123 053 01010011 S
019 023 013 00010011 DC3 (XOFF)(Device Control 3) 084 124 054 01010100 T
020 024 014 00010100 DC4 (Device Control 4) 085 125 055 01010101 U
021 025 015 00010101 NAK (Negative Acknowledgement) 086 126 056 01010110 V
022 026 016 00010110 SYN (Synchronous Idle) 087 127 057 01011111 W
023 027 017 00010111 ETB (End of Trans. Block) 088 130 058 01011000 X
024 030 018 00011000 CAN (Cancel) 089 131 059 01011001 Y
025 031 019 00011001 EM (End of Medium) 090 132 05A 01011010 Z
026 032 01A 00011010 SUB (Substitute) 091 133 05B 01011011 [
027 033 01B 00011011 ESC (Escape) 092 134 05C 01011100 \
028 034 01C 00011100 FS (File Separator) 093 135 05D 01011101 ]
029 035 01D 00011101 GS (Group Separator) 094 136 05E 01011110 ^
030 036 01E 00011110 RS (Request to Send) 095 137 05F 01011111 _
031 037 01F 00011111 US (Unit Separator) 096 140 060 01100000 `
032 040 020 00100000 SP (Space) 097 141 061 01100001 a
033 041 021 00100001 ! 098 142 062 01100010 b
034 042 022 00100010 " 099 143 063 01100011 c
035 043 023 00100011 # 100 144 064 01100100 d
036 044 024 00100100 $ 101 145 065 01100101 e
037 045 025 00100101 % 102 146 066 01100110 f
038 046 026 00100110 & 103 147 067 01100111 g
039 047 027 00100111 ' 104 150 068 01101000 h
040 050 028 00101000 ( 105 151 069 01101001 i
041 051 029 00101001 ) 106 152 06A 01101010 j
042 052 02A 00101010 * 107 153 06B 01101011 k
043 053 02B 00101011 + 108 154 06C 01101100 l
044 054 02C 00101100 , 109 155 06D 01101101 m
045 055 02D 00101101 - 110 156 06E 01101110 n
046 056 02E 00101110 . 111 157 06F 01101111 o
047 057 02F 00101111 / 112 160 070 01110000 p
048 060 030 00110000 0 113 161 071 01110001 q
049 061 031 00110001 1 114 162 072 01110010 r
050 062 032 00110010 2 115 163 073 01110011 s
051 063 033 00110011 3 116 164 074 01110100 t
052 064 034 00110100 4 117 165 075 01110101 u
053 065 035 00110101 5 118 166 076 01110110 v
054 066 036 00110110 6 119 167 077 01110111 w
055 067 037 00110111 7 120 170 078 01111000 x
056 070 038 00111000 8 121 171 079 01111001 y
057 071 039 00111001 9 122 172 07A 01111010 z
058 072 03A 00111010 : 123 173 07B 01111011 {
059 073 03B 00111011 ; 124 174 07C 01111100 |
060 074 03C 00111100 < 125 175 07D 01111101 }
061 075 03D 00111101 = 126 176 07E 01111110 ~
062 076 03E 00111110 > 127 177 07F 01111111 DEL

ISET Mahdia Informatique Industrielle 3me niveau 27

Vous aimerez peut-être aussi