Posts Tagged ‘Assembly’
Linguagens de Montagem Aula 5 – Memória
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.
Linguagens de Montagem Aula 3 – Ferramentas Para A Programação Em Assembly
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
Linguagens de Montagem Aula 2 – Representação de Dados
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.
Linguagens de Montagem Aula 1 – Introdução ao IA-32
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.
4 eBooks que estou lendo
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.