Chapitre 6
Instructions Pep/8, factorisation et refactorisation
Jean Privat
Université du Québec à Montréal
INF2170 — Organisation des ordinateurs et assembleur Automne 2013
Plan
1 Instructions machines
2 Instructions logiques
3 Instructions spéciales
4 Branchements et sous-programmes
Plan
1 Instructions machines
2 Instructions logiques
3 Instructions spéciales
4 Branchements et sous-programmes
Processeurs
Processeur = travailleur
Chacun à son jeu d’instructions Il existe des familles de processeur
Pep/8
Processeur simplifié 39 instructions 1 ou 3 octets
Code d’instruction
Un octet
Code d’opération (4 à 8 bits) Bits de paramètres
registre adressage ...
Exemples
0000 0000 : STOP 0001 101r : NEGr 0111 raaa : ADDr
Programmes non purs
Principe
Les instructions sont des octets en mémoire Or, on peut modifier les octets en mémoire Donc, on peu modifier les instructions lors de l’exécution
→le programme s’écrit lui-même
Programme dit « non pur »
Ses instructions se modifient à l’exécution Style à proscrire
Exercices : programmes non purs
Simulation accès indexé
Écrire un programme non pur qui affiche un chaîne en utilisant que les adressages directs et immédiats Idée : récrire des spécificateurs d’opérandes
Calculatrice juste-à-temps
Écrire un programme non pur qui demande un nombre d’opération n et un opérateur (+ ou -) ; puis demande n pairs d’opérandes et affiche pour chaque pair le résultats de l’opération
Idée : en fonction de l’opérateur, générer une fois pour toute l’instruction arithmétique adaptée
Plan
1 Instructions machines
2 Instructions logiques
3 Instructions spéciales
4 Branchements et sous-programmes
Instruction logiques
Opérations sur bits
Une valeur est un ensemble de bits
Utilisation
Traiter des tas de bits
Traites des valeurs via leur représentation binaire
Instructions bit-à-bit
Instruction NOTr
Inverse les bits (0→1 et 1→0) Exercice : ~0xEF01 = ?
Instruction ANDr
Fait le « et » binaire des opérandes (1 et 1 → 1, sinon 0)
Exercice : 0xEF01 & 0x7FAF = ?
Instruction ORr
Fait le « ou » binaire des opérandes (0 et 0 → 0, sinon 1)
Exercice : 0xEF01 | 0x7FAF = ?
Instruction bit-à-bit
Attention
NOTr, ANDr et ORr ne sont pas les connecteurs logiques booléens
NEGr 6= NOTr
Exercice
Écrire un programme qui transforme les minuscules en majuscules.
Dur : écrire un programme qui vérifie si un nombre est une puissance de 2
Instructions de décalage
Instruction ASLr : décalage à gauche Le bit de poids fort est rangé dans C Le nouveau bit de poids faible est 0 Exercice : 0xABCD << 1 = ?
Instruction ASRr : décalage à droite Le bit de poids faible est rangé dans C Le nouveau bit de poids fort vaut l’ancien Exercice : 0xABCD >> 1 = ?
Instructions de décalage
Attention
Travaillent en 16 bits signés
Exercices
Écrire un programme qui multiple un nombre par 100 Écrire un programme qui affiche le nombre de bits à 1 d’un nombre 16 bits signé
Instructions de décalage circulaire
Instruction ROLr : rotation à gauche Ancien bit fort → nouveau C
Ancien C → nouveau bit faible
Instruction RORr : rotation à droite Ancien C → nouveau bit fort
Ancien bit faible → C
En pratique
Peu d’usage car C est difficilement contrôlable en Pep/8
Plan
1 Instructions machines
2 Instructions logiques
3 Instructions spéciales
4 Branchements et sous-programmes
Instructions non réalisées
Instructions NOPn et NOP Ne font rien
12 spécificateurs d’instruction
Utilité
Place pour commentaires
Place pour code généré (programmes non purs) Appel systèmes
Instructions de transfert spéciaux
Instruction MOVSPA
Copie le pointeur de pile vers A
Instruction MOVFLGA Copie NZVC vers A
Attention
Vers A seulement
Dans un sens seulement
Plan
1 Instructions machines
2 Instructions logiques
3 Instructions spéciales
4 Branchements et sous-programmes
Instructions de branchement
Déjà vus : BR et BRcond
Branche (conditionelement) à une adresse PC ← opérande
Adressages
Immédiat ou indexé
Exercice
Écrire un programme qui affiche un menu fonctionnel (mais qui ne fait rien)
Idée : traduire un switch/case en BR indexé
Exercice
Sommes
Écrire un programme qui demande deux nombres affiche leur somme
demande deux autres nombres affiche leur somme
indique si cette dernière est la plus grande
Appel de sous-programmes
Instruction CALL
Empile la valeur du compteur ordinal (2 octets) Branche à l’adresse indiquée
Instruction RETn
Dépile n octets (pour l’instant 0)
Dépile 2 octets et branche à cette adresse
Utilisation
Sous-programmes (procédures et fonctions) Exercice
Refaire l’exercice précédent
Manipulation de pile
Instruction ADDSP Dépile des octets
Instruction SUBSP Empile des octets Plus tard
Semaine 8
Retour d’appel système
Instruction RETTR Retour de TRAP Encore plus tard
Semaine 11