Como funciona a ordenação e organização dos bytes nos "data word"?
Cada local de armazenamento na memória está associado com um índice, chamado seu endereço, que indica a sua posição. Uma
data word hexadecimal "A1B2", são armazenados em endereços de memória consecutivos da seguinte forma "0A 01 0B 02", esse
data word forma um conjunto de 4 bytes, que resulta em 32 bits.
O posicionamento do
data word em memória principal, determina-se a ordenação e organização dos bytes. Há duas possíveis convenções de organização, são elas:
- Big-endian: Armazena o byte mais significativo de um data word no endereço menor.
0A010B02 = 0A010B02
Os bytes são guardados por ordem decrescente do seu "peso numérico" em endereços sucessivos da memória.
Significa que o byte de ordem mais elevada do número está armazenado no endereço de memória mais baixo e de ordem mais baixa, no endereço mais elevado.
- Little-endian: Armazena o byte menos significativo de um "data word" no endereço menor.
0A010B02 = 020B010A
Os bytes são guardados por ordem crescente do seu "peso numérico" em endereços sucessivos da memória.
Significa que o byte de ordem mais baixa do número está armazenado no endereço de memória mais baixo e de ordem mais elevada, no endereço mais elevado.
Faremos uma analogia com números decimais:
- "A B C" em Big-endian :: significa "C B A" em Little-endian.
- "1 2 3" em Little-endian :: significa "3 2 1" em Big-endian.
Isso mostra que é necessário um tratamento de conversão se quisermos fazer migrações entre plataformas.
Quando o Endianness interfere em migração entre plataformas?
Com base nos conteúdos anteriores, chegamos à conclusão que a forma de ordenação dos
data word é a causa de incompatibilidade de programas (software) entre plataformas computacionais, ou seja, o tratamento de baixo nível do sistema computacional provoca essa situação, uma vez que as plataformas tratam a entrada e saída dos dados de forma não similares.
A solução para esse problema, muitas vezes, é a recompilação do programa computacional, ou seja, a reinstalação do software. Assim, o código escrito em uma determinada linguagem de programação em alto nível é compilado, respeitando a sintaxe do compilador e é gerado o executável em linguagem de máquina para a plataforma.
Assim, um código em linguagem de alto nível pode ser compilado para qualquer plataforma, desde que o compilador suporte a geração do executável para esta determinada plataforma.
Se o mesmo código em Linguagem
C (código escrito em uma arquivo TXT) for compilado respeitando a sintaxe de cada compilador em suas plataformas, o resultado do programa será o mesmo, pois programas iguais geram resultados iguais.
Neste caso, o Endiannes não interfere, uma vez que programas iguais (código) geram resultados iguais (programa em execução).
Em caso de não existência do passo 1, ou seja, a compilação em alto nível, o Endianess é extremamente relevante, pois, como dito anteriormente, essa convenção orquestra o tratamento de baixo nível do sistema computacional, o que pode tornar a execução do programa ininteligível para o sistema computacional.