Murilo :P

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

Posts Tagged ‘Assembly

Linguagens de Montagem Aula 5 – Memória

with one comment

Segmentação

  • Armazenamento de dados – escrever/ler
  • Manutenção da pilha – escrever/ler
  • Armazenamento de código – ler

Diretiva segment

Modo de uso:

segment .nome

Exemplo:

segment .data
segment .data

Indica o início de declarações pertencentes ao segmento de dados que contém somente dados inicializados.

Read the rest of this entry »

Written by Murilo Adriano

17 de February de 2008 at 21:44

Posted in Assembly, Baixo nível

Tagged with , ,

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

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

4 eBooks que estou lendo

leave a comment »

Ebooks que estou lendo e recomendo à quem gosta de programar.

Análise de quebra de proteção de software – monografia de dois alunos da universidade que estudo sobre quebra de proteção de software, engenharia reversa, arquitetura IA-32 e assembly compatível com o montador NASM.

Programação Orientada a Objeto em C++ UML – STL – GNU/Linux – Completíssimo. Desde o basicão mesmo até o mais avançado em C++, com boa didática e muitos exemplos. Aborda também AOO com UML e programação para GNU/Linux.

PC Assembly Language (inglês) – Muito bom mesmo. Em inglês “fácil”, o autor também explica desde o mais básico (como sistemas numéricos). Se você tem interesse em começar a estudar assembly, esse é um ótimo ponto de partida.

Art of Programming Contest SE  (inglês) – Esse livro foi feito para os que gostam de contests de programação. Basicamente explica algoritmos, ensina técnicas de programação, programação em C e algumas outras coisas. Vale a pena conferir.

Written by Murilo Adriano

15 de November de 2007 at 01:16