Chapitre 4 Éléments de base de l’assembleur Pep/8 Jean Privat Université du Québec à Montréal INF2170 — Organisation des ordinateurs et assembleur Automne 2013 Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 1 / 38 Plan 1 Éléments d’assembleur 2 Directives 3 Symboles, adresses, données 4 Instructions Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 2 / 38 Plan 1 Éléments d’assembleur 2 Directives 3 Symboles, adresses, données 4 Instructions Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 3 / 38 Valeurs Constantes numériques Décimaux : 42 Hexadécimaux : 0x2A Caractères : ’*’ Identificateurs (symboles) Alphanumérique 8 caractères maximum Portée globale Associé à une valeur numérique Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 4 / 38 Instructions et directives Instructions Correspond à une instruction machine Exemple LDA 5,i Directives Destinée à l’assembleur Commencent par un point Exemple .WORD 5 Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 5 / 38 Un source assembleur Formatage fixe en colonne Étiquette éventuelle Instruction Opérande éventuelle Commentaire éventuel Objectif Lisibilité pour l’humain Prédominance des commentaires Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 6 / 38 Liste d’assemblage Traduction annotée L’assembleur montre le travail effectué Information suplémentaires Le code machine associé aux instructions et directives Adresse (relative) du code machine La liste et la valeur des symboles Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 7 / 38 Exercice Calculer a = 7 + (b+5) - (c-4) Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 8 / 38 Types d’instructions et de directives Instruction Taille différente (1 ou 3 octet en Pep/8) Adressage différent Registres utilisés différents Rôles différents Directives Syntaxe particulière Génération ou non de code machine Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 9 / 38 Plan 1 Éléments d’assembleur 2 Directives 3 Symboles, adresses, données 4 Instructions Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 10 / 38 Directive .BLOCK Syntaxe .BLOCK nombre Signification Réserve « nombre » octets initialisés à 0 Utilisation Initialisation de mémoire à zéro Allocation statique de place Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 11 / 38 Directive .WORD Syntaxe .WORD valeur Signification Réserve 1 mot (2 octets) initialisé à « valeur » Utilisation Variable globale sur 16 bits avec valeur initiale Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 12 / 38 Directive .BYTE Syntaxe .BYTE valeur Signification Réserve 1 octet initialisé à « valeur » Utilisation Variable globale sur 8 bits avec valeur initiale Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 13 / 38 Directive .ASCII Syntaxe .ASCII chaîne Signification Réserve un octet par caractère de « chaine » initialisé avec ce caractère Exemples .ASCII "Je vais moins vite qu’en motoneige." .ASCII "Ici\nlà\x00" Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 14 / 38 Directive .EQUATE Syntaxe symbole : .EQUATE valeur Signification Associe la « valeur » au « symbole ». Aucun octet n’est réservé. La position de cette directive n’a pas d’importance. Utilisation Constantes non modifiables Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 15 / 38 Directive .ADDRSS Syntaxe .ADDRSS symbole Signification Réserve un mot mémoire initialisé avec la valeur du symbole Utilisation Par ce que « .WORD symbole » ne fonctionne pas Piège : mal nommé Il manque une lettre (la disparition ?) Il n’y a pas d’adresse en jeu (abus de langage) Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 16 / 38 Directive .BURN Syntaxe .BURN adresse Signification Permet d’écrire dans la partie haute de la mémoire Indique la limite RAM/ROM Utilisation Sert à charger un nouveau système d’exploitation Hors du cadre du cours Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 17 / 38 Directive .END Syntaxe .END Signification Indique la fin du programme assembleur Aucun octet n’est réservé. Utilisation .END est obligatoire dans tout programme Ce qui suit le .END est ignoré par l’assembleur Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 18 / 38 Plan 1 Éléments d’assembleur 2 Directives 3 Symboles, adresses, données 4 Instructions Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 19 / 38 Utilisation des symboles Symbole : remplace une valeur Compliquée à calculer à la main (adresse) Compliquée à mettre à jour (constante) Définition Par l’étiquette d’une instruction ou directive (la valeur du symbole est l’adresse de l’instruction) Par la directive .EQUATE Visibilité Les symboles sont globaux Définition et utilisations sont indépendantes Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 20 / 38 Adressages, adresses et symboles Piège La définition d’un symbole, l’utilisation d’un symbole et le mode d’adressage sont indépendants C’est au programmeur d’écrire des programmes qui ont du sens Exemples LDA 5 , d ; l e mot à l ’ a d r e s s e 5 ( ? !) LDA x , i ; l a v a l e u r de x ( une a d r e s s e ?) LDA y , d ; l e mot à l ’ a d r e s s e y ( ? !) STOP x : .WORD 5 y : . EQUATE 5 Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 21 / 38 Représentation des données Représentation données Le format d’une donnée n’est dans dans la donnée Une donnée n’est qu’un tas de bit Un tas de bit peut être déclaré de façons diverses Utilisation des données Une instruction s’attend à un certain type de donné mais n’importe quel tas de bits lui conviendra En fonction des instructions, une même opérande pourra avoir plusieurs sens différents Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 22 / 38 Plan 1 Éléments d’assembleur 2 Directives 3 Symboles, adresses, données 4 Instructions Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 23 / 38 Instructions Déjà vus LDr, STr, ADDr, SUBr, NEGr, STOP Points à considérer Un octet/trois octets Modes d’adressages valides Registres impactés Type (arithmétique, logique, transfert, contrôle) Bits d’états (NZVC) Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 24 / 38 Chargement et stockage Instruction LDr Source : un mot en mémoire ou une valeur immédiate Destination : le mot du registre A ou X Instruction STr Source : le mot du registre A ou X Destination : un mot en mémoire Exemple LDA 5 , i STA x , d Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 25 / 38 Chargement et stockage Instruction LDBYTEr Source : un octet mémoire ou une valeur immédiate Destination : l’octet de poids faible de A où X Instruction STBYTEr Source : l’octet de poids faible de A où X Destination : un octet en mémoire Exemple LDBYTEA 5 , i STBYTEA x , d Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 26 / 38 Entrées-sorties de caractères Instruction CHARI Opérande : l’adresse d’un octet en mémoire Lit un caractère et stocke son code ASCII en mémoire. Instruction CHARO Opérande : un octet en mémoire ou en valeur immédiate Affiche le caractère dont le code ASCII est l’opérande Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 27 / 38 Entrées-sorties de caractères Exemple CHARI CHARI CHARO CHARO a,d b,d b,d a,d Exercice Écrire un programme qui attend les initiales de l’utilisateur (deux lettres) et affiche : bonjour <initiales>. Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 28 / 38 Entrées-sorties de décimaux Instruction DECI Lit un nombre décimal et stocke sa valeur dans un mot en mémoire. Instruction DECO Affiche la valeur décimale du mot (16 bits signé) passé en paramètre (en mémoire ou une valeur immédiate). Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 29 / 38 Entrées-sorties de décimaux Exemple DECI DECI DECO CHARO DECO a,d b,d b,d ’ ’,i a,d Exercice Écrire un programme qui affiche la somme de 2 nombres saisis par l’utilisateur Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 30 / 38 Sorties de chaînes de caractères Instruction STRO Affiche chaque caractère jusqu’au premier octet dont la valeur est 0 (caractère NUL) Exemple STRO x , d STOP x : . ASCII " J ’ aime l e s k i \ x00 " Exercice Le même que pour CHARI/CHARO Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 31 / 38 Branchements Instruction BR La prochaine instruction est située à l’adresse indiqué Par défaut, le mode d’adressage est immédiat Exemple BR l a : DECO STOP i c i : DECO BR . END ici 2, i 1, i la Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 32 / 38 Branchements conditionnels BRV et BRC BRV branche si le bit de statut V est à 1 BRC branche si le bit de statut C est à 1 Exemple LDA x , d ADDA y , d BRV e r r e u r Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 33 / 38 Branchements conditionnels Instructions BRcond BRLE : N=1 ou Z=1 BRLT : N=1 BREQ : Z=1 BRNE : Z=0 BRGE : N=0 BRGT : N=0 et Z=0 Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 34 / 38 Branchements conditionnels Instructions BRcond BRLE : N=1 ou Z=1 (c.a.d. ≤ 0) BRLT : N=1 (c.a.d. < 0) BREQ : Z=1 (c.a.d. = 0) BRNE : Z=0 (c.a.d. 6= 0) BRGE : N=0 (c.a.d. ≥ 0) BRGT : N=0 et Z=0 (c.a.d. > 0) Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 34 / 38 Branchements conditionnels Exemple DECI x , d ; L i t un nombre BRLE e r r e u r ; E r r e u r s i n é g a t i f ou n u l Exercice Demander à l’utilisateur deux nombres et afficher le plus grand Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 35 / 38 Comparaison de nombres Instruction CPx Opérande 1 = le mot dans le registre (A ou X) Opérande 2 = un mot en mémoire ou une valeur immédiate Fait une soustraction (16 bits signés) et ignore le résultat Seuls les bits de statut sont conservés Exemple LDA x , d CPA 1 0 , i BRGT l a Jean Privat (UQAM) ; Range x dan s A ; Compare A a v e c 10 ; Branche l a s i A > 10 04 — Assembleur INF2170 — Automne 2013 36 / 38 Comparaison de nombres Exercice Écrire un programme qui compte de 1 à 100 Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 37 / 38 Comparaison de nombres Piège CPr travaille seulement en 16 bits signés Comparer des octets (des caractères par exemple) demande plus de travail Exercices Écrire un programme qui lit un caractère et indique s’il s’agit d’un ’a’ Écrire un programme qui compte le nombre de ’a’ d’une ligne saisie par l’utilisateur Jean Privat (UQAM) 04 — Assembleur INF2170 — Automne 2013 38 / 38