Vous êtes sur la page 1sur 9

Chapitre VI : Méthode de Programmation

Comment écrire un PGM et l’ASSEMBLER ?

Pour écrire un PGM en Assembleur il existe 2 Méthodes :

 Assembler directement les instructions en mémoire grâ ce à DEBUG.

 Encoder le code dans un fichier ASCII

et ensuite, exécuter le PGM MASM pour assembler le PGM ( avec compilateur pour traduire en
langage machine ).

VI-1 LE PGM sous DEBUG

Les Commandes

C :>debug↲

(Un trait d’union nous signale alors que DEBUG attend la prochaine commande)

-q (Quit)

Cette commande interrompt l’exécution de DEBUG

-d (Dump Memory)

Cette commande affiche le contenu d’une zone Mémoire.*

Exemple :

-d 0100↲

Le Contenu de la partie de Mémoire sera représenté sur 3 colonnes


 Colonne de Gauche : Adresse Mémoire sous la forme SEGMENT : OFFSET
 Colonne Centrale : Le Contenu de la Mémoire en notation Hexadecimale
 Colonne de Droite : Le contenu de la Mémoire en notation ASCII

-u (Un Assemble)

Cette commande « desassemble » le code machine.


Exemple :

- u 0100↲

Le contenu de la Mémoire affiché sous une autre forme sur 4 colonnes

 Colonne de Gauche : Adresses Mémoires


 Colonne Centrale : Représente le Contenu de la Mémoire en Notation
Hexadécimale (traduction en langage machine des intructions )
 2 Colonnes de Droite : Représentent les Instructions en Assembleur

⟶VOIR Différence en tapant

-u 0101↲

REMARQUES : L’Adresse d’une Instruction ou d’une zone de Données doit être EXACTE

Si on se trompe d’un seul byte tout risque d’être mal interprété

NB : Il n’y a ni IDENTIFICATEUR ni LABEL dans les instructions mais directement les operandes
ou l’ADRESSE Memoire

Ex : JNE 0126

-r (Registres)

Cette commande affiche le contenu des Registres du


Microprocesseur
Exemple :

-r ↲
- Le contenu des différents Registres sont affichés en HEXADECIMAL
-Le contenu du Registre FLAG en souligné
et les indicateurs sont affichés dans l’ordre suivant : OF DF IF SF ZF AF PF CF

Et les Notations suivantes sont utilisées.

Indicateur =0 =1
OF (overflow) NV OV
DF (Direction) UP DN
IF(Interruption) EI DI
SF(Signe) PL NG
ZF(Zéro) NZ ZR
AF(Aux) NA AC
PF(Parité) PO PE
CF(Carry) NC CY

Si l’Indicateur OF est à 0 , DEBUG affichera NV


S’ il est à 1 , DEBUG affichera OV

La prochaine instruction qui sera exécutée est affichée en bas

a(Assemble)

 Cette commande -a est nécessaire pour assembler


les Instructions
c.-à-d. pour faire entrer les Instructions du
PGM.
 Quand il n’y a plus d’instructions à entrer on tape RETURN↲ pour revenir en
Mode Normal.

Exemple :

- a 0100↲
6800:0100 MOV AX,FFFF↲
6800:0103 MOV AH,5↲
6800:0105 MOV BH,6↲
6800:0107 MOV AL,BH↲
6800:0109 ↲

Pour vérifier que le PGM est bien en Mémoire, tapons :

-u0100 ↲

-t (Trace instruction)

La commande –t permet d’exécuter l’Instruction courante


(repérée par l’Adresse CS : IP)
et de s’arrêter ensuite en nous montrant le contenu des
Registres.

NB :

L’avantage de DEBUG est qu’il peut exécuter un PGM instruction par instruction avec
consultation ou Modification manuelle des Registres après chaque instruction.

Exemple : Exécutons le PGM qu’on a écrit auparavant.

Tapons d’abord la commande -r pour afficher le contenu des Registres du Microprocesseur


avant execution de la première instruction .

-r ↲

La première instruction : MOV AX, FFFF est à l’adresse CS : IP (IP= Ø1ØØ)

En tapant la commande -t

-t ↲

On remarque que le contenu de Registre AX est modifié à FFFF

Et IP =Ø1Ø3 pour l’instruction suivante

-t↲
AX est modifié à O5FF etc …..

NB : Incrémentation automatique du Registre IP qui est le Pointeur d’Instruction.

 Modification Manuelle des Registres

 Pour modifier un Registre, nous devons taper la commande -r suivie du


Registre à modifier
 DEBUG affiche alors le nom du Registre,
son contenu actuel suivi du signe « : »
 Nous pouvons alors introduire la nouvelle valeur du Registre

Exemple :

-r AX↲
AX 0506 :

-r IP↲
IP 0109 :

 Les Indicateurs

Ecrivons un autre PGM

-a Ø1ØØ↲

6800 :Ø1ØØ MOV AX, FFFF

MOV BX, FFFF

ADD AX, BX
MOV AX,0001

DEC AX

INC AX

SUB AX,0002

MOV AH,70

MOV BH,50

ADD AH, BH

Pour verifier que le PGM est bien en Mémoire on tape :

-u↲

Executions du PROGRAMME

-r↲ (pour voir le contenu de depart des Registres avant execution du PGM )

-t↲

-t↲

-t↲

On remarque que l’Indicateur CF est positionné à CY ( CF=1 )

car l’Addition de FFFF et FFFF , ADD AX,BX , doit provoquer une RETENUE

-t↲

L’Indicateur ZF est positionné à ZR ( ZF=1 )

Car AX=1 , alors l’instruction DEC AX doit donner un resultat NUL (0)

-t↲

L’indicateur ZF est positionné à NZ ( ZF=0 )

Car en incrementant INC AX ,le Resultat est DIFFERENT de 0

-t↲

L’Indicateur SF est positionné à NG (SF=1 )

Car en soustrayant SUB AH,0002 , on obtient un resultat NEGATIF


-t↲

-t↲

-t↲

L’Indicateur OF est positionné à OV ( OF=1 )

Car l’Addition ADD AH,BH provoque un DEBORDEMENT de capacité

-t↲

NB :

1) Pour changer l’écriture à une Adresse CS :0106

EX :

-a0106↲

2) Pour vérifier que le contenu est bien en MEMOIRE à partir du Début CS : 0100

EX :

-u0100↲

3) Pour exécuter à partir du début si on se trouve à une adresse quelconque 0106

EX : Debut 0100

On charge l’ IP

-rIP↲

IP 01O6 : 0100↲
Debut : MOV AX , BABA

MOV BX , FAFA

MOV AH , 70

MOV BH , 50

ADD AH , BH

MOV BX , 1

DEC BX

INC BX

SUB BX , 2

JMP Debut

(saut à l’Adresse CS : 0100 )

Vous aimerez peut-être aussi