Chapitre 7: Rangement mémoire Jeu d`instruction

Transcription

Chapitre 7: Rangement mémoire Jeu d`instruction
2/15
Les étiquettes
Chapitre 7:
Rangement mémoire
Jeu d'instruction
> Pour programmes assembleur (pas langage machine) ;
> chaîne de caractère remplacée à l'assemblage par valeur
constante (assemblage en deux passes) ;
> Par défaut : étiquette implicite sur ligne suivante.
_main: READ _A
_boucle:LOAD _A
SUBI 01
TSTN _end
STOR _A
WRIT _A _boucle
_end: EJECT 0
_A: 123456
M. Dubacq
IUT de Villetanneuse
2008 2009
3/15
Conventions en VLTN
//
//
//
//
//
//
//
//
00:
01:
02:
03:
04:
05:
06:
07:
READ 07
LOAD 07
SUBI 01
TSTN 06
STOR 07
WRIT 07
000000
123456
01
02
03
04
05
01
La taille d'un processeur
4/15
> Les étiquettes commencent toutes par ;
> Di érentes tailles d'éléments en bits ;
> Les étiquettes de données commencent par une majuscule ;
> taille d'un mot-machine (registre entier) ;
> main est déjà a ectée à 00 ;
> taille d'une adresse (PC, pointeur) ;
> Les commentaires sont toujours introduits par // ;
> taille d'un transfert entre RAM et processeur (motmémoire) ;
> Les étiquettes n'ont pas d'accents (comportement indéterminé).
> taille d'une instruction (registre d'instruction) ;
> Potentiellement tous di érents, souvent identiques ;
> Plus important : mot-machine.
Les registres
5/15
> Un processeur compte des registres généraux (entiers) ;
> Taille = taille d'un mot machine = taille (générale) ;
> Taille des adresses parfois di érente mais toujours dans
registre entier ;
> Souvent aussi des registres spécialisés ( ottants
double) ;
> jeu d'instructions spécialisées (x87, SSE) ;
> autres registres ;
> Espace adressable = 2taille des adresses ;
> Taille = 4 Gio en 32 bits, 16 Eio en 64 bits ;
> Adresse contenue dans registre entier.
Mots, demi-mots, octets
7/15
> Une opération sur un mot (un entier) doit se faire avec
une adresse multiple de 4 ;
> Sinon, erreur dite d'alignement ;
> Il est possible de mettre dans un registre moins qu'un
mot ;
> Pour les demi-mots (16 bits), c'est LoadHalf et
StoreHalf ;
> Les adresses doivent alors être paires ;
> Pour les octets (8 bits), c'est LoadByte et StoreByte ;
> Les adresses peuvent être n'importe quoi ;
> Attention au signe. Si l'octet vaut 200, registre négatif ;
> LoadByteUnsigned pour caractères de code >128.
6/15
Grand et petit-boutien (little/big-endian)
> Adresse 0x00000000, valeur 0x4A3B2C1D ?
> Plusieurs représentations possibles :
Contenu 0x4A 0x3B 0x2C 0x1D
>
: petit-boutien
Adresse 0x03 0x02 0x01 0x00
(little endian) ;
Contenu 0x1D 0x2C 0x3B 0x4A
: grand-boutien
>
Adresse 0x03 0x02 0x01 0x00
(big endian) ;
> little-endian : 6502, x86, VAX ;
> big-endian : Motorola 68000, SPARC, System/370 ;
> bi-endian : ARM, PowerPC (sauf G5), MIPS ;
> Les bi-boutiens ont un mode par défaut (big-endian pour
PowerPC, little-endian pour IA-64).
8/15
L'alignement dans le segment de données
> Chaque donnée prend la taille nécessaire ;
> .word (en MIPS) introduit des données sur des adresses
multiples de la taille des registres entiers, soit 4 octets ;
> .half (en MIPS) introduit des données sur des adresses
multiples de la taille des registres entiers, soit 2 octets ;
> .byte ou .ascii (en MIPS) introduit des données octet
par octet, ainsi que .space ;
> Mode d'alignement automatique des données : espace
interstitiel ;
> Possibilité de le faire manuellement par .align 4 ou
.align 2.
9/15
Différences 32/64 bits
> En 1985, 32 bits introduit car su isant pour numérotation
BD ;
6
> 4 Gio était 10 fois la mémoire typique ;
> Maintenant, processeurs 64 bits augmente les données
et l'adressage ;
> Instructions de taille double ;
> Alignement sur taille 8 octets ;
> Perte d'espace mémoire ;
> Traitement plus rapide pour calcul massif.
11/15
De l'assembleur au code machine
Les modèles de programmation 64 bits
10/15
Besoin de garder la compatibilité des codes sources.
En C et en C++ les types changent de taille.
Taille Taille Taille Taille Exemples
Modèle int long adresse long de
long Compilateurs
32 bits
32
32
32
64
LP64
32
64
64
64 Tous sauf...
ILP64
64
64
64
64 Exceptions...
LLP64
32
32
64
64 Microsoft...
Les pseudos-instructions
12/15
> Opération d'assemblage faite par le programme assembleur ;
> Instructions d'assembleur, pas de langage machine ;
> Transformation de mnémoniques en code binaire ;
> Transformation en instructions natives ;
> Réécriture des pseudos-instructions ;
> Utilisation du format d'instruction ;
> Exemple : SET 123456 se traduit en SET 56 ;SETM
34 ;SETL 12.
> Transformation des étiquettes en adresses ;
> Utilisation parfois de registres spéci ques ;
> Incorporation des constantes et numéros registres aux
instructions ;
> Décomposition dépend parfois des valeurs constantes ;
> Production de code binaire.
> Remplacement automatique, mécanique.
> Opposées aux instructions natives ;
> Exemple : constante petite (0 99) ou grande ;
13/15
Exemple de format d'instruction : MIPS32
Exemple de format d'instruction : 486
Type
Type R
31 26
21
16
11
6
0
op
rs
rt
rd imm5 funct
add, sub... 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits
Type I
op
rs
rt
imm
ori, lw...
6 bits 5 bits 5 bits
16 bits
Type J
op
target address
j, jal...
6 bits
26 bits
> Type R : beaucoup de registres, petites constantes (pour
décalages), funct sert à compléter op ;
> Taille d'instruction variable ;
> Type I : Une constante sur 16 bits ;
> Caractéristique d'une architecture CISC ;
> Type J : une grande constante sur 26 bits divisée par 4.
> Taille maximale : 16 octets.
Pénurie de codes op
15/15
> Le code op prend une partie de l'instruction ;
> Instructions peuvent être compliquées ;
> Nécessité de mettre des constantes de la taille des instructions ;
> En CISC : instructions permettant d'incrémenter tout en
tableau, de comparer deux chaînes ;
> Instructions de longueur variable !
> En RISC : instructions élémentaires ;
> Transformation d'une instruction (pseudo-instruction)
qui est pratique en une (ou plusieurs) instruction existante.
14/15