[gull] x86_64

Leopoldo Ghielmetti leopoldo.ghielmetti at a3.epfl.ch
Sun Jun 4 11:14:18 CEST 2006


Il giorno sab, 03/06/2006 alle 00.54 +0200, Marc Mongenet ha scritto:
> >Non, IA64 n'est pas une architecture mais un jeu d'instruction !
> 
> Ben ce mot 'architecture' est utilisé un peu à toutes les sauces.
> Dans le cas le plus général, on parle d'architecture RISC, CISC,
> VLIW, etc.
> 
> Après on peut utiliser 'architecture' plus ou moins dans le sens
> ou l'on écrit que Debian ou Linux existent sur les architectures
> i386, amd64, powerpc, ppc64, sparc, alpha, hppa, ia64, etc.
> Dans ce cas, 'architecture' et 'jeu d'instructions' sont effectivement
> assez similaires. C'est le sens que j'utilise d'habitude. Intel aussi
> il semble, car "ia64" signifie "Intel Architecture 64".
> 
> Il me semble que ce sens correspond plus ou moins au sens du
> fameux bouquin "Computer Architecture, a Quantitative Approach".
> On y lit "In the past, the term 'computer architecture' only referred
> to instruction set design." Puis plus bas "In this book the word
> 'architecture' is intended to cover all the aspects of computer
> design, instruction set architecture, organization, and hardware."
> 
> Mouais, c'est assez flou, ça m'avance pas beaucoup. :)
> 
> Dans les sources de Linux, il me semble qu'ils ont la notion
> d'architecture (répertoire arch/) avec m68k, mips, etc. et
> de sous-architecture pour m68k/amiga, m68k/sun3, m68k/atari.
> Mais si je cherche sub-architecture sur le Web, je vois que
> ce sont plutôt les générations de processeurs (i386, i486,
> i586, etc.), qui sont considérées...
> 
> On parle aussi de microarchitecture, par exemple de la
> microarchitecture NetBurst du Pentium 4. Peut-être est-ce
> ce que tu appelles 'architecture'?
> Toute cette confusion me perd. :)
> D'ailleurs la notion elle-même de génération de processeur
> devient assez floue, tant les améliorations deviennent
> incrémentales, que ce soit sur les Athlon ou les Pentium 4.
> 
> > Quel difference entre un HP-PA 7200 et un HP-PA 8000 ? L'un est un processeurs
> > 32 bits alors que l'aurtre est 64 bits. Comme les HP-PA 7* fonctionnaient
> > deja avec un mode d'adressage virtuel en 48 bits, le ocde compile sur cette
> > generation fonctionne sans autre sur un 8000 utilisant aussi ces 48 bits. La
> > seule difference residant dans la veritable largeurr du bus memoire.
> 
> Je ne saurai pas dire pour la PA-RISC, je les connais mal.
> Mais je ne comprends pas comment on peut «etre une evolution
> d'un modele precedent, mais avec plus de registres; sans changer les
> modes d'adressage ni le heu d'instruction». Comme peut-on
> adresser plus de registres avec les mêmes instructions?

On ne touche pas aux anciennes et on ajoute les nouvelles!

p.e. les instructions MOV bien qu'elles s'appellent toutes MOV ne sont
pas la même instruction.
MOV AX,BX est codée différemment de MOV AX,5 bien que les deux
s'appellent MOV.
On pourrait pour être plus claire leur changer de nom, mais ça
n'ajouterais rien à la facilité d'utilisation de l'assembleur.
Donc on peut dire qu'il existe un MOV registre registre, un MOV registre
mémoire et aussi d'autres MOV pour d'autres but.
S'ils veulent ajouter le MOV registre64 registre64 il suffit de créer
une nouvelle instruction MOV64 (qu'on appellerait pour simplifier les
choses MOV) et qui agirait sur les registres 64bits.

Le résultat est que le set d'instructions se retrouve étendu, que les
anciennes instructions restent valables car elles n'ont pas été touchées
et que du point de vue de l'assembleur rien ne change, car pour copier
une valeur d'un registre à un autre on continue à utiliser l'instruction
MOV que ce soit un registre 8, 16, 32 ou 64 bits.

Exactement comme si dans la langue française on ajoute un nouveau mot ou
on ajoute une nouvelle signification à un mot déjà existant, ça ne
change à priori rien dans la signification des autres mots qui pourront
donc continuer à être utilisés comme avant (ce qui rend le Français
compatible avec ses anciennes versions, il faut en effet beaucoup de
générations avant que la langue ne soit plus compréhensible).

> Il y avait des bits inutiles dans le jeu d'instructions ?

Oui, et même beaucoup, ce qui leur laisse quelque degré de liberté en
plus dans le choix du jeu d'instructions. En plus ils ont utilisé la
technique des préfixes. Donc si p.e l'instruction MOV reg16,reg16 tient
sur deux bytes (je ne suis plus très sur, mais c'est le principe qui
conte) l'instruction MOV reg32,reg32 tient sur trois bytes (le premier
est un préfixe qui indique qu'on ne travaille pas sur 16bits mais 32),
je supposes qu'il y a un autre préfixe pour indiquer qu'on travaille sur
64 bits au lieu de 16 ou un préfixe du préfixe qui indique qu'on
travaille sur 64 au lieu de 32 (je ne connais pas les détails du système
à 64bits).

Donc on a:
instruction 16bits: MOV16 AX,BX       qui s'écrit MOV AX,BX
instruction 32bits: 32.MOV16 AX,BX    qui s'écrit MOV EAX,EBX
instruction 64bits: 64.MOV16 AX,BX ou 64.32.MOV16 AX,BX    que je ne
sais pas comment elle s'écrit, mais on pourrait s'imaginer quelque chose
comme MOV XAX,XBX

D'un côté on à l'écriture pour le processeur (qui n'a pas d'ambiguïté et
qui permet d'ajouter des fonctionnalités en préfixant) de l'autre on à
l'écriture assembleur pour les humains qui utilise une écriture plus
immédiate et évite au programmeur de s'amuser à préfixer chaque
instruction.

> Marc Mongenet

ciao, Leo





More information about the gull mailing list