Endianness (Español)

HistoryEdit

muchos procesadores históricos y existentes utilizan una representación de memoria big-endian, ya sea exclusivamente o como una opción de diseño. La representación de memoria Big-endian se conoce comúnmente como orden de red, como se usa en el conjunto de protocolos de Internet. Otros tipos de procesadores usan representación de memoria little-endian; otros usan otro esquema llamado «middle-endian», «mixed-endian»o» PDP-11-endian».

el IBM System / 360 utiliza el orden de bytes big-endian, al igual que sus sucesores System/370, ESA/390 y z/Architecture., El PDP-10 también usa direccionamiento big-endian para instrucciones orientadas a bytes. La minicomputadora IBM Series / 1 también utiliza el orden de bytes big-endian.

tratar con datos de diferentes endiandades a veces se denomina el problema NUXI. Esta terminología alude a los conflictos de orden de bytes encontrados al adaptar UNIX, que se ejecutaba en el PDP-11 mixto, a un ordenador IBM serie/1 big-endian. Unix fue uno de los primeros sistemas que permitió compilar el mismo código para plataformas con diferentes representaciones internas., Uno de los primeros programas convertido debía imprimir Unix, pero en la Serie/1 impreso nUxi en su lugar.

El Datapoint 2200 utiliza lógica bit-serial simple con little-endian para facilitar la propagación de carry. Cuando Intel desarrolló el microprocesador 8008 para Datapoint, utilizaron little-endian para la compatibilidad., Sin embargo, como Intel no pudo entregar el 8008 a tiempo, Datapoint utilizó un equivalente de integración de escala media, pero la poca endianidad se mantuvo en la mayoría de los diseños de Intel, incluidos el MCS-48 y el 8086 y sus sucesores x86. El DEC Alpha, Atmel AVR, VAX, la familia MOS Technology 6502 (incluyendo Western Design Center 65802 y 65c816), el Zilog Z80 (incluyendo Z180 y eZ80), el Altera Nios II, y muchos otros procesadores y familias de procesadores también son little-endian.

Las series de procesadores Motorola 6800 / 6801, 6809 y 68000 usaban el formato big-endian.,

EL Intel 8051, a diferencia de otros procesadores Intel, espera direcciones de 16 bits para LJMP y LCALL en formato big-endian; sin embargo, las instrucciones de xCALL almacenan la dirección de retorno en la pila en formato little-endian.

SPARC utilizó históricamente big-endian hasta la versión 9, que es bi-endian; similarmente los primeros procesadores IBM POWER eran big-endian, pero los descendientes PowerPC y Power ISA ahora son bi-endian. La arquitectura ARM era little-endian antes de la versión 3 cuando se convirtió en bi-endian.,

arquitecturas Actualeseditar

Las series de procesadores Intel X86 y AMD64 / x86-64 utilizan el formato little-endian. Otras arquitecturas de conjuntos de instrucciones que siguen esta convención, permitiendo solo el modo little-endian, incluyen Nios II, Andes Technology NDS32 y Qualcomm Hexagon.

algunas arquitecturas de conjuntos de instrucciones permiten ejecutar software de cualquier endianidad en una arquitectura bi-endiana. Esto incluye ARM AArch64, C-Sky, Power ISA y RISC-V.,

únicamente las arquitecturas big-endian incluyen la arquitectura IBM z/, Freescale ColdFire (que está basada en la serie Motorola 68000), Atmel AVR32 y OpenRISC. Los sistemas operativos IBM AIX y Oracle Solaris en bi-endian Power ISA y SPARC se ejecutan en modo big-endian; algunas distribuciones de Linux en Power se han movido al modo little-endian.,

Bi-endiannessEdit

algunas arquitecturas (incluidas las versiones 3 y superiores de ARM, PowerPC, Alpha, SPARC V9, MIPS, PA-RISC, SuperH SH-4 y IA-64) cuentan con una configuración que permite la endianness conmutable en las recuperaciones y almacenes de datos, las recuperaciones de instrucciones o ambas. Esta función puede mejorar el rendimiento o simplificar la lógica de los dispositivos de red y el software. La palabra bi-endian, cuando se dice de hardware, denota la capacidad de la máquina para calcular o pasar datos en cualquier formato endian.,

Muchas de estas arquitecturas se pueden cambiar a través de software a un formato endian específico por defecto( generalmente se hace cuando el equipo se inicia); sin embargo, en algunos sistemas la endianidad por defecto es seleccionada por hardware en la placa base y no se puede cambiar a través de software (por ejemplo, El Alpha, que se ejecuta solo en modo big-endian en el Cray T3E).

tenga en cuenta que el término «bi-endian» se refiere principalmente a cómo un procesador trata los accesos a los datos., Los accesos a instrucciones (recuperaciones de palabras de instrucción) en un procesador dado todavía pueden asumir una endianidad fija, incluso si los accesos a datos son completamente bi-endianos, aunque este no siempre es el caso, como en la CPU Itanium basada en IA-64 De Intel, que permite ambos.

