Système d’exploitation : Assembleur

10
Système d’exploitation : Assembleur Semaine 05 Modes d’adressage

description

Système d’exploitation : Assembleur. Semaine 05 Modes d’adressage. Les différents modes d’adressage 1/6. On appelle mode d'adressage la manière dont la donnée est spécifiée dans une instruction. Selon le mode d'adressage la taille de l'instruction peut varier de 1 à 4 octets. - PowerPoint PPT Presentation

Transcript of Système d’exploitation : Assembleur

Page 1: Système d’exploitation : Assembleur

Système d’exploitation : Assembleur

Semaine 05Modes d’adressage

Page 2: Système d’exploitation : Assembleur

• On appelle mode d'adressage la manière dont la donnée est spécifiée dans une instruction.Selon le mode d'adressage la taille de l'instruction peut varier de 1 à 4 octets.

• Le mode d'adressage impliciteLe mode d'adressage implicite correspond à une instruction ne comportant pas d'opérande.L'instruction est uniquement composée du code opération.Sa taille peut varier entre 1 octet et 2 octets selon l'opération. Ce type d'instruction porte généralement sur des registres.Les opérations d'incrémentation ou de décrémentation d'un registre ont un mode d'adressage implicite.

• Exemple:– INC AX

Les différents modes d’adressage 1/6

Page 3: Système d’exploitation : Assembleur

• Le mode d'adressage immédiatOn parle de mode d'adressage immédiat quand le code opérande contient une donnée.La taille de la donnée peut varier entre 1 et 2 octets.Ce type d'instruction met en jeu un registre et une valeur.La taille de l'opérande dépendra donc du type de registre mis en jeu (1 octet pour un registre 8 bits, 2 pour un registre de 16 bits).

• Exemple:– MOV BX,13L'opérande 13 sera codée sur 16 bits puisqu'il faut l'affecter à un registre 16 bits (BX).– MOV AH,11L'opérande 11 sera codée sur 8 bits puisqu'il faut l'affecter à un registre 8 bits (AH).– dummy DB 5

ADD AL,dummyL'opérande 5 sera codée sur 8 bits puisqu'il faut l'affecter à un registre 8 bits (AL).

Les différents modes d’adressage 2/6

Page 4: Système d’exploitation : Assembleur

• Le mode d'adressage relatifLe mode d'adressage relatif met en jeu un champ opérande contenant un entier relatif (sa taille est donc un octet). Il est utilisé dans les opérations de saut (JMP), l'entier relatif étant appelé déplacement et correspondant à la longueur du saut que le processeur doit effectuer dans les instructions.

• Exemple:– 0100 - ADD AX,02h

0103 - JMP 0100h0104 - …

La valeur du déplacement sera 0100h-0104h = -4

Les différents modes d’adressage 3/6

Page 5: Système d’exploitation : Assembleur

• Le mode d'adressage directDans l’adressage direct, le code opérande d'une instruction contient l'adresse d'une donnée en mémoire, dans le segment de données.Une adresse étant codée sur 16 bits, la taille du champ opérande est de 2 octets.Ce mode d'adressage provoque un temps d'exécution de l'instruction plus long : accéder à la mémoire principale prend plus de temps que d'accéder à un registre.

• Exemple:– MOV AX,[0110]On affecte au registre AX la valeur contenue dans l’emplacement mémoire

110h du Data Segment [DS].

Les différents modes d’adressage 4/6

Page 6: Système d’exploitation : Assembleur

• Le mode d'adressage indirectDans l’adressage indirect, le code opérande d'une instruction contient le nom d’un registre qui contient l'adresse d'une donnée en mémoire, dans le segment de données.Il est intéressant pour parcourir un tableau : il suffira d’incrémenter la valeur du registre de la taille d’une case de tableau pour passer d’une case à la suivante.

• Exemple:– MOV AX,[BX]On affecte au registre AX la valeur contenue dans l’emplacement mémoire

(dans le Data Segment) pointé par la valeur contenue dans le registre BX.

Les différents modes d’adressage 5/6

Page 7: Système d’exploitation : Assembleur

• Utilisation de la pileLorsqu’on utilise les registres BP ou SP, on pointera vers une valeur contenue dans le segment de pile (Stack Segment) au lieu d’une valeur contenue dans le Data Segment.

• Exemple:– MOV BP,9

MOV AX,[BP]On affecte au registre AX la valeur contenue dans l’emplacement mémoire

(dans le Stack Segment) pointé par la valeur contenue dans le registre BP.

Les différents modes d’adressage 6/6

Page 8: Système d’exploitation : Assembleur

Modes d’adressage : exemples.model small.data

a db 10,9,8,7,6,5,4,3,2,1,0.code

mov ax,@data ; initialisation du Data Segmentmov ds,ax

mov ax,5 ; Adressage immédiat

inc ax ; Adressage implicite

mov ax,word ptr a ; Adressage direct

mov bx,offset a ; bx déplacement de amov ax,[bx] ; Adressage indirect basé sur bx

; (Data Segment DS)

mov bp,0A234hmov ax,[bp] ; Adressage indirect basé sur bp

; (Stack Segment SS)

mov bx,5mov si,4mov ax,[bx][si] ; Adressage indirect

; basé sur bx et indexé

mov bx,2mov ah,a[bx] ; Adressage indirect et déplacement

mov ah,4chint 21h ; Fin du programme

end

Page 9: Système d’exploitation : Assembleur

Pourquoi l’adressage indexé ? Illustration.model small.data

tab db 5,4,3,2,1tab2 db 5 dup(?)

.code ; copie d'un vect tab vers tab2mov ax,@datamov ds,ax

mov al,tabmov tab2,al

mov al,tab+1mov tab2+1,al

mov al,tab+2mov tab2+2,al

mov al,tab+3mov tab2+3,al

mov al,tab+4mov tab2+4,al

mov ah,4chint 21h

end

.model small

.data tab db 5,4,3,2,1 tab2 db 5 dup(?)

.code mov ax,@data mov ds,ax

mov si,0 mov al,tab[si] mov tab2[si],al

inc si mov al,tab[si] mov tab2[si],al

inc si mov al,tab[si] mov tab2[si],al

inc si mov al,tab[si] mov tab2[si],al

inc si mov al,tab[si] mov tab2[si],al

mov ah,4ch int 21h

end

Sans index

4 x Idem

Avec index

Page 10: Système d’exploitation : Assembleur

Pourquoi l’adressage indexé ? Illustration.model small.data

tab db 5,4,3tab2 db 3 dup(?) tab3 db 3 dup(?)

.codemov ax,@datamov ds,ax

mov si,0mov al,tab[si]mov tab2[si],al

inc simov al,tab[si]mov tab2[si],al

inc simov al,tab[si]mov tab2[si],al

mov si,0mov al,tab[si]mov tab3[si],al

inc simov al,tab[si]mov tab3[si],al...

.model small

.datatab db 5,4,3tab2 db 3 dup(?) tab3 db 3 dup(?)

.code mov ax,@datamov ds,axmov bx,offset tab2

mov si,0mov al,tab[si]mov [bx+si],al

inc simov al,tab[si]mov [bx+si],al

inc simov al,tab[si]mov [bx+si],al

mov bx,offset tab3

mov si,0mov al,tab[si]mov [bx+si],al...

Avec index et base

Avec index sans base