CEG2536: Architecture des Ordinateurs I

Transcription

CEG2536: Architecture des Ordinateurs I
Chapitre VI
Programmation de l’Ordinateur de Base
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
1 / 37
Le langage machine
Le langage machine
Les programmes pour un ordinateur peuvent être écrits dans multiples langages.
Les langages de programmation peuvent se diviser en quatre catégories:
1
2
3
4
Le code binaire. Il s’agit d’une séquence d’instructions et d’opérandes représentés sous forme binaire,
reflétant le contenu exact de la mémoire de l’ordinateur.
Le code octal ou hexadécimal. Ceci est une transcription équivalente du code binaire en une
représentation hexadécimale ou octale.
Code symbolique. Ici, chaque instruction est représentée par un ou plusieurs symboles codes. Un
compilateur est alors nécessaire pour transcrire chaque instruction en une instruction codée en
binaire à être exécutée par l’ordinateur.
Langages de programmation à un niveau plus élevé. Dans ces langages, chaque instruction peut être
transcrite par le compilateur en une séquence de plusieurs instructions codées en binaire. Le C, le
Java, le Fortran en sont des exemples.
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
3 / 37
Le langage machine
Example 1 (Addition de deux nombres).
Voici un programme qui additionne deux nombres écrits dans les quatre types de langages de
programmation.
Programme binaire
Programme hexadécimal
Programme symbolique
Programme Fortran
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
4 / 37
Le langage machine
Dans ce chapitre, nous allons utiliser les mêmes 25 instructions que celles de l’ordinateur de
base du Chapitre 5.
Ces instructions sont récapitulées dans la Table 5-2 de votre manuel (page 133) et sont aussi
redéfinies dans la Table 6-1 du manuel (page 175), où:
le symbole m est utilisé pour dénoter l’adresse effective,
le symbole M est utilisé pour se référer au mot de la mémoire qui se trouve à l’adresse effective m.
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
5 / 37
Le langage machine
Table 1: Instructions de l’ordinateur
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
6 / 37
Le langage machine
Langage machine. Un programme en langage machine est représenté en forme binaire,
octale, ou hexadécimale (de la première ou de la deuxième catégorie). Aucune transcription
(compilateur) n’est nécessaire pour exécuter un programme en langage machine.
Langage assembleur. Un programme écrit en langage assembleur est un programme
symbolique (de la catégorie 3). Le compilateur qui transcrit du langage assembleur en code
binaire est appelé un assembleur.
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
7 / 37
Le langage machine
Example 2 (Addition de deux nombres).
Programme symbolique
Programme en assembleur
Les programmes en assembleur sont plus pratiques à utiliser que les programmes symboliques
ordinaires, car ils permettent à l’utilisateur de:
représenter une adresse hexadécimale avec une adresse symbolique, et
représenter un opérande hexadécimal avec un opérande décimal.
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
8 / 37
Langage assembleur
Langage assembleur
Pratiquement chaque microprocesseur/ordinateur possède son propre langage assembleur.
Les règles de l’écriture en langage assembleur sont documentées et publiées dans les manuels
de chaque microprocesseur.
Ici, nous utiliserons un langage assembleur qui est particulier à l’ordinateur de base décrit
dans le chapitre 5.
Dans ce qui suit, nous allons formuler les règles de ce langage assembleur.
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
9 / 37
Langage assembleur
Règles du langage assembleur
Règles du langage assembleur
Chaque ligne d’un programme en assembleur est arrangée en 3 colonnes, appelées champs:
[étiquette,] instruction [/commentaire]
1
2
3
Le champ étiquette peut être vide, ou peut spécifier une adresse symbolique.
Le champ instruction spécifie une instruction machine, ou une pseudo-instruction.
Le champ commentaire peut être vide, ou peut contenir un commentaire.
Une adresse symbolique, dans le champ étiquette, consiste en une lettre suivie d’un, deux ou
aucuns caractères alphanumériques.
Le champ instruction peut spécifier:
1
2
3
Une instruction référencée à la mémoire (MRI)
Une instruction référencée à un registre, ou une instruction d’entrée/sortie (non-MRI)
Une pseudo-instruction avec ou sans opérande
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
10 / 37
Langage assembleur
Règles du langage assembleur
Une instruction référencée à la mémoire consiste en deux ou trois symboles séparés par des
espaces: opcode-symbole adresse-symbolique [I]
L’opcode-symbole est un symbole de trois lettres qui définit une opération MRI de la Table 1.
Le second code est une adresse symbolique.
Le troisième symbole est optionnel. Si présent, c’est la lettre “I”.
La présence de “I” dans une MRI dénote une instruction à adressage indirect, tandis que son
absence dénote une instruction à adressage direct.
Une instruction non-MRI est désignée par l’un des symboles de 3 lettres de la Table 1 et
représente une instruction référencée à un registre, ou bien une instruction d’entrée/sortie.
Example 3.
Voici des exemples de symboles qui peuvent être placés dans le champ instruction.
CLA
non-MRI
ADD OPR
adressage direct MRI
ADD PTR I
adressage indirecte MRI
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
11 / 37
Langage assembleur
Règles du langage assembleur
Une pseudo-instruction n’est pas une instruction machine, et donc elle n’est pas transcrite en
une instruction codée par l’assembleur.
Une pseudo-instruction est plutôt une instruction qui donne à l’assembleur de l’information
sur une instruction particulière dans le programme.
Nous supposerons que l’assembleur défini dans ce chapitre supporte les quatre
pseudo-instructions qui se trouvent dans la Table 2.
Table 2: Définitions de pseudo-instructions
Symbole
ORG N
END
DEC N
HEX N
Information pour l’assembleur
Le nombre hexadécimal N est la location mémoire de l’opérande
ou de l’instruction qui se trouve à la prochaine ligne
Dénote la fin du programme symbolique
N est un nombre décimal signé à être converti en binaire
N est un nombre hexadécimal signé à être converti en binaire
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
12 / 37
Langage assembleur
Règles du langage assembleur
ORG (origin): informe l’assembleur que l’instruction ou l’opérande dans la ligne qui suit est
placé à la location mémoire spécifiée par le nombre hexadécimal écrit à droite de ORG.
Il est possible d’utiliser ORG plus d’une fois dans un programme pour spécifier plus d’un
segment en mémoire.
Le symbole END informe l’assembleur que le programme est terminé.
DEC N et HEX N spécifient la base de N.
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
13 / 37
Langage assembleur
Règles du langage assembleur
Example 4 (Soustraction de deux nombres).
Table 3: Programme en langage assembleur pour faire la soustraction de deux nombres
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
14 / 37
Langage assembleur
Transcription en binaire
Transcription en binaire
Pour qu’un programme soit exécuté par n’importe quel ordinateur, il doit être converti en
code machine qui soit propre à cet ordinateur par un compilateur approprié.
Un assembleur est un compilateur qui transcrit chaque instruction écrite en assembleur en
son équivalent binaire.
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
15 / 37
Langage assembleur
Transcription en binaire
Example 5.
La transcription du programme écrit en assembleur de la soustraction de deux nombres (présenté
dans l’exemple précédent) en son équivalent en code machine est montrée dans la table suivante.
Table 4: Transcription en code machine du
programme de soustraction de deux nombres
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
16 / 37
Langage assembleur
Passes de compilation
Passes de compilation
La compilation d’un programme écrit en assembleur vers un code machine par l’assembleur
s’accomplit en deux passages (parcours du programme).
Pendant le premier passage:
une location mémoire (adresse) est assignée à chaque instruction et opérande (ORG et END n’ont
pas d’assignations mémoire, car ce sont des pseudo-instructions).
une table de symboles d’adresses définissant les adresses en hexadécimal de chaque adresse
symbolique est construite. Par exemple, la table des symboles d’adresses du programme de l’exemple
précédent est montrée ci-dessous:
Symbole d’Adresses
MIN
SUB
DIF
Adresse Hexadécimale
106
107
108
Aucun code d’instruction n’est créé lors du premier passage.
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
17 / 37
Langage assembleur
Passes de compilation
Lors du second passage du programme en assembleur:
la table des symboles d’adresses formée au premier passage est utilisée pour déterminer la valeur de
l’adresse de chaque instruction.
un code complet est créé pour chaque instruction.
Example 6.
L’instruction LDA SUB est transcrite lors du second passage en code binaire en:
examinant l’opcode hexadécimal de l’opération LDA de la table Table 1 ⇒ 2,
déterminant la valeur hexadécimale de l’étiquette SUB à partir de la table des symboles d’adresses
formée lors du premier passag ⇒ 107, et
remettant le bit 15 du code de l’instruction à 0, puisque l’instruction est une adresse directe MRI (la
lettre “I” n’est pas présente)
Le code complet de l’instruction en hexadécimal est alors formé en “assemblant” les
segments ci-dessus ⇒ 2107
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
18 / 37
Boucles de programme
Boucles de programme
Considérez le programme Fortran suivant, qui fait l’addition de 100 entiers, et range le
résultat dans un mot de la mémoire.
3
DIMENSION A(100)
INTEGER SUM, A
SUM = 0
DO 3 J=1, 100
SUM = SUM + A(J)
Il est possible d’écrire un programme assembleur qui fait la même chose. Le programme est
montré dans la Table 5.
Les entiers qu’il faut ajouter sont ranges dans des locations mémoire consécutives, à partir
de l’adresse (150)16 (ligne (19)10 du code).
Les initialisations de variables sont faites aux lignes (13)10 jusqu’à (17)10 du code.
La partie “boucle” du programme se trouve entre aux lignes (7)10 jusqu’à (10)10 du code.
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
19 / 37
Boucles de programme
Table 5: Programme en assembleur pour ajouter 100 nombres
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
20 / 37
Programmation des opérations logiques et arithmétiques
Programmation des opérations logiques et arithmétiques
Les opérations qui ne sont pas incluses dans l’ensemble des instructions machine doivent être
implémentées par un programme.
Les opérations qui peuvent être effectuées par une unique instruction machine sont dites
implémentées en matériel.
Les opérations qui sont faites par un programme (un ensemble d’instructions) sont dites
implémentées en logiciel.
L’implémentation en matériel est plus coûteuse que l’implémentation en logiciel, mais
l’exécution des opérations est plus rapide.
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
21 / 37
Programmation des opérations logiques et arithmétiques
Programme de multiplication
Programme de multiplication
L’ordinateur qui a été conçu au chapitre 5 ne contient pas d’instructions pour effectuer une
multiplication.
Par conséquent, une implémentation logicielle est nécessaire pour donner à l’ordinateur la
capacité de multiplier deux nombres.
Pour simplifier l’implémentation logicielle de l’opération de multiplication de l’ordinateur de
base, on suppose que les deux opérandes sont non signés, et qu’ils n’ont pas plus de 8 bits
significatifs, de façon à ce que le produit ne dépasse pas la capacité de 16 bits significatifs.
Le schéma de la Figure 1 montre la procédure suivie pour l’implémentation logicielle de
l’opération de multiplication.
Le programme en assembleur de la multiplication est montré dans la Table 6.
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
22 / 37
Programmation des opérations logiques et arithmétiques
Programme de multiplication
Figure 1: Schéma du programme de
multiplication
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
23 / 37
Programmation des opérations logiques et arithmétiques
Programme de multiplication
Table 6: Programme de multiplication de deux nombres positifs
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
24 / 37
Programmation des opérations logiques et arithmétiques
Addition en précision double
Addition en précision double
Pour augmenter la précision de l’addition, les opérandes peuvent être rangés dans deux mots
de mémoire ou plus, au lieu de seulement un.
Un nombre rangé dans deux mots de la mémoire est dit avoir une précision double.
Lorsque des opérandes en précision double sont utilisés pour effectuer certaines opérations,
ils doivent être traités d’une manière spéciale.
Un programme en assembleur qui additionne deux nombres en précision double est montré
dans la Table 7.
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
25 / 37
Programmation des opérations logiques et arithmétiques
Addition en précision double
Table 7: Programme pour additionner deux nombres en précision double
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
26 / 37
Programmation des opérations logiques et arithmétiques
Opérations logiques
Opérations logiques
Une opération logique peut aussi être implémentée en logiciel si elle n’est pas supportée
directement par l’ALU.
Par exemple, l’ALU de l’ordinateur de base ne possède pas d’implémentation matérielle de
l’opération OU, mais supporte matériellement les opérations ET et NON.
Puisque (x ∨ y ) peut s’exprimer aussi comme (x 0 ∧ y 0 )0 , l’opération OU peut être
implémentée en logiciel. Un programme symbolique qui fait cela est montré ci-dessous.
LDA A
CMA
STA TMP
LDA B
CMA
AND TMP
CMA
Charger le premier opérande A
Complémenter pour obtenir A’
Ranger A’ dans une location temporaire
Charger le deuxième opérande B
Complémenter pour obtenir B’
Ajouter à A’ pour obtenir (x 0 ∧ y 0 )0
Complémenter pour obtenir (x ∨ y )
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
27 / 37
Programmation des opérations logiques et arithmétiques
Opérations de décalage
Opérations de décalage
L’ordinateur de base possède une implémentation matérielle de décalage circulaire.
Une opération de décalage à droite peut être réalisée en logiciel par les instructions suivantes:
CLE
CIR
Une opération de décalage à gauche peut être réalisée en logiciel par les instructions
suivantes:
CLE
CIL
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
28 / 37
Programmation des opérations logiques et arithmétiques
Opérations de décalage
Une opération de décalage à droite arithmétique peut être réalisée en logiciel par les
instructions suivantes:
CLE
SPA
CME
CIR
/Mettre E à 0
/Sauter l’instruction suivante si AC > 0; E reste 0
/AC < 0; mettre E à 1
/Décalage circulaire de E et AC
Example 7 (Décalage arithmétique à gauche).
Ecrivez un programme en assembleur qui implémente une opération de décalage arithmétique à
gauche.
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
29 / 37
Sous-routines
Sous-routines
Appeler une sous-routine dans un programme se fait en utilisant l’instruction BSA.
Pour illustrer comment utiliser l’instruction BSA dans ce contexte, une sous-routine qui
multiplie le contenu de AC par 16 (en décalant AC de 4 bits vers la gauche) est montré dans
la Table 8.
La sous-routine est appelée deux fois dans le programme. Une fois à la ligne (101)16 et une
autre fois a la ligne (104)16 .
Lorsque la première instruction BSA est exécutée pour appeler la sous-routine SH4, l’unité
de contrôle range l’adresse de retour 102 à l’adresse définie symboliquement par SH4 (c’est à
dire = (109)16 ).
L’unité de contrôle place aussi la valeur SH4+1 (= (10A)16 ) dans le compteur de
programme PC pour commencer l’exécution de la sous-routine.
La dernière instruction de la sous-routine, à la location (10F )16 (appelée l’instruction de
retour de la sous-routine) exécute un embranchement inconditionnel indirect vers la location
(102)16 .
BSA est appelée l’instruction d’appel de la sous-routine.
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
30 / 37
Sous-routines
Table 8: Programme pour montrer l’utilisation de sous-routines
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
31 / 37
Programmation pour les entrées/sorties
Programmation pour les entrées/sorties
La Table 9(a) montre les instructions nécessaires pour entrer un caractère, l’afficher, et
ensuite le ranger en mémoire.
La Table 9(b) montre les instructions nécessaires pour afficher un caractère qui est
initialement rangé en mémoire.
Table 9: Programmes pour l’entrée/sortie d’un caractère
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
32 / 37
Programmation pour les entrées/sorties
Manipulation de caractères
Manipulation de caractères
Le programme de la Table 10 montre une sous-routine appelée IN2 qui entre deux caractères
de 8 bits chacun, et les assemble en un mot de 16 bits.
Table 10: Sous-routine pour entrer et assembler deux caractères
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
33 / 37
Programmation pour les entrées/sorties
Manipulation de caractères
Le programme de la Table 11 utilise la sous-routine IN2 pour entrer une chaı̂ne de caractères
du clavier, assembler deux caractères en un mot, et ranger le tout dans un tampon qui
débute à l’adresse (500)16 de la mémoire.
Table 11: Programme pour ranger des caractères d’entrée dans un tampon
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
34 / 37
Programmation pour les entrées/sorties
Interruptions de programme
Interruptions de programme
Le système d’interruptions permet au programme de se dérouler jusqu’à ce qu’un appareil
d’entrée/sortie lève son drapeau.
Lorsqu’un appareil est mis à 1, l’ordinateur termine l’exécution de l’instruction en cours puis
se focalise sur l’interruption, en:
1
2
Rangeant l’adresse de retour à la location 0 de la mémoire
Exécuter l’instruction à la location 1, qui est un embranchement inconditionnel vers l’adresse de base
de la routine de service.
La routine de service doit contenir des instructions pour effectuer les taches suivantes:
1
2
3
4
5
6
Sauvegarder le contenu des registres du processeur (AC et E de cet ordinateur de base)
Vérifier quel drapeau d’entrée/sortie est levé
S’occuper de l’appareil dont le drapeau est levé
Restaurer le contenu des registres du processeur
Réactiver le système d’interruption
Retourner au programme interrompu
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
35 / 37
Programmation pour les entrées/sorties
Interruptions de programme
Un exemple de programme qui s’occupe d’une interruption est montré dans la Table 12.
La location 0 est réservée pour l’adresse de retour.
La location 1 contient un embranchement inconditionnel direct vers la routine de service
SRV.
Le programme principal débute à la location (100)16 de la mémoire.
La routine de service débute à la location (200)16 de la mémoire.
Le programme principal contient une instruction “ION” au tout début, pour activer le
système d’interruptions.
Le circuit d’interruption est éteint dans le matériel par la micro-operation RT2 : IEN ← 0
juste avant l’exécution de la routine de service des interruptions.
Il est donc important de réactiver le système d’interruptions juste avant la fin de la routine
de service. Ceci se fait dans le logiciel en incluant l’instruction “ION”.
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
36 / 37
Programmation pour les entrées/sorties
Interruptions de programme
Table 12: Programme pour s’occuper d’une interruption
Wail Gueaieb (Université d’Ottawa)
CEG2536: Architecture des Ordinateurs I
Automne 2007
37 / 37

Documents pareils