tenga en cuenta, también, que algunas CPU nominalmente bi-endianas requieren ayuda de la placa base para cambiar completamente la endianidad., Por ejemplo, los procesadores PowerPC orientados al escritorio de 32 bits en modo little-endian actúan como little-endian desde el punto de vista de los programas de ejecución, pero requieren que la placa base realice un intercambio de 64 bits en todos los carriles de 8 bytes para garantizar que la vista little-endian de las cosas se aplique a los dispositivos de E/S. En ausencia de este hardware inusual de la placa base, el software del controlador del dispositivo debe escribir en diferentes direcciones para deshacer la transformación incompleta y también debe realizar un intercambio de bytes normal.,

algunas CPU, como muchos procesadores PowerPC destinados al uso embebido y casi todos los procesadores SPARC, permiten la elección de endianidad por página.

Los procesadores SPARC desde finales de la década de 1990 (procesadores compatibles con»SPARC v9″) permiten elegir la endianidad de los datos con cada instrucción individual que se carga o almacena en la memoria.

la arquitectura ARM soporta dos modos big-endian, llamados BE-8 Y BE-32. Las CPU hasta ARMv5 solo admiten el modo BE-32 o Word-Invariant., Aquí cualquier acceso de 32 bits alineado naturalmente funciona como en el modo little-endian, pero el acceso a un byte o una palabra de 16 bits se redirige a la dirección correspondiente y no se permite el acceso no alineado. ARMv6 introduce el modo be-8 o Byte-Invariant, donde el acceso a un solo byte funciona como en el modo little-endian, pero acceder a una palabra de 16 bits, 32 bits o (comenzando con ARMv8) de 64 bits resulta en un intercambio de bytes de los datos. Esto simplifica el acceso a memoria no alineada, así como el acceso mapeado de memoria a registros que no sean de 32 bits.,

muchos procesadores tienen instrucciones para convertir una palabra en un registro a la endianidad opuesta, es decir, intercambian el orden de los bytes en una palabra de 16, 32 o 64 bits. Sin embargo, todos los bits individuales no se invierten.

Las CPU de arquitectura Intel X86 y X86-64 recientes tienen una instrucción MOVBE (Intel Core Desde la generación 4, Después de Atom), que obtiene una palabra en formato big-endian de la memoria o escribe una palabra en la memoria en formato big-endian. Estos procesadores son lo contrario a fondo «little-endian»., También ya tenían un rango de instrucciones de intercambio para invertir el orden de bytes del contenido de los registros, como cuando las palabras ya se han obtenido de ubicaciones de memoria donde estaban en la endianidad ‘incorrecta’.

Floating pointEdit

aunque los omnipresentes procesadores x86 de hoy en día usan almacenamiento little-endian para todos los tipos de datos (enteros, coma flotante), hay una serie de arquitecturas de hardware donde los números de coma flotante se representan en forma big-endian mientras que los enteros se representan en forma little-endian., Hay procesadores ARM que tienen la mitad de little-endian, mitad big-endian representación de coma flotante para números de doble precisión: ambas palabras de 32 bits se almacenan en little-endian como registros enteros, pero el más significativo primero. Debido a que ha habido muchos formatos de coma flotante sin representación estándar de » red » para ellos, el estándar XDR utiliza big-endian IEEE 754 como su representación. Por lo tanto, puede parecer extraño que el estándar de coma flotante IEEE 754 no especifique la endianidad., Teóricamente, esto significa que incluso los datos de coma flotante IEEE estándar escritos por una máquina podrían no ser legibles por otra. Sin embargo, en las computadoras estándar modernas (es decir, implementando IEEE 754), uno puede asumir con seguridad que la endianidad es la misma para los números de coma flotante que para los enteros, haciendo que la conversión sea sencilla independientemente del tipo de datos. (Sin embargo, los sistemas embebidos pequeños que utilizan formatos especiales de coma flotante pueden ser otra cuestión.,)

Variable length dataEdit

La mayoría de las instrucciones consideradas hasta ahora contienen el tamaño (longitudes) de sus operandos dentro del código de operación. Las longitudes de operando disponibles con frecuencia son de 1, 2, 4, 8 o 16 bytes.Pero también hay arquitecturas donde la longitud de un operando se puede mantener en un campo separado de la instrucción o con el operando en sí, por ejemplo, por medio de una marca denominativa. Este enfoque permite longitudes de operando de hasta 256 bytes o incluso un tamaño de memoria completo.Los tipos de datos de dichos operandos son cadenas de caracteres o BCD.,

OptimizationEdit

el sistema little-endian tiene la propiedad de que el mismo valor se puede leer desde la memoria en diferentes longitudes sin usar direcciones diferentes (incluso cuando se imponen restricciones de alineación). Por ejemplo, una ubicación de memoria de 32 bits con contenido 4A 00 00 00 se puede leer en la misma dirección que 8 bits (value = 4a), 16 bits (004A), 24 bits (00004A) o 32 bits (0000004A), todos los cuales conservan el mismo valor numérico., Aunque esta propiedad little-endian rara vez es utilizada directamente por programadores de alto nivel, a menudo es empleada por optimizadores de código, así como por programadores de lenguaje ensamblador.

