A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Tutoriais e Programação

Processadores Intel e o Little Endian

Sab

20

Jun

2009


00:00

(7 votos, média 4.43 de 5) 


Iniciantes A ordem reversa de armazenamentos de endereços é uma característica dos processadores Intel. Este é um assunto que você precisa dominar se pretende programar em Assembly e se quiser examinar dados e a memória do seu computador usando um debugger.

Basicamente, os processadores Intel guardam dados na memória "no avesso", ou seja, os dados são armazenados byte a byte em ordem reversa. A coisa se resume no seguinte: quando um byte é armazenado num endereço de memória a sequência de bits é mantida, mas quando um word, composto por dois bytes, é armazenado na memória, seus bytes serão armazenados em ordem reversa. Isto quer dizer que o byte menos significativo (o segundo) será armazenado primeiro, seguido pelo byte mais significativo (o primeiro).

Esta sequência "ao contrário" é chamada de formato little endian. A sequência na ordem correta é chamada de big endian e é usada por outros tipos de processadores.

É meio difícil explicar o little endian por meio de palavras - um exemplo torna a coisa bem mais fácil. Digamos que você queira armazenar o valor 248Ch no endereço de memória 400000h. A área de memória teria o seguinte aspecto:

EndereçoValor
0040 00008C
0040 000224

Quando este valor for lido da memória por uma instrução word, tendo como referência o endereço 400000h, os bytes serão lidos em ordem reversa e o registrador word (de 32 bits) indicado receberá o valor 248Ch. Se o armazenamento ocorre em ordem inversa e a leitura também, não tem com que se preocupar - o computador está fazendo o serviço direitinho. A única coisa é que precisamos saber disto para que, ao visualizarmos diretamente esta área da memória usando um debugger, saibamos que os bytes estão invertidos.

Para reforçar o conceito do mecanismo little endian usado pelos processadores Intel, vou exemplificar o armazenamento de um dword, digamos 12345678h também em 400000h:

EndereçoValor
0040 000078
0040 000256
0040 000434
0040 000612

Agora você sabe o que é o little endian, não vai ficar confuso com ele. Mas por que cargas d'água o pessoal da Intel resolveu adotar este modo de armazenamento? Como tudo na vida, as coisas têm uma explicação lógica smile

Vamos simplificar o problema para entender a mecânica e a origem do little endian. Imagine a área de memória como uma enorme prateleira vazia. Se você tivesse que armazenar apenas um bit na memória, qual posição você escolheria? Não sei se sou muito folgada, mas se a memória estiver vazia eu escolheria a primeira prateleira livre que estivesse mais em baixo (se eu escolhesse a que estivesse mais em cima teria que buscar uma escada e subir até o topo da prateleira). Agora vamos ampliar nosso modelo teórico: já temos um bit armazenado e queremos guardar um segundo bit. O que é mais fácil? Deslocar o primeiro bit para a segunda prateleira e colocar o segundo bit na primeira ou simplesmente colocar o segundo bit na segunda prateleira? Novamente, movida pela lei do mínimo esforço, eu optaria por colocar o segundo bit na segunda prateleira.

Ao invés de pensar em bits, vamos agora pensar em bytes (conjuntos de 8 bits). Se tivermos apenas um byte para colocar na memória vazia, vamos alocá-lo no início; se tivermos um segundo byte, seguindo o raciocínio do modelo dos bits, ao invés de deslocar o primeiro byte para inserir o segundo no início da memória, o segundo byte vai para a segunda prateleira. Taí! Novamente escolhemos a solução mais fácil e rápida... só que, para obter o valor original, vamor ter que ler os bytes na ordem inversa em que foram colocados.

......
3milhar5
2centena4
1dezena8
0unidade7

Para aqueles que se embananam com bits e bytes, vou dar mais um exemplo usando o sistema decimal. Sabemos que valores decimais são expressos em unidades, dezenas, centenas, etc. Se quisermos guardar o número 5.487 na prateleira da memória, começamos guardando as 7 unidades, depois as 8 dezenas, as 4 centenas e finalmente os 5 milhares. Nós e o computador guardamos os "pedaços do número" desta forma, de baixo para cima. Na hora de recuperar o valor original, o computador busca os "pedaços" na mesma ordem em que foram colocados na prateleira, ou seja, 7845. Como a máquina sempre guarda e lê as coisas da esquerda para a direita (ou de baixo para cima, como quiser), o valor original fica preservado. Acontece que o cérebro dos humanos foi condicionado a ver o número na ordem inversa, ou seja, 5487 precisa ser lido da esquerda para a direita (ou de cima para baixo). Ao invés de mudar a arquitetura da máquina para imitar um costume dos humanos, o little endian facilitou as coisas para o computador e deixou por conta dos humanos a inversão da leitura.

Não existe um modo mais certo ou mais errado de armazenar dados. Existe apenas um estilo e o pessoal da Intel escolheu o que acabei de explicar. Para dar nomes aos bois, este estilo foi chamado de little endian. Por dedução, o big endian é o estilo que desloca o primeiro para inserir o segundo byte. Dá um pouco mais de trabalho, exige um pouco mais de processamento, mas também dá certo. O pessoal da IBM escolheu usar o big endian. Com isto facilitou as coisas para os humanos exigindo um pouco mais da máquina. Certo ou errado? Diria que é apenas uma questão de estilo...

казино бесплатные игрысковорода чугуннаялобановский александр досьеотзывов сайтславненько этораскрутка сайта в москвелобановский александр

Informações adicionais