Next: Résumé #4: L'arithmétique des
Up: Résumés de Organisation et
Previous: Résumé #2: Le rôle
À lire: pp. 96 à 142, 151 1/2 à 155 1/4, A-20
2/3 à A-31 1/3, A-38 à A-67, E-1 à E-10 2/3, E-21 à E-23 2/3.
- Machine RISC (Reduced Instruction Set Computer):
- Motivation/objectif: Fournir des opérations simples à
exécuter, de façon à simplifier l'unité de contrôle et
ainsi obtenir un débit plus élevé (nombre d'instructions par
seconde), i.e., un CPI plus faible.
- Registres:
- 32 registres de 32 bits.
- Le registre $0 est toujours 0.
- Registres à usage général: Du point de vue de la machine, tous les registres sont traités de la même façon.
- Pseudo-instructions:
- Instructions du langage d'assemblage qui correspondent à une (1) ou plusieurs instructions machines.
- Le registre $1 est utilisé par l'assembleur comme registre temporaire lors du traitement (expansion) des pseudo-instructions.
- Opérations arithmétique et logiques, e.g., add,
sub, or, and, etc.:
- Toujours 3 opérandes (1 destination + 2 sources).
- Les opérandes sont soit trois (3) registres (type R, e.g.,
add, sub, or), soit 2 registres et 1 constante (16
bits) (type I = immédiat, e.g., addi, ori).
- Architecture rangement/chargement:
- Les accès aux données en mémoire se font uniquement via
les instructions explicites de rangement (sw = store word)
ou de chargement (lw = load word).
- Un seul mode d'adressage pour l'accès aux données: Le calcul de l'adresse effective se fait par l'addition du contenu d'un registre de base (32 bits) et d'un déplacement (16 bits).
- Une adresse, pour les données, indique toujours l'adresse d'un octet. Un mot mémoire étant composé de 4 octets, les adresses de mots contigus diffèrent donc de 4.
- Branchements et tests:
- Branchements: beq (branch equal) et bne (
branch not equal) sont les principales instructions machines
de branchement. Des instructions de branchement et comparaison avec
zéro (0) sont aussi disponibles, e.g., bgez, bgtz,
blez, bltz.
- L'instruction slt (set on less than) est l'autre
instruction machine pouvant être utilisée pour effectuer des
comparaisons (via l'affectation du résultat du test à un
registre).
- Les diverses variantes de branchements ou comparaisons entre
registres arbitraires peuvent être obtenues via les instructions
machines précédentes ou par pseudoinstructions:
- bXX
- $r1, $r2, Etiq
- sXX
- $rd, $rs1, $rs2
-
- où XX = eq, ne, lt,
gt, ge ou le
- Destination d'un branchement: Adresse relative à CP+4
(déplacement relatif au compteur de programme).
- Support machine pour procédures et fonctions:
- Principalement jal (jump and link) et jr (
jump register).
- La sauvegarde/restauration des registres est la tâche du
programmeur ou compilateur.
- Mode d'adressage: Indique comment l'architecture spécifie les
adresses des objets qu'elle va accéder. (Dans le cas d'un accès
mémoire, on parle alors de la spécification de l'adresse
effective.)
Quatre (4) modes d'adressage sur MIPS (au niveau machine):
- i)
- Adressage par registre: L'opérande est un registre;
- ii)
- Adressage indexé (avec déplacement): L'opérande se
trouve à l'emplacement mémoire dont l'adresse est donnée par le
contenu d'un registre plus un déplacement (constante);
- iii)
- Adressage immédiat: L'opérande est une constante à l'intérieur de l'instruction elle-même;
- iv)
- Adressage relatif à CP: L'adresse est la somme du
compteur de programme (CP+4 sur MIPS) et d'une constante située dans
l'instruction. (Cf. page : Branchements.)
- Convention MIPS sur les registres et leur utilisation
(Cf. manuel: Fig. A.9, p. A-24): Indique les noms symboliques donnés
aux divers registres, basés sur la convention utilisée pour les
appels de procédure, appels système, etc.
- Convention pour les appels de procédures: les 4 premiers
paramètres sont transmis dans les registres $4, $5, $6 et $7,
les autres sur la pile; les résultats sont retournés dans les
registres $2, $3 (les autres sur la pile). (Des études empiriques
ont montré que 91% des procédures avaient 4 paramètres ou
moins.)
- Encodage des instructions = comment les instructions sont
représentées à l'intérieur de la machine:
- Seulement 3 formats d'instructions sont nécessaires: R, I et
J.
- Les divers formats sont très semblables les uns aux autres,
i.e., les champs semblables sont aux mêmes positions, ce qui
facilite le décodage anticipé.
- Les 3 formats (types) sont les suivants:
- R:
- Instructions arithmétiques et logiques (Registers)
- I:
- Accès mémoire, branchements, ops. avec valeur
immédiate (Immediate)
- J:
- Instructions de saut (Jump)
- Valeurs immédiates: seulement 16 bits peuvent être
conservés dans les instructions. Les constantes de plus de 16 bits
sont traitées, par l'assembleur, avec l'instruction lui (
load upper immediate) et nécessitent deux instructions. Des
études empiriques ont montré que 16 bits étaient suffisants dans
plus de 80% des cas.
- Branchements: déplacement de 16 bits
seulement. Ces 16 bits sont amplement suffisants, puisque le
déplacement est relatif à CP+4. Des études on montré que 8
bits étaient suffisants dans près de 90% des cas. (Les
branchement se font à l'intérieur d'une même procédure.)
(Plus précisément, la constante 16 bits -- signée, i.e.,
négative ou positive -- indique la distance, en instructions,
entre l'instruction destination et l'instruction suivante (i.e.,
CP+4); dans le cas d'un branchement vers l'arrière, le déplacement
est donc négatif. L'adresse destination effective est donc:
CP+4+(4*dépl), où dépl est la constante conservée
dans l'instruction.)
- Sauts avec instructions j: Adresses de 26 bits. Des
adresses plus grandes que dans le cas des branchement sont
nécessaires, de façon à réaliser des transferts d'une
procédure à une autre. (Comme dans le cas des
branchements, les 26 bits indiquent l'adresse d'un mot, et non d'un
octet. L'adresse effective du saut est donc 4*adr. On verra, au
chapitre 4, d'où proviennent les 4 bits manquants.)
Des sauts à des adresses de 32 bits peuvent être effectués via
l'instruction jr.
- Archétype des machines CISC (Complex Instruction Set
Computer).
- Motivation/objectif: Fournir des opérations plus puissantes
de façon à réduire le nombre d'instructions exécutées par
un programme et de façon à faciliter (supposément) la
compilation des langages de haut niveau.
- Grande variété de modes d'adressage: littéral,
immédiat, par registre, par registre indirect, déplacement,
déplacement indirect, indexé, auto-incrément,
auto-décrément, auto-incrément indirect.
- Grande variété d'instructions arithmétique et logiques:
une instruction est spécifiée par son opération (add,
sub, etc.), son type (b: octet, w: demi-mot, l:
mot, q: mot double) et le nombre d'opérandes (2 ou 3). (En
tenant compte des divers modes d'adressage, il existe donc 30000
versions différentes de l'addition entière!)
- Pas d'opération explicite de rangement/chargement pour les
accès aux données en mémoire: les opérandes (sources ou
destination) des opérations arithmétiques et logiques peuvent
provenir de n'importe où (constante, registre, mémoire).
- Support pour procédures: Utilisation de masques indiquant à
la machine quels registres doivent être sauvés à l'appel puis
restaurés au retour.
- Encodage des instructions:
- Instruction = opcode (1 ou 2 octets) + spécifications des
opérandes (1, 2 ou 3 opérandes)
- Spécification d'un opérande: préfixe (1 octet, optionnel)
+ mode (1 octet) + adresse (littéral ou numéro de registre)
- Taille d'une instruction: Dépend du nombre d'opérandes et
des modes d'adressage utilisés. Varie de 1 à 10 octets, ce qui
peut nécessiter plusieurs accès à la mémoire simplement pour
obtenir une seule intruction.
- Implications: Le décodage des instructions est relativement
complexe et peut nécessiter un grand nombre d'accès mémoire:
plusieurs accès pour obtenir l'instruction suivis de plusieurs
accès pour obtenir les opérandes et ranger le résultat.
Next: Résumé #4: L'arithmétique des
Up: Résumés de Organisation et
Previous: Résumé #2: Le rôle
Guy Tremblay
Tue Aug 27 14:04:33 EDT 1996