Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3016 connectés 

  FORUM HardWare.fr
  Programmation
  ASM

  a quoi sert l'alignement ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

a quoi sert l'alignement ?

n°348191
Vic le vik​ing
Posté le 31-03-2003 à 13:43:20  profilanswer
 

bonjour
 
ceci est un topic sérieux. je sais que j'ai déconné, mais ce n'est pas le cas ici, et ça ne se reproduira plus
 
suite à mon topic sur les démos, j'ai décidé de me mettre à l'assembleur. inutile de vous dire que je galère, mais je veux y arriver.
 
j'entends souvent parler de données qui doivent être alignées sur des adresses multiples de 2, 4, 8, etc...  
 
à quoi sert il d'aligner des données de cette manière ?
 
merci de vos réponses, et encore une fois je m'excuse pour mes précédents topics (celui sur les modos était vraiment immonde)
 
:jap:


---------------
Bougredane et bougre d'andouille ne font qu'un !
mood
Publicité
Posté le 31-03-2003 à 13:43:20  profilanswer
 

n°348203
drasche
Posté le 31-03-2003 à 13:55:14  profilanswer
 

Soit z l'adresse d'un tableau
soit i l'index qui permet d'adresser un élément du tableau
soit s la taille d'un élément du tableau.
 
Sachant que tous les éléments du tableau DOIVENT avoir la même taille (cela fait partie du concept même de tableau ou vecteur en informatique), l'adresse calculée sera z + (i*s).


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°348221
Vic le vik​ing
Posté le 31-03-2003 à 14:12:03  profilanswer
 

merci de ta réponse :jap:
 
mais ce que je ne comprends pas, c'est pourquoi je dois déclarer le début de ce tableau sur une adresse paire ?
 
si je déclare le tableau suivant :
 
db 10,20,30,40,50
 
quelle différence ça fait si je le déclare sur une adresse impaire ou si je le force sur une adresse paire avec ALIGN ? le tableau est déclaré quand meme, et tous ses éléments ont la meme taille !
 
:??:


---------------
Bougredane et bougre d'andouille ne font qu'un !
n°348222
chrisbk
-
Posté le 31-03-2003 à 14:13:33  profilanswer
 

le CPU prefere, dis toi juste ca ;) Me semble que certaines instructions SSE marchent bpc mieux si c aligne que si pas.
 
 

n°348236
Vic le vik​ing
Posté le 31-03-2003 à 14:29:11  profilanswer
 

chrisbk a écrit :

le CPU prefere, dis toi juste ca ;) Me semble que certaines instructions SSE marchent bpc mieux si c aligne que si pas.


ok, mais suite au topic des démos, j'ai eu l'occasion de regarder des sources de vieilles démos PC et amiga, et je vois partout des directives d'alignement, alors que le SSE n'existait pas à l'époque.
 
pourquoi le CPU préfère ? je sais, je suis chiant, mais j'ai vraiment envie d'apprendre :(


---------------
Bougredane et bougre d'andouille ne font qu'un !
n°348237
chrisbk
-
Posté le 31-03-2003 à 14:30:04  profilanswer
 

le SSE c t un exemple ;)

n°348252
drasche
Posté le 31-03-2003 à 14:36:24  profilanswer
 

parce que les CPU ont un point commun: ils ne comprennent que le binaire, c'est à dire la base 2.  Donc tout fonctionne par puissance de 2.  Les tailles des types de données usuelles sont toutes des multiples de 2.  Dans le moins usuel, il y a un format décimal qui tient sur 10 bytes au lieu de 8.


Message édité par drasche le 31-03-2003 à 14:36:54

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°348338
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 31-03-2003 à 15:28:02  profilanswer
 

Les CPU actuels sont des CPU avec un bus de données de 32 bits, ce qui signifie qu'ils peuvent lire 4 octets en une passe. Les CPU 16 bits de l'Amiga et du ST étaient des 16 bits (2 octets en une passe)
 
On a donc le shéma mémoire suivant (en 32 bits) :


Addresse                 Donnée
00000000h                12345678h
00000004h                45678912h
00000008h                3698452Fh
0000000Ch                DFE45658h
etc...


Les données sont évidemment des exemples.
 
Donc, mettons que tu veuilles lire dans EAX la donnée située à l'adresse  00000005h :
 


