|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |
|
Nouveau Membre du Club
![]() Inscription : juillet 2007 Messages : 182 ![]() |
Bonjour,
Voici une citation: Citation:
Est-ce comme ça que ça se passe dans la mémoire vive du 80x86 en général aussi? Où seulement dans le code objet? Cordialement, Array |
|
|
|
00
|
|
|
#2 |
|
Membre actif
![]() ![]() Inscription : octobre 2005 Messages : 169 ![]() |
En clair (et en français), les nombres écrits dans l'assembleur(fichiers textes .asm..) sont écrits dans un format compréhensible par le microprocesseur dans les fichiers objets.
Ce n'est pas uniquement valable pour les nombres décimaux,il y a aussi les réels... |
|
|
00
|
|
|
#3 |
|
Membre éprouvé
![]() ![]() François conception mécanique Inscription : janvier 2005 Messages : 313 ![]() |
Ca me rappelle le "fight" entre les 68000 et les 8086.
qui était le plus logique ? le 68000 codait les octets dans le sens de la lecture : exemple : BC12h : adresse n = BCh adesse n+1 = 12h Alors que l'intel faisait l'inverse (poids faible en premier) même exemple : BC12h : adresse n = 12h adresse n+1 = BCh Personnellement je trouve la méthode Intel assez logique, surement parce que j'y suis habitué depuis des années |
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() Inscription : juin 2002 Messages : 93 ![]() |
Il y a deux manières possibles de stocker les nombres.
Lectures conseillées : http://www.ai.univ-paris8.fr/~fb/Cou...big-endian.pdf http://fr.wikipedia.org/wiki/Endianness |
|
|
00
|
|
|
#5 | ||
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 3 702 ![]() |
Citation:
Pour le reste l'endianess est un principe très répandu dans le monde des micro-processeurs. Lorsque qu'une valeur s'étend sur plus d'un mot binaire (comprendre par là : une unité d'adressage, donc généralement « un octet » sur les micro-processeurs les plus courants), ceux qui utilisent le big endian comment par le « bout le plus grand (la gauche du nombre), c'est-à-dire stockent le nombre en mémoire de la manière dont on l'écrit sur papier, et ceux qui utilisent le little endian commencent par la droite, et stockent donc ce nombre à l'envers, mais octet par octet. Donc, le nombre 12345678h sera stocké en mémoire 78563412h. Cela est dû à des considérations principalement technologiques. En procédant ainsi, le micro-processeur peut utiliser un système de pile pour faire ses enregistrements et relectures mais également de garder une compatibilité entre les instructions de différents formats. Ainsi, selon les formats, « 9E » sera enregistré comme suit en mémoire : 8 bits : 9E 16 bits : 9E 00 32 bits : 9E 00 00 00 64 bits : 9E 00 00 00 00 00 00 00 De cette façon, chaque format reprend le précédent et l'étend. C'est pratique tant d'un point de vue électronique que logiciel car, dans ce dernier, cas, quel que soit le format, la donnée démarre toujours à la même adresse. Et si on utilisé dès le départ le plus long format, il suffit de lire directement la mémoire à partir du premier octet pour que le « transtypage » soit automatique. Autrement, il aurait fallu tenir compte de la taille de la donnée initiale et calculer un offset en conséquence. Maintenant, c'est un bien pour un mal : c'est effectivement beaucoup plus pénible pour les programmeurs de bas niveau qui doivent eux-mêmes remettre les données dans l'ordre lorsqu'ils examinent les dump mémoire. C'est chiant aussi lorsque l'on veut remplir une grande zone de mémoire avec des données ordonnées dans le but de l'exporter. Ça oblige à faire la conversion, même si les x86 proposent SWAP qui permet de renverser l'endianess d'un mot en une seul fois. |
||
|
|
10
|
|
|
#6 | |
|
Nouveau Membre du Club
![]() Inscription : juillet 2007 Messages : 182 ![]() |
Citation:
|
|
|
|
00
|
|
|
#7 | |
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 3 702 ![]() |
Citation:
|
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com