en términos más concretos, tales optimizaciones son el equivalente del siguiente código C que devuelve true en la mayoría de los sistemas little-endian:

union { uint8_t u8; uint16_t u16; uint32_t u32; uint64_t u64;} u = { .u64 = 0x4A };puts(u.u8 == u.u16 && u.u8 == u.u32 && u.u8 == u.u64 ? "true" : "false");

Si bien no está permitido por C++, este tipo de código de juego está permitido como «definido por la implementación» por el estándar C11 y se usa comúnmente en el código que interactúa con el hardware.,

por otro lado, en algunas situaciones puede ser útil obtener una aproximación de un valor multi-byte o multi-palabra leyendo solo su porción más significativa en lugar de la representación completa; un procesador big-endian puede leer dicha aproximación usando la misma dirección base que se usaría para el valor completo.

optimizaciones de este tipo no son portátiles a través de sistemas de diferente endianness.

orden de Calculacióneditar

algunas operaciones en sistemas numéricos de posición tienen un orden natural o preferido en el que se deben ejecutar los pasos elementales.,Este orden puede afectar su rendimiento en procesadores y microcontroladores direccionables en bytes a pequeña escala.

sin embargo, los procesadores de alto rendimiento generalmente obtienen operandos multibyte típicos de la memoria en la misma cantidad de tiempo que habrían obtenido un solo byte, por lo que la complejidad del hardware no se ve afectada por el orden de bytes.

las operaciones que comienzan en el dígito menos significativoeditar

como se aprende en la escuela, la suma, la resta y la multiplicación comienzan en la posición de dígito menos significativa y propagan el acarreo a la posición más significativa posterior.,Abordar datos de varios dígitos en su primer byte (=dirección más pequeña) es el esquema de direccionamiento predominante.Cuando este primer byte contiene el dígito menos significativo, que es equivalente a poca endianidad, entonces la implementación de estas operaciones es marginalmente más simple.

las operaciones que comienzan en el dígito más significativoeditar

La comparación y la división comienzan en el dígito más significativo y propagan un posible carry a los dígitos menos significativos posteriores., Para valores numéricos de longitud fija (típicamente de longitud 1,2,4,8,16), la implementación de estas operaciones es marginalmente más simple en máquinas big-endian.

operandos de longitud variabledit

en el lenguaje de programación C la comparación lexicográfica de cadenas de caracteres tiene que hacerse mediante subrutinas, que se ofrece e implementa con frecuencia como subrutina (por ejemplo, strcmp).

muchos procesadores big-endian contienen instrucciones de hardware para comparar lexicográficamente cadenas de caracteres de longitud variable (por ejemplo, el IBM System/360 y sus sucesores).,

operaciones sin impacteditar

el transporte normal de datos mediante una declaración de asignación es, en principio, independiente de la endianidad del procesador.

Middle-endianEdit

numerosos otros pedidos, genéricamente llamados middle-endian o mixed-endian, son posibles. Un ejemplo fuera de la informática es el formato de fecha estadounidense estándar de Mes / Día / Año.

PDP-endianEdit

el PDP-11 es en principio un sistema little-endian de 16 bits., Las instrucciones para convertir entre valores de coma flotante y enteros en el procesador opcional de coma flotante del PDP-11/45, PDP-11/70, y en algunos procesadores posteriores, almacenaban valores de «doble precisión entera larga» de 32 bits con las mitades de 16 bits intercambiadas del orden esperado de little-endian. El compilador UNIX C usaba el mismo formato para enteros largos de 32 bits. Este orden se conoce como PDP-endian.

una forma de interpretar esta endianidad es que almacena un entero de 32 bits como dos palabras de 16 bits en big-endian, pero las palabras mismas son little-endian (E. g., «jag cog sin» would be «gaj goc nis»):

Storage of a 32-bit integer, 0x0A0B0C0D, on a PDP-11
increasing addresses →
0Bh 0Ah 0Dh 0Ch
0A0Bh 0C0Dh …,

Los valores de 16 bits aquí se refiere a sus valores numéricos, no su configuración real.

Honeywell Series 16editar

los ordenadores de 16 bits Honeywell Series 16, incluyendo el Honeywell 316, son lo contrario del PDP-11 en el almacenamiento de palabras de 32 bits en C., It stores each 16-bit word in big-endian order, but joins them together in little-endian manner:

storage of a 32-bit integer, 0x0A0B0C0D, on a Honeywell 316
increasing addresses →
0Ch 0Dh 0Ah 0Bh
…, 0C0Dh 0A0Bh

Intel IA-32 segment descriptorsEdit

Segment descriptors of IA-32 and compatible processors keep a 32-bit base address of the segment stored in little-endian order, but in four nonconsecutive bytes, at relative positions 2, 3, 4 and 7 of the descriptor start.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *