Murilo :P

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

Posts Tagged ‘ia-32

Linguagens de Montagem Aula 3 – Ferramentas Para A Programação Em Assembly

leave a comment »

Descreverei agora algumas ferramentas para a programação em LM que serão utilizadas nas próximas aulas.

Editor

Qualquer editor de texto puro de seu gosto. Eu particularmente uso o gVIM.

Montador

Nos exemplos usarei o montador (assembler) NASM.

Modo de uso (Linux):
$>nasm -f elf arquivo.asm

Se a montagem ocorrer com sucesso, será criado no mesmo diretório um arquivo chamado “arquivo.o”.

Linker

Depois de montado, o arquivo objeto criado deve ser “linkado”. O linker que utilizaremos será o GCC.

Modo de uso:
$>gcc arquivo.o -o arquivo
Advertisements

Written by Murilo Adriano

30 de December de 2007 at 00:07

Posted in Assembly

Tagged with , ,

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.

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