quarta-feira, 21 de novembro de 2007

Como funciona o endereçamento Little Endian

No artigo anterior ( C & Assembly - Procedure Call - Procedimento de Chamada), deixei uma dúvida em uma área um tanto complicada, para quem está começando.
Aqui teremos $esp apontando novamente para 0xc0000000 e teremos no registrador $eax o valor 0x00000001.
Note que o processador trata de forma diferente os números: Ao inves de ser "0x00000001", como nós, seres humanos tratamos, o processador calcula de forma inversa. Isto é o que chamamos de Little Endian e Big Endian, a arquitetura x86 (PC) sempre usa Little Endian (a forma invertida). Outros processadores, como os da SUN utilizam Big Endian.
Para nao nos confundirmos, trataremos todos os endereços pela forma HUMANA, ox00000001. O Gdb, quando pedimos para mostrar a memoria, já trata de inverter de 4 em 4, para ficar mais "humana" a leitura.
Somente aviso que na verdade o número está invertido, pois, se olhares um binário por um hexedit, notarás que aonde existem números, eles estão "invertidos".
Para explicar melhor, criei um artigo em específico.
Boa leitura :)

http://docs.google.com/Doc?id=dgwgq5zv_78f359gp

Vida Longa e prospera!
Dúvidas, por favor, perguntem :]

Nenhum comentário: