Guide explicatif sur le chapitre 6 des notes de cours de
GABRINI, Ph. -- Organisation des ordinateurs et assembleur.

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.

Chapitre 6. Adressage des opérandes

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
......... ............


6.4 Adressage indexé

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)