Lire les pages 28 à 30.
Chaque instruction comprend un code opération qui indique l'opération que l'ordinateur doit exécuter.
exemple: 31 00 13 31 00 15 C1 00 13 71 00 15 E1 00 17 39 00 17 00 00 00 00 00 00 00
Chapitre 3.4 Langage d’assemblage
Lire les pages 30 et 31.
Un langage d'assemblage est une forme symbolique du langage machine; alors
que le langage machine est
numérique, le langage d'assemblage permet l'utilisation de noms alphabétiques
pour les codes
opérations et les opérandes en mémoire. Un programme appelé assembleur traduit
un programme écrit
en langage d'assemblage en son équivalent en langage machine qui peut alors être
exécuté par
l'ordinateur.
exemple: LDA nombre1,d
3.5 Traitement d’un programme en langage d’assemblage
Lire la page 31.
Explications se rapportant à la figure 3.9:
Le programme source PEP8 est traduit en langage machine (opération
"assemble") et le programme objet ainsi obtenu
est rangé dans un fichier; une liste d'assemblage ("listing") est produite. La
seconde phase de traitement est la phase de
chargement et d'édition de liens; le programme objet est placé en mémoire
centrale, les divers modules
nécessaires à son exécution sont également chargés en mémoire et les liaisons
entre les divers modules
sont établies. La troisième phase du traitement est l'exécution du programme
proprement dite (opération "run source")
qui peut utiliser des données et qui produit des résultats (fenêtre output).
3.6 Assemblage
Lire les pages 31 et 32.

3.7 Chargement et exécution
Lire les pages 33 et 34.
Le système d'exploitation est toujours chargé à l'adresse 0.
Par la suite, le programme objet sera placé en mémoire à l'adresse de la zone de
mémoire disponible.
Exemple: si le programme commence à l'adresse physique 1320, la première
instruction du
programme (d'adresse relative zéro) sera placée à l'adresse 1320 et les
instructions suivantes aux
adresses qui suivent. La figure 3.11 illustre ce processus de chargement du
programme objet.
Nous allons faire un rapide survol des principales instructions de PEP8:
1) Arrêt du programme:
STOP Arrête l'exécution du programme
Instruction obligatoire qui apparaît à la fin des instructions du programme.
2) Branchements:
BR Branchement inconditionnel
BRLE Branchement si inférieur ou égal
BRLT Branchement si inférieur
BREQ Branchement si égal
BRNE Branchement si non égal
BRGE Branchement si supérieur ou égal
BRGT Branchement si supérieur
BRV Branchement si débordement
BRC Branchement si retenue
Equivalent à un GOTO si la condition est vraie.
3) Opérations logiques:
NOT NON bit-à-bit du registre
NEG Opposé du registre
ASL Décalage arithmétique à gauche du registre
ASR Décalage arithmétique à droite du registre
ROL Décalage cyclique à gauche du registre
ROR Décalage cyclique à droite du registre
4) Opérations (pas d'opération):
NOPn Interruption unaire pas d'opération
(NOP0 à NOP7)
NOP Interruption non unaire pas d'opération
Ne produit rien.
5) Entrée/sortie:
DECI Interruption d'entrée décimale
DECO Interruption de sortie décimale
STRO Interruption de sortie de chaîne
CHARI Lecture caractère
CHARO Sortie caractère
Pour lire/écrire au terminal.
6) Opérations mathématiques et logiques:
ADD Addition au registre
SUB Soustraction au registre
AND ET bit-à-bit du registre
OR OU bit-à-bit du registre
CP Comparer registre
Il n'y a pas d'opération pour la multiplication et la division.
Il va falloir les inventer.
7) Déplacement:
LD Placer(copier) 1 mot
(2 octets) dans registre
LDBYTE Placer(copier) 1 octet dans registre (0-7)
ST Ranger(copier) registre dans 1 mot
(2 octets)
STBYTE Ranger(copier) registre
bits(0-7) dans 1 octet
Les calculs s'effectuent dans les registres.
Les instructions utilisent généralement
l'information qui se trouve dans les registres du processeur.
Nous verrons les utilisations qu'on peut faire de ces registres en détail dans
les chapitres ultérieurs
mais nous pouvons dès maintenant les énumérer. Les processeurs modernes
possèdent un certain
nombre de registres pouvant avoir des rôles bien définis. Ainsi, on peut avoir
16 ou 32 registres,
généralement de 32 bits, pouvant appartenir à deux catégories : registres
d’index et registres de
calcul. Pour PEP8, il n’existe que deux registres : le registre
X peut être utilisé comme
accumulateur
ou comme registre d'index, tandis que le registre
A ne peut être utilisé que comme
accumulateur.
| xxxxxxxx | xxxxxxxx |
15 7 0
Les 16 bits des registres sont numérotés de 0 à 15 de droite à gauche. Le bit le
moins significatif (bit
de droite) porte le numéro zéro, tandis que le bit le plus significatif (bit de
gauche) porte le numéro 15.
Certaines instructions ne manipulent qu’une partie du registre comme un octet
qui est alors
nécessairement l'octet le moins significatif du registre.
Avec les nombres signés, le bit 15 est le bit de signe (0-positif,1-négatif).
Directives de PEP8
Page 235.
.BYTE Réserve 1 octet mémoire avec valeur initiale.
.WORD Réserve 1 mot mémoire avec valeur initiale.
.BLOCK Réserve un nombre d’octets mis à zéro.
.ASCII Réserve l’espace mémoire pour une chaîne de caractères
(ex: "Chaîne").
.ADDRSS Réserve 1 mot mémoire pour un pointeur.
.EQUATE Attribue une valeur à une étiquette.
.END Directive obligatoire de fin d’assemblage qui
doit être à la fin du code.
.BURN Habituellement, un programme débute à l’adresse
zéro. Avec .BURN,
le programme se terminera
à l’adresse spécifiée par l’opérande.
Ce sont des déclarations pour réserver de l'espace
mémoire que nous approfondirons prochainement.
Codes ASCII importants (hexadécimaux)
Page 235.
Code ASCII Caractères
00 Caractère NUL
0A Caractère de saut de ligne
sur PEP8 (ENTREE)
20 Espacement ' '
30 Premier chiffre '0'
41 Premier caractère
alphabétique majuscule 'A'
61 Premier caractère
alphabétique minuscule 'a'
Si on mémorise que A c'est 4116,
alors on peut facilement trouver la valeur des autres lettres de
l'alphabet.
Si on ajoute 2016 alors on retrouve la lettre minuscule
correspondante.