Extrait du chapitre 3.7 Chargement et exécution
Page 33.
On ne peut exécuter un programme que s'il se trouve en mémoire
centrale. Comme on l'a vu,
l'assembleur range le programme objet en mémoire secondaire; avant de pouvoir
exécuter ce
programme objet il faut le charger en mémoire centrale. Chaque instruction du
programme objet
possède une adresse relative qui lui a été attribuée par l'assembleur; il serait
simple de placer le
programme objet en mémoire de façon à ce que les adresses relatives
correspondent aux adresses
réelles des instructions (appelées adresses absolues). Dans la réalité, ceci
n'est pas possible, car une
partie de la mémoire centrale est occupée en permanence par le système
d'exploitation; le programme
objet ne pourra alors être placé en mémoire à partir de l'adresse zéro. Si la
zone de mémoire
disponible pour 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.
Page 51.
PEP8 attribue des adresses relatives au début du
programme.
Ces adresses sont ainsi appelées car elles sont relatives au début du programme,
l'adresse
attribuée par l'assembleur au premier élément (instruction ou donnée) du
programme étant égale à zéro
et les adresses suivantes étant attribuées de façon séquentielle. Les
adresses réelles que leurs instructions et leurs données occuperont sont
appelées leurs adresses
absolues.
Par contre, pour les anciens ordinateurs Macintosh, basés sur le processeur
Motorola MC68000,
le système d'exploitation utilisait un système d'adressage différent;
les instructions ne comprenaient que les adresses relatives des
opérandes et ce n’était qu'au moment de l'exécution d'une instruction que
l'adresse relative de son
opérande était transformée en adresse absolue.
L'adresse mémoire effective est l'adresse qui est effectivement utilisée au
moment de l'exécution de
l'instruction. Quelquefois cette adresse est la même que celle qui apparaît dans
l'instruction, mais ce
n'est généralement pas le cas. Cette adresse peut être modifiée de plusieurs
façons au moment de
l'exécution.
6.1 Adressage immédiat
Page 52.
| LDA 25,i | code-machine: C00019 |
| LDX 0x4F,i | code-machine: C8004F |
| LDBYTEA "A",i | code-machine: D00041 |
| LDBYTEX -1,i | code-machine: D8FFFF |
6.2 Adressage direct
Page 52.
| LDA valeur,d | code-machine: C1xxxx, où xxxx est l'adresse de valeur |
| LDBYTEA caract,d | code-machine: D1xxxx, où xxxx est l'adresse de caract |
| LDBYTEX 0x1234,d | code-machine: D91234; l'adresse relative 1234 |
6.3 Adressage basé
Page 53.
Selon les ordinateurs on notera qu'un registre de base peut
devoir être nécessairement un registre
adresse, ou comme sur PEP8 il n’y a pas de registre de base et où l’adressage
basé est en fait similaire
à l’adressage indexé.
Pour le Macintosh le registre de base est le registre d’adresse A5, s’il
contient la valeur
C6454, l'adresse effective est alors:
C6454 + 01AC = C6600
| adresse | programme |
| 00000 | mac operating system |
| C6454 | programme assembleur mac |
| D9A34 | programme powerpoint |
| E4523B | programme excel |
| ......... | ............ |
Page 54.
adresse effective = adresse de base + contenu du registre d'index
LDA Vecteur,x ; prendre Vecteur[x]
qui charge dans A le contenu d'un opérande défini avec
indexation par le registre X que l'on supposera
contenir la valeur décimale 22A (obtenue par LDX 0x22A,i) et par l’adresse de
base Vecteur (3246)
L'adresse effective de l'opérande sera donc de:
3246 + 22A = 3470
exemple1:
alphabet: .ASCII"abcdefghijklmnopqrstuvwxyz"
LDX 3,i
LDBYTEA alphabet,x
ira chercher le caractère se trouvant à alphabet+X: [alphabet+3] -> "d" car l'index démarre à 0.
exemple2:
Soit un tableau de 5 éléments:
LDX 0,i ; début du tableau
boucle: STX tableau,x
ADDX 2,i ; élément suivant
CPX 10,i ; fin du tableau ?
BRLT boucle
....
tableau: .BLOCK 10 ; 5 éléments [0][1][2][3][4]
tableau contiendra:
| X=0 | X=2 | X=4 | X=6 | X=8 |
| 0000 | 0002 | 0004 | 0006 | 0008 |
| [0] | [1] | [2] | [3] | [4] |
X est un déplacement en octets et est toujours pair pour les nombres de 16 bits.
LDX 6,i
DECO tableau,x affichera 6
; on veut afficher l'élément [4]
ldx 4,i ; élément [4]
aslx ; chaque élément occupe 2 octets
deco tableau,x ;affichera 8
6.5 Adressage indirect
Page 55.
On utilise une référence (pointeur).
0000 C2000C LDA pointeur,n ; A <- 0008 0003 C00010 LDA valeur,i ; A <- 0010 0006 E1000C STA pointeur,d ; pointeur <- 0010 0009 C2000C LDA pointeur,n ; A <- 0004 000C 000E pointeur:.ADDRSS champ 000E 0008 champ: .WORD 8 0010 0004 valeur: .WORD 4 0012 .END
6.6 Adressage sur la pile
Page 56.
Il existe une structure de mémoire spéciale utilisée par les
divers logiciels fonctionnant sur un
processeur donné. Il s’agit de la pile : c’est un bloc de mémoire alloué
spécifiquement par le système
d’exploitation et utilisé par les logiciels. Au niveau de la programmation en
assembleur, la pile est
utilisée essentiellement pour gérer les appels à des sous-programmes et aussi
pour l’allocation de
mémoire aux sous-programmes. Ceci sera vu en détail au chapitre 9 qui présente
les sous-programmes,
car, en l’absence de sous-programmes, il n’y a aucune nécessité d’utiliser la
pile.
STA -2,s (s:stack, pile en français)