LITTLE ENDIAN AND BIG ENDIAN



Documents pareils
INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Rappels Entrées -Sorties

Une version javascript sera disponible directement dans le cours prochainement.

Représentation d un entier en base b

Informatique Générale

Jeux de caracte res et encodage (par Michel Michaud 2014)

UE Programmation Impérative Licence 2ème Année

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Les opérations binaires

Cours Informatique 1. Monsieur SADOUNI Salheddine

Chapitre 10 Arithmétique réelle

GPA770 Microélectronique appliquée Exercices série A

Base de l'informatique. Généralité et Architecture Le système d'exploitation Les logiciels Le réseau et l'extérieur (WEB)

Conversion d un entier. Méthode par soustraction

ReadCard Guide Utilisateur

V- Manipulations de nombres en binaire

I- Définitions des signaux.

Logiciel de Base. I. Représentation des nombres

Les chaînes de caractères

Codage d information. Codage d information : -Définition-

Plan du cours. Historique du langage Nouveautés de Java 7

Programmation C. Apprendre à développer des programmes simples dans le langage C

Traitement de texte : Quelques rappels de quelques notions de base

Représentation des Nombres

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

La mémoire. Un ordinateur. L'octet. Le bit

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

Algorithme. Table des matières

Chapitre 10. Les interfaces Comparable et Comparator 1

IV- Comment fonctionne un ordinateur?

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

Architecture de l ordinateur

Programmation Structurée en Langage C

LOGICIEL DC4D MONITOR

1 Introduction au codage


Programmation impérative

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Structure du format BMP, sa lecture, sa construction et son écriture

Système binaire. Algèbre booléenne

Le chiffre est le signe, le nombre est la valeur.

Bases de programmation. Cours 5. Structurer les données

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Le codage informatique

TP a Notions de base sur le découpage en sous-réseaux

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Programmation en langage C

Vers l'ordinateur quantique

UE C avancé cours 1: introduction et révisions

Initiation. àl algorithmique et à la programmation. en C

Rappels d architecture

Programmation assembleur : aperçu

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Le langage C. Introduction, guide de reference

Langages et Concepts de Programmation Introduction à la programmation en langage C

Programmation Réseau. ! UFR Informatique ! Jean-Baptiste.Yunes@univ-paris-diderot.fr

Architecture des ordinateurs Introduction à l informatique

Introduction...6. Assembleur, philosophieet atouts...8. Avantages et inconvénients de l assembleur...9. Que programmer en Assembleur?.

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Procédure appropriée pour éditer les diagrammes avec ECM Titanium

Projet Matlab : un logiciel de cryptage

Chapitre I Notions de base et outils de travail

Chapitre 1 I:\ Soyez courageux!

Annexe : La Programmation Informatique

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40


Partie 1. Professeur : Haouati Abdelali. CPGE Lycée Omar Ibn Lkhattab - Meknès haouaticpge@gmail.com

Chap17 - CORRECTİON DES EXERCİCES

IFT2880 Organisation des ordinateurs et systèmes

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Programmation en C. École Nationale Supérieure de Techniques Avancées. Pierre-Alain Fouque et David Pointcheval

Notions fondamentales du langage C# Version 1.0

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Généralités sur le Langage Java et éléments syntaxiques.

ACTIVITÉ DE PROGRAMMATION

Initiation au binaire

Programmation en Java IUT GEII (MC-II1) 1

Chapitre. La conversion. des données

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Le Network File System de Sun (NFS)

Java Licence Professionnelle CISII,

La technologie Java Card TM

BTS IRIS Cours et Travaux Pratiques. Programmation C. A. Lebret, TSIRIS, Lycée Diderot, 1995/06. en conformité avec le référentiel du BTS IRIS

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Architecture matérielle des systèmes informatiques

Matériel & Logiciels (Hardware & Software)

Introduction à l algorithmique et à la programmation M1102 CM n 3

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS =

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Introduction à l algorithmique et à la programmation (Info 2)

TP Codage numérique des caractères. Un ordinateur ne manipule que des 0 et des 1 : Comment alors code-t-il du texte?