push [00000005h]
pop eax


 
EAX sera chargé avec la valeur 67891236h (j'ai simplifié, normalement ce devrait être 36128967h, because big/little endian, mais ça simplifie).  
 
Ce qui veut dire que :  
- Le CPU a d'abord lu la valeur située en 00000004h (45678912h)
- A isolé l'octet de poids fort pour récupérer les 3 octets démarrant en 00000005h (678912h)
- A lu la valeur située en 00000008h (3698452Fh)
- A isolé l'octet de poids fort pour le conserver (36h)
- Enfin, a fait un OU logique pour "coller" les 4 octets, ce qui donne 36128967h
 
Ca nous fait donc au bas mot : un MOV, un AND, un MOV, un AND et un OR réalisés de façon interne par le CPU, tout ça pour lire une valeur. Si cette valeur avait été située sur une adresse multiple de 4, un simple MOV aurait suffi pour tout lire.
 
Meme topo si tu veux récupérer 2 octets dans AX (alignement sur une adresse multiple de 2), etc...
 
Comprendo ?
 


---------------
J'ai un string dans l'array (Paris Hilton)
n°348405
chrisbk
-
Posté le 31-03-2003 à 16:24:18  profilanswer
 

dans le meme genre d'idee, ne pas mixer les tailles de donnes demandees :
 
genre :
 
 
movq mm0, QWORD PTR[eax];  
movd DWORD PTR [eax],mm1;
 
 
pas bon :O

n°348439
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 31-03-2003 à 16:57:04  profilanswer
 

Tout à fait :jap:
 
Et ne pas oublier à propos de l'alignement : ça consomme de la mémoire. Pourquoi ? Pour la simple raison que tu "sautes" des octets quand tu alignes.  
Par exemple, si la précédente donnée n'utilise que 3 octets, la précédente donnée démarrera 2 octets plus loin, laissant ainsi le 4ème octet libre et donc inutilisé !
Mais ceci n'est rien en comparaison du gain de performance procuré !


---------------
J'ai un string dans l'array (Paris Hilton)
mood
Publicité
Posté le 31-03-2003 à 16:57:04  profilanswer
 

n°349058
Vic le vik​ing
Posté le 01-04-2003 à 13:44:29  profilanswer
 

merci harkonnen pour ta réponse. je t'avais décidément bien mal jugé !
 
j'ai une autre question : comment faire pour mesurer le temps d'execution d'une fonction en assembleur ?


---------------
Bougredane et bougre d'andouille ne font qu'un !
n°349069
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 01-04-2003 à 13:51:57  profilanswer
 

vic le viking a écrit :

merci harkonnen pour ta réponse. je t'avais décidément bien mal jugé !


de rien de rien ! évite juste de respirer le même air que moi...
 

vic le viking a écrit :


j'ai une autre question : comment faire pour mesurer le temps d'execution d'une fonction en assembleur ?


RDTSC


---------------
J'ai un string dans l'array (Paris Hilton)
n°349178
chrisbk
-
Posté le 01-04-2003 à 14:27:34  profilanswer
 

harko, tu m'as repondu sur blabla :O

n°349315
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 01-04-2003 à 16:20:27  profilanswer
 

chrisbk a écrit :

harko, tu m'as repondu sur blabla :O

done


---------------
J'ai un string dans l'array (Paris Hilton)
n°350089
Vic le vik​ing
Posté le 02-04-2003 à 13:39:27  profilanswer
 


ça veut dire quoi :??:


---------------
Bougredane et bougre d'andouille ne font qu'un !
n°350091
chrisbk
-
Posté le 02-04-2003 à 13:42:04  profilanswer
 

vic le viking a écrit :


ça veut dire quoi :??:


 
c le nom de l'instruction, patate :O

n°350096
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 02-04-2003 à 13:45:34  profilanswer
 

chrisbk a écrit :


 
c le nom de l'instruction, patate :O  


[:ddr555]
 
RDTSC retourne le nombre de cycles écoulés depuis le démarrage du processeur. EAX contient la partie basse et EDX la partie haute de ce nombre de cycles


---------------
J'ai un string dans l'array (Paris Hilton)
n°1142440
polo021
Posté le 06-07-2005 à 17:50:05  profilanswer
 

Et est ce que cela ne vaut que pour les nombres ou est-ce valable auyssi pour les caractères?

n°1142447
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 06-07-2005 à 17:55:56  profilanswer
 

c'est pareil. une chaine de caractères, c'est un ensemble d'octets stockés en mémoire


---------------
J'ai un string dans l'array (Paris Hilton)

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  ASM

  a quoi sert l'alignement ?

 

Sujets relatifs
[PHP] rand() ok mais srand() ca sert a quoi ??[HTML] Alignement w3c Compliant ?
#pragma, ça sert à quoi?[Java] Mais à quoi sert instanceof ?
mais à quoi sert ant ??[html] alignement vertical au milieu marche pas a l'aide urgentissime!
A quoi sert ce script ?[Java] A quoi sert countData.readLine()
Alignement vertical des imagesTomcat : servlet & jsp ca sert a qqchose ??
Plus de sujets relatifs à : a quoi sert l'alignement ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR