Murilo :P

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

Archive for December 2007

Linguagens de Montagem Aula 4 – Formatos De Declaração

with 2 comments

<rótulo><mnemônicos><operandos>

Rótulo

Representa um endereço no código do programa.

Inicia com uma letra. Recomenda-se que termine com “:”. O caractére “.” deve ser usado somente em casos específicos de rótulos locais.

No exemplo podemos ver um exemplo de um rótulo. Dei a ele o nome de “repita”:

...
repita:
	add eax, 1
	cmp eax, 4
	jl repita
...

Mnemônico

Representa uma operação da CPU.

Exemplos: mov, ror, add, shl, cmp;

Operandos

Operando é o que representa um dado em uma operação.

Mais de um operando em uma operação deve ser separado por vírgula.

Tipos de operando:
  • Registrador – eax, ebx, ecx, edx, esi, ebp, ax, bx, dh, dl, etc.
  • Memória – representado por símbolos definidos em um segmento de dados.
  • Imediato – valor constante. Ex: mov eax, 12h
  • Implícito – aquele que não é indicado na operação. Ex: inc eax = add eax, 1

Diretivas

Diretiva de equivalência:

simbolo equ valor

Exemplos:

TRUE equ 1
FALSE equ 0
Diretiva de definição:

%define simbolo1 simbolo2

Exemplos:

%define LF 10
%define SIZE 256

Comentários

No NASM sempre iniciam com “;” e terminam no final da linha.

Exemplo:

;Esse é um comentário.
mov al, 2 ;Esse é outro comentário

Written by Murilo Adriano

30 de December de 2007 at 00:36

Posted in Assembly

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