Académique Documents
Professionnel Documents
Culture Documents
1 octet 2 octet
La taille d'une instruction est de 3 octets. Le champ adresse est sur 2 octets.
L'adresse de chaque instruction peut être alors définie sur 16 bits qui est équivalent
à 4 chiffres en hexadécimal. Chaque octet a une adresse.
Nous ne pouvons pas résoudre les références en avant (des symboles non
rencontrés en zone label ou donnée donc que nous ne connaissons pas encore),
ces symboles seront tous connus après la rencontre de la directive END.
CHA est traduisible car son équivalent est 00 dans la table des codes opérations
donné dans l'exercice. Par contre, le symbole "Zone" ne peut être traduit car on ne
connait pas encore l'équivalent de ce symbole (Il s'agit de l'adresse de l'instruction
de la ligne 9). De même, "ADD Deux" ne peut être traduite directement tant qu'on
ne connait pas l'équivalent du symbole "Deux" qui correspond à l'adresse de
l'instruction la ligne 10. Il faudrait d'abord donc résoudre le problème des
références en avant en consultant une table (table des symboles) qui contient
l'adresse correspondant à chaque symbole.
On doit donc parcourir le programme une première fois pour déterminer l'adresse
de chaque instruction du programme (qui est sur 4 chiffres en hexadécimal) qui
nous mène à l'extraction des valeurs des symboles.
Une fois les adresses correspondant aux symboles sont résolues donc on a
rencontré le end , on parcourt le programme ligne par ligne une deuxième fois
pour traduire le programme.
1
000 000 000 000 000 000
000 000 000 000
4 5 6 7 8 9
0 1 2 3
1 octet
2 octet 2 octet
Debut Suite
(étiquette) (étiquette)
2
A chaque fois qu'on obtient l'adresse correspondant à un
symbole (en rouge sur le tableau), on le met dans la table des
symboles. Il s’agit de la valeur du compteur d’emplacement
correspondant à l’instruction traitée.
8 Fin 0015 1
END
Remarque
3
Zone DEC 17 est sur 2 octets, DEC est une directive d’assemblage(ordre à
l’assembleur) qui définit la valeur 17 sur 2 octets (un mot), 17 occupe deux
octets).
4
4 BEG Fin 0009 04 0012
8 Fin 0015 99
END
Principe de fonctionnement:
Dans ce cas, on parcourt le programme une seule fois. Une instruction qu'on ne
peut pas traduire directement (à cause d'une référence en avant) est mise dans la
table des instructions non assemblées.
A chaque fois qu'on arrive au niveau d'un symbole, on l'insère dans la table des
symboles. Si le symbole est connu, on précise sa valeur et on met le bit indiciel à
0. Sinon, on met le bit indiciel à 1 et on précise dans une file d'attente l'adresse de
l'instruction qui demande à utiliser le symbole et on poursuit le parcours du
5
programme. Une fois qu'on arrive au niveau de l'instruction étiquetée par le
symbole, on insère sa valeur dans la table des symboles, on se rapporte à l'adresse
contenue dans la file d'attente et on la met à jour au niveau de la table des
instructions non assemblées (puisqu'on connait désormais la valeur du symbole,
nous pouvons traduire l'instruction qui demande à l'utiliser).
Solution:
-Au niveau de cette instruction, nous avons aussi le symbole "Zone" qu'on insère
dans la table des symboles. Comme il s'agit d'une référence en avant, on met le
bit indiciel à 1 pour indiquer qu'on ne le connait pas et on met dans la file d'attente
correspondant au symbole l'adresse de l'instruction qui demande à l'utiliser
(0000).
-Le symbole "Deux" est inconnu. On l'insère dans la table des symboles et on met
le bit indiciel à 1. On insère dans la file d'attente l'adresse de l'instruction en cours
qui demande à utiliser ce symbole (0003).
-Le symbole Max est une référence en avant inconnue (car non rencontrée par
l’assembleur dans la zone label ou donnée). On l'insère dans la table des symboles
6
et on ajuste le bit indiciel à 1 pour indiquer que sa valeur est inconnue. On insère
dans la file d'attente l'adresse de l'instruction en cours qui demande à utiliser ce
symbole (0006).
-L'instruction n'est pas traduisible. On l'insère donc dans la table des instructions
non assemblées avec son adresse (adresse de l'instruction précédente+sa taille).
Lignes 4 et 5 du programme:
-Fini et Trois sont des symboles qui correspondent à des références en avant
inconnues. On met le bit indiciel à 1 pour indiquer que leurs valeurs sont
inconnues. On insère dans les files d'attente les adresses des instructions les
sollicitant (0009 et 000C respectivement).
-On insère les instructions correspondantes dans la table des instructions non
assemblées avec leurs adresses respectives.
Ligne 7 du programme:
-Nous mettons le symbole "Result" dans la table des symboles avec l'adresse de
l'instruction (ligne) en cours dans la file d'attente.
Mise à jour
2 02 0018 0003
3 06 0020 0006
8
4 04 0012 0009
2 02 ---------- 0003
3 06 ---------- 0006
4 04 ---------- 0009
5 02 ---------- 000C
7 01 --------- 0012
Une fois le programme parcouru, nous fusionnons la table des inst. assemblées
et la table des inst. non assemblées selon l'ordre croissant des adresses (ou bien
des numéros de lignes).
9
Nous notons que le code hexadécimal généré correspond au code objet (partie
instructions + données) mais il ne correspond pas encore au code exécutable qui
sera obtenu après édition des liens (voir le chapitre 2).
10