1 Comment faire un document Open Office /writer de façon intelligente?

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Transcription:

LITTLE ENDIAN AND BIG ENDIAN

Endian Binaire La mémoire d'un ordinateur est une longue suite de bits (interrupteurs qui peuvent être 0 ou 1). Ces bits sont regroupés en octets (groupe de 8 bits). Les octets sont regroupés en mots (16 bits), long mots (32 bits), quadruple mots (64 bits) et de plus grands regroupements encore. La question qui se pose pour chaque groupe est «quel bout est le plus significatif?» Imaginez que j'écris la valeur 12 (décimal) en binaire. Cela s'écrit par un 1 dans la colonne des 8, un 1 dans la colonne des 4, un 0 en dans la colonne des 2 et un 0 dans la colonne des 1. Si on additionne, cela donne 12. La colonne des 8 représente le bit le plus significatif (MSB, Most Signifiant Bit), puisqu'elle renferme la plus grande valeur; et la colonne des 1 représente le bit le moins significatif (LSB, Least Signifiant Bit), puisqu'elle renferme la plus petite valeur. Et bien on peut écrire en binaire en utilisant l'une ou l'autre de ces manières : Vous noterez que la valeur demeure la même, peut importe la manière d'écrire le binaire. Si on fait la lecture des bits du moins significatif au plus significatif, la manière dont le chiffre binaire a été écrit n'importe pas. Elle importe uniquement pour les structures internes (d'une puce) -- tant que celle-ci demeure conséquente, le type «d'endian» n'importe pas au monde extérieur. Pour ces raisons, lorsque quelqu'un discute du type «d'endian», il parle de l'arrangement des octets et non pas de l'arrangement des bits.

