Murilo :P

C++, Computação, Programação, Web e afins :)

Archive for the ‘Arquitetura de Computadores’ Category

Linguagens de Montagem Aula 2 – Representação de Dados

leave a comment »

Nesse post trataremos da convenção de representação de dados que utilizaremos (alguns) com freqüência nas próximas aulas.

Bit:

Armazena duas informações diferentes.

0 ou 1 que pode ser usado por exemplo para significar falso ou verdadeiro.

Nibble:

É um agrupamento de 4 bits contíguos.

3 2 1 0
█ █ █ █ – 16 combinações

^MSB ^LSB

MSB: Bit mais significativo (de maior valor).
LSB: Bit menos significativo (de menor valor).

Byte:

8 bits contíguos, ou seja, 2 nibbles.

█ █ 15 █ █ █ █ █0
MSB █ █ █ █ █ █ █ █
LSB
█ █ █ HON LON

HON: Nibble de maior ordem.
LON: Nibble de menor ordem.

Word:

16 bits = 4 nibbles = 2 bytes = 65.536 combinações diferentes.

0 15
█ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █

HOB █ █ █ █ █ LOB

HOB: Byte de maior ordem
LOB: Byte de menor ordem

Double word:

32 bits = 8 nibbles = 4 bytes = 2 words = 4.294.967.296 combinações diferentes.

Quad word:

64 bits = 16 nibbles = 8 bytes = 4 words = 2 dwords = 18.446.744.073.709.551.616 combinações diferentes.

Ten bytes:

80 bits = 20 nibbles = 10 bytes = 5 words (usado em ponto flutuante extendido no IA32)

Parágrafo:

Possui 16 bytes e o endereço do 1º byte sempre é múltiplo de 16.

Página:

Possui 16 parágrafos e o endereço do 1º byte sempre é múltiplo de 256.

Advertisements

Written by Murilo Adriano

29 de December de 2007 at 14:30

Linguagens de Montagem Aula 1 – Introdução ao IA-32

with one comment

Hoje estou começando a escrever sobre Linguagens de Montagem (LM). Muitos acham que Assembly é um bicho de 7 cabeças (ou mais), mas veremos que não é bem assim.

Começarei falando sobre a arquitetura IA-32 (Intel Architecture 32 bits) a qual estarei lidando durante todos os posts dessa série. (mais sobre IA-32)

  • Memória principal (Física) 4GB

Registradores

  • Ponteiros – 32 bits
  • Inteiros – 32 bits
  • Ponto flutuante – 80 bits, 64 bits, 32 bits

Registradores “visíveis”

Uso geral:
  • Ponteiros ou dados com 32, 16 ou 8 bits
    • eax
    • ebx
    • ecx
    • edx
  • Ponteiros ou dados com 32 ou 16 bits
    • esi
    • edi
  • Ponteiro para registro de ativação
    • ebp
  • Ponteiro para topo da pilha
    • esp

eax:

0 31
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
ax

0 15
█ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █
al
█ █ █ █ █ █ █ ah

Registradores indicadores (flags)

  • Z – indica que o resultado da última operação foi zero. (Z = 1)
  • S – indica o sinal do resultado da última operação. (S = 0 => positivo; S = 1 => negativo)
  • C – indica o resultado do “vai-um” do bit mais significativo da útima operação.
  • O – indica estouro de capacidade em operação com inteiros sinalizados.
  • P – indica a paridade dos 8 bits menos significativos do resultado da útima operação.
  • D – comanda a direção de incremento de ponteiros em instruções com arranjos.

Conteúdo baseado nas aulas do professor Augusto Silva da Universidade Católica de Goiás.

Written by Murilo Adriano

15 de December de 2007 at 23:53

Um pouco sobre números de ponto flutuante (floats e doubles)

leave a comment »

Representação de números reais

Nos computadores atuais:

  • É impossível a representação de números reais em computadores binários digitais porque a representação binária é discreta.
  • Em qualquer linguagem de programação utilizamos representações que prevêem algum grau de arredondamento.

Antes de começar a falar de ponto flutuante vamos ver um pouco de ponto fixo.

Ponto fixo

Denotamos um número de ponto fixo quando especificamos o número de casas para a parte inteira e fracionária (matisse).

Exemplo: Ponto fixo 1.15 (Um bit para a parte inteira e quinze para a parte fracionária).

Ponto fixo

Na figura acima, podemos ver que reservei um bit para a parte inteira do número e 15 para a fracionária.

Dessa forma sempre teremos números menores que dois, pois como está reservado somente um bit para a parte inteira, o maior valor que esse bit pode valer é 1. A parte fracionária começa do 2^-1 e vai até o 2^-15. Esses valores são interpretados literalmente.

Por exemplo, o valor binário 1010 0000 0000 0000 corresponde a 2^0 + 2^-2 = 1.25.

Dessa forma, o menor número seria 0000 0000 0000 0000
E o maior: 1111 1111 1111 1111.

Read the rest of this entry »

Written by Murilo Adriano

28 de November de 2007 at 00:43