Little-endian x Big-endian

16 junho 2008

Na verdade, não existe tal coisa. Embora muitos tenham tomado parte de um lado ou do outro, tanto little-endian e big-endian são representações que têm vantagens e desvantagens.

Para a little-endian, as instruções da linguagem assembly que trabalham com diferentes números de comprimento (1, 2, 4 bytes) procede da mesma maneira em primeiro pegar o byte menos significativo, no endereço base +0 e indo para o byte mais significativo.

Já a representação big-endian, não importa quão longo é o número, você pode testar rapidamente se é positivo ou negativo, verificando o byte base no endereço 0 (o byte mais significativo). A maior parte dos códigos de rede bitmap e gráficos são mapeados em representações big-endian . Em uma máquina big-endian, os armazenamentos são automaticamente cuidados com relação a arquitetura, mas na máquina little-endian, existe a necessidade de inverter a ordem de byte elementos que são armazenados em mais de um byte. Além disso, é mais fácil de ler textos hexadecimal.

Ordenação em diferentes arquiteturas

As seguintes arquiteturas uso:

  • Little-endian:
    • Intel x86 Intel x86
    • AMD64
    • DEC VAX DEC VAX
    • MOS Technology 6502 Tecnologia MOS 6502
  • Big-endian
    • Sun SPARC Sun SPARC
    • Motorola 68000 Motorola 68000
    • POWER PC Power PC
    • IBM System/360 IBM System/360
  • Bi-endian, rodando em modo big-endian por default:
    • MIPS running IRIX PA-RISC
    • Most POWER and PowerPC systems
  • Bi-endian, rodando em modo little-endian por default:
    • MIPS running Ultrix
    • most DEC Alpha
    • IA-64 running Linux


Compilador

13 maio 2008

O compilador tem como função traduzir um programa de linguagem fonte (alto nível) para uma linguagem de máquina (baixo nível). Porém nesta  tradução existem estágios intermediários até chegar em linguagem de máquina para ser executada pelo processador. Esses estágios são:

1º) Edição: É o estágio onde o programador constrói sua linguagem (fonte) de alto nível em um editor qualquer e salva em uma terminação padrão da linguagem adotada. Ex em c++:.cpp;.C; etc.

2º) Pré-Processador: Antes de compilar o código fonte, este passa por um pré-processador que obedece à comandos chamados de diretivas de pré-processador (que em c++ são iniciados por #), que indicam que certas manipulações devem ser feitas antes da compilação. Exemplo em c++:

#define area_quadrado(x) (x*x)

Então o comando:

area = area_quadrado(2);

Vai ser traduzido para:

area = (2*2);

Daí então passa para fase de compilação.

3º) Compilação: Nesta fase o programa fonte já pré-processado é transformado em um arquivo objeto (.o) que já contém todo programa em binário. Neste processo, no caso c++, antes de passar para o “.o” é traduzido para código assembly para depois, utilizando um montador, ser passado para programa objeto (.o).

4º) Linkagem: O código objeto não é executado diretamente depois de traduzido, visto que em um programa pode-se ocorrer referências a outros programas ou dados, os quais se encontram em outros programas, ou em bibliotecas. Então nesta etapa um editor (linkeditor) tem como função juntar esses códigos traduzidos separadamente em um único módulo que seria um programa executável. Portanto se um programa for traduzido e linkado corretamente será gerado um executável.

5º) Carregamento: Antes que um programa possa ser executado, ele deve ser armazenado na memória principal. Portanto esta fase tem como função colocar o programa em memória principal.

6º) CPU: Por fim, o computador, sob controle da CPU executa uma instrução por vez.


Seguir

Obtenha todo post novo entregue na sua caixa de entrada.