La plupart des gens exprime la forme binaire comme nous exprimons la forme décimale, le chiffre (bit) le plus significatif à gauche. L'arrangement des octets Malheureusement, la manière (Endian) utilisée pour exprimer la valeur d'un octet à l'intérieur d'un groupe (mot - 16 bits, long mot - 32 bits, et ainsi de suite) a un effet certain sur le résultat. L'arrangement des octets est le sujet de discussion des gens lorsqu'ils parlent du problème Endian. Imaginez deux processeurs (32 bits) qui arrangent les octets différemment. Rappelez-vous, un octet est un regroupement de 8 bits, et peut représenter un caractère ASCII (technique de codage standard pour les lettres de l'alphabet et les symboles). Maintenant imaginez ce qui se passe lorsque ces deux processeurs traitent les même données -- Le processeur «Big Endian» emmagasinera les données dans un ordre (direction). Le problème c'est que l'autre processeur lisant ces données utilise les groupements dans un ordre différent. Ainsi un des processeurs sortirait la donnée comme ceci : U-N-I-X, tandis que l'autre la sortirait ainsi X-I-N-U; en admettant que ce sont des processeurs 32 bits (lesquels regroupent les caractères en paquets de 4). Gros problème. Les anciens processeurs étaient des processeurs 16 bits -- lorsque ce problème est apparu pour la première fois. Dans ces conditions, le premier processeur aurait sorti 'UN' et 'IX', soit deux groupes de 16 bits, et l'autre processeur aurait sorti 'NU' et 'XI' -- ou 'NUXI'. Voilà pourquoi certains programmeurs UNIX appellent le problème Endian, «Le problème NUXI». Ce problème ne s'applique pas uniquement aux chaînes de caractères, mais également aux valeurs binaires. Rappelez-vous que plusieurs valeurs sont formées par des combinaisons d'octets. Un octet renferme une valeur de 0-255 (ou 256 valeurs). Avec deux octets (16 bits au total), la valeur représentée est de 0-65535 (256 x 256 valeurs). Cependant un des octets est le moins significatif et représente une fois sa valeur, l'autre octet est le plus significatif et représente 256 fois sa valeur. Alors sur un ordinateur

dont la valeur du MSB est de 50 et celle du LSB de 10 -- ce qui représente 50 x 256 + 10 = 12,810 -- celles-ci seraient dans un autre ordre sur un autre ordinateur avec le LSB valant 50 et le MSB 10 -- ce qui représente 10 x 256 + 50 = 2,610. Toujours le même problème. Supposons-nous écrivons un nombre entier de quatre bytes long 67305985.en hexadécimal cela ferai 0x04030201, le byte le plus significative serai 04 (msb) et le byte le moins significative serai 01 (lsb). Supposons qu ils sont notés dans une case mémoire noté x. ces valeur seront toutes notés consécutivement dans les adresses noté x à 3. on peut se demander quel byte de données entre dans quel endroit de la mémoire?cela dépend du processeur. Big-Endian le systeme enregistre le Msb en premier. Exemple processeur Sun et Motorola (big-endian). x 04 1 03 2 02 3 01 Little-Endian le systeme enregistre le Lsb en premier. Exemple Intel x86 family, Vaxes, Alphas (little endian). x 01 1 02 2 03 3 04 Middle-Endian Ce terme est rarement utilisé et concerne un ordonnancement anormal. Les arrangements normaux sont Big Endian (4-3-2-1) ou Little Endian (1-2-

3-4). Imaginez un processeur 32 bits qui se comporte comme deux processeurs 16 bits -- il pourrait emmagasiner les données selon un ordre 3-4-1-2 ou 2-1-4-3. C'est ce qu'on appelle le Middle-Endian pour un processeur 32 bits. Certains mini-ordinateurs utilisent ce format pour représenter les décimaux compactés -- mais c'est rarement utilisé. Faisons le même teste que precedement : Middle-Endian le système enregistre le mot le plus significative en premier : x 03 1 04 2 01 3 02 EXEMPLE : Fonction permettant l exportation de donnée de little endian à big endian : Extait de code personnel: float floatswap( float f ){

union { // sa sert a faire un cast du float float f; unsigned char b[4]; } dat1, dat2; dat1.f = f; dat2.b[0] = dat1.b[3]; dat2.b[1] = dat1.b[2]; dat2.b[2] = dat1.b[1]; dat2.b[3] = dat1.b[0]; return dat2.f; } //On lis le fichier binaire avec cette commande : fread (&p_object->mapcoord[i].u, sizeof (float), 1, l_file); p_object->mapcoord[i].u=floatswap(p_object->mapcoord[i].u); //Récupère un float qu il range dans la variable p_object->mapcoord[i].u qui a besoin // d une coordonner floatant et donc sur une sun le floatant est lu a l envers ce qui donne // une valeur erroné dans la variable p_object->mapcoord[i].u static unsigned int getint(fp) //permet le decalage de byte (ici int 4 octets) FILE *fp; { int c, c1, c2, c3; // get 4 bytes c = getc(fp); c1 = getc(fp); c2 = getc(fp); c3 = getc(fp); return ((unsigned int) c) + (((unsigned int) c1) << 8) + (((unsigned int) c2) << 16) + (((unsigned int) c3) << 24); } static unsigned int getshort(fp) //meme chose sauf ici short =2octets FILE *fp; { int c, c1;

//get 2 bytes c = getc(fp); c1 = getc(fp); return ((unsigned int) c) + (((unsigned int) c1) << 8); } Conclusion Il n'y a pas de solution miracle au problème de l'arrangement des octets (Endian). Chacun doit s'entendre sur le format d'emmagasinage des données. Un des processeurs aura à traduire (changer l'ordre) des données provenant de l'autre processeur. Certains nouveaux processeurs (tel que le PowerPC) peuvent être Bi- Endian (ils peuvent utiliser un format ou l'autre) -- mais habituellement le système d'exploitation qui les utilise est dépendant d'un certain type «d'endian». Alors ils sont fixés sur une méthode et rarement vont-ils utiliser l'autre. Quelques faits : les processeurs Intel (x86 et Pentium) sont Little Endian et les processeurs Motorola (la série 680x0) sont Big Endian. Le MacOS est Big Endian et Windows est Little Endian. Source : http://www.gamedev.net/reference/articles/article2091.asp