x86 assembly mini-course - bruno evangelista€¦ ·  · 2010-06-08tasm - turbo assembler...

Post on 23-May-2018

249 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

x86 Assembly Mini-Course

Bruno P. Evangelista

bpevangelista@gmail.com

Part 1

Introdução

Assembly é uma linguagem de programação debaixo nível em formato mnemonico

Ela possibilita trabalhar diretamente com oprocessador da máquina, executando operações quemuitas vezes não são possíveis em linguagens dealto nível

x86 Assembly Course – p.1/26

Porque utilizar?

Muito utilizado no desenvolvimento de aplicativosque exigem resposta em tempo real

Tirar proveito de conjuntos de instruções específicasdos processadores: SSE, SSE2, SSE3, 3DNOW,outros

Obter conhecimento do funcionamento do hardware,visando desenvolver softwares de melhor qualidade

x86 Assembly Course – p.2/26

Utilização em softwares

Muitas vezes os aplicativos precisam de umdesempenho maior em partes críticas do código

Nesses techos devem ser utilizados algoritmosotimizados, com baixa ordem de complexidade

Mesmo com o uso de um algoritmo adequado, podenão ser possível atingir o tempo de respostanecessário

Nesses casos, podemos tentar melhorar aperformance utilizando otimizações de baixo nível

x86 Assembly Course – p.3/26

Problemas

Otimizações de baixo nível não podem serprogramadas em linguagens de alto nível comoC/C++ ou Java

Quando fazemos otimizações de baixo nível,estamos confiando mais em nós mesmo, que nocompilador para fazer a geração de código

Muitas vezes otimizações de baixo nível não são asolução para gargalos no desempenho, sendonecessário trocar a ordem de complexidade doalgoritmo utilizado

x86 Assembly Course – p.4/26

Ferramentas utilizadas

Principais:Editor de código- Não existem IDEs com grandes recursos, devidoas limitações da linguagemMontador

Utilitários:DepuradorEditor hexadecimal

x86 Assembly Course – p.5/26

Montadores

Um dos primos do compilador

O papel do montador é transformar os mnemonicos emcódigo de máquina

Existem vários montadores para a linguagemAssembly:

MASM - Microsoft AssemblerNASM - Netwide Assembler(Versões para diferentes plataformas)TASM - Turbo Assembler (Borland)

x86 Assembly Course – p.6/26

Depurador

Ferramenta extremamente importante para encontrarerros cometidos durante a programação

Erros cometidos durante a programação geralmentetravam a máquina, não sendo possível detecta-locom facilidade

Um erro cometido na 10 linha de código geralmentesó é percebido centenas de linhas para frente, longede onde o erro foi cometido

x86 Assembly Course – p.7/26

Editor hexadecimal

Ferramente importante para trabalhar com arquivosbinários

Utilizada para editar e modificar informaçõesinternas de arquivos binários

x86 Assembly Course – p.8/26

Inlining Assembly

Algumas linguagens possuem mecanismos parapermitir a inserção de códigos assembly dentrolinguagem

Com isso podemos ter maior controle do nosoaplicativo, não precisando manter modulos externosem Assembly que devam ser linkados juntos com aaplicação

x86 Assembly Course – p.9/26

Inlining Assembly

Exemplo do uso de código Assembly na linguagemC/C++

__asm() {

pusha

xor ax, ax

popa

}

x86 Assembly Course – p.10/26

Arquitetura 8086

CPU Registradores de 16 bitsMemória Memória limitada a 1MB

Dividida em segmentos 64kbSomente modo realBytes na memória não possuemendereço únicoOrganização little endian

x86 Assembly Course – p.11/26

Arquitetura 8086

Endereçamento de memória

Endereço = 16 ∗ segmento + offset

Memória endereçável: 220 = 1MB

x86 Assembly Course – p.12/26

Arquitetura 8086

Mapeamento da memória

0x00000 - 0x003FF Tabela de interrupções (ISR)0x00400 - 0x005FF Área de BIOS (BDA)0x00600 - 0x9FFFF Área livre0xA0000 - 0xAFFFF Memória de vídeo EGA/VGA0xB0000 - 0xB7FFF Memória de texto monocromático0xB8000 - 0xBFFFF Memória de vídeo CGA0xC0000 - 0xDFFFF ROM instalada0xE0000 - 0xFDFFF ROM fixa0xFE000 - 0xFFFFF ROM da BIOS

x86 Assembly Course – p.13/26

Arquitetura 80386

CPU Registradores de 32 bitsMemória Memória limitada a 4GB

Modo real e protegidoBytes na memória possuemendereço únicoOrganização little endian

x86 Assembly Course – p.14/26

Sintaxes de comando

Intel AT&Tmov eax, 1 movl $1, %eaxmov ebx, 0ffh movl $0xff, %ebxint 80h int $0x80mov eax, [ebx] movl (%ebx), %eaxmov eax, [ebx+3] movl 3(%ebx), %eax

x86 Assembly Course – p.15/26

Diretiva de dados

Diretivas de dados são utilizadas para definir espaçona memória

Existem duas diretivas de dados

Diretivas de dados DescriçãoRESX Define espaço para memóriaDX Define espaço para memória

e inicializa a área

O símbolo X deve ser trocado pelo tipo de dadodesejado

x86 Assembly Course – p.16/26

Diretiva de dados

Tipos de dado Letra Tamanho(bits)byte B 8word W 16double word D 32quad word Q 64ten bytes T 80

x86 Assembly Course – p.17/26

Registradores

A arquitetura 8086 possui 14 registradores de 16bits, sendo:

4 de propósito geral5 de offset para acesso a memória4 de segmento para acesso a memória1 registrador de flags

x86 Assembly Course – p.18/26

Registradores

Registradores de propósito geral

Registrador Propósito geralAX AcumuladorBX BaseCX ContadorDX Dados

x86 Assembly Course – p.19/26

Registradores

Registradores de offset para acesso a memória

Registrador OffsetIP Instruction pointerSP Stack pointerBP Base pointerSI Source IndexDI Destination Index

x86 Assembly Course – p.20/26

Registradores

Registradores de segmento para acesso a memória

Registrador SegmentoCS Code segmentSS Stack SegmentDS Data SegmentES Extra segment

x86 Assembly Course – p.21/26

Registradores

Registrador de flags

Flags DescriçãoOF Overflow flagDF Direction flagIF Interrupt flagTF Trap flagSF Sign flagZF Zero flagAF Auniliary flagPF Parity flagCF Carry flag

x86 Assembly Course – p.22/26

Registradores

A arquitetura 80386 possui registradores de 32 bitsque extendem os registradores anteriores mantendocompatibilidade

Os registradores de 32 bits possuem o prefíxo “E”

Não acessível 16b

AX 16b︷ ︸︸ ︷

AH 8b AL 8b︸ ︷︷ ︸

EAX 32b

x86 Assembly Course – p.23/26

Instruções

Instrução Descriçãomov Move dadosadd Adição aritméticasub Subtração aritméticapush Empilhapop Desempilhajmp Salto incondicionalint Interrupçãocall Chamada

x86 Assembly Course – p.24/26

Interrupções

São chamadas de funções externas

A tabela interrupções se encontram no início damemória, e é chamada ISR(Interrupt ServiceRoutine)

A ISR possui o endereço das funções de cadainterrupção, contendo o segmento e offset de cadauma delas

Quando o comando: int 21h é executado, estamosna verdade saltando para o endereço de memóriaque contêm o código da interrupção

x86 Assembly Course – p.25/26

Interrupções da BIOS

Interrupção Descrição10h Escreve caracter13h Reseta drive

Lê do discoEscreve no disco

16h Lê caracter18h Chama “Basic”19h Reseta

x86 Assembly Course – p.26/26

x86 Assembly Mini-Course

Bruno P. Evangelista

bpevangelista@gmail.com

Part 3

Sistema de arquivos

Quando trabalhamos com arquivos, necessitamos deum mecanismo capaz de manipular os mesmos,chamado sistema de arquivos

O sistema de arquivos deve disponibilizar asoperações necessárias para manipulação arquivos,como:

ListarLeituraGravação

x86 Assembly CoursePart III – p.1/18

Qual sistema utilizar?

Atualmente existem diversos sistemas de arquivos,cada um para um propósito específico

FAT12, FAT32, NTFSVFAT, EXT3, EXT3, REISER

Os sistemas de arquivos são desenvolvidos baseadono dispositivo que será utilizado

Alguns formatos não são adequados paradispositivos de pequenos porte, pois utilizam muitoespaço para fazer o gerênciamento dos arquivos

x86 Assembly CoursePart III – p.2/18

Qual sistema utilizar?

Um sistema de arquivos simples pode ser facilmentecriado, no entanto, não isso demanda tempo

Ao utilizarmos um sistema já existente, podemosfazer uso das diversas ferramentas e recursosdisponíveis para o mesmo

x86 Assembly CoursePart III – p.3/18

Sistema FAT12

FAT12 é um sistema de arquivos TODO

Na FAT12 existe um ponteiro para o primeiro blocode cada arquivo e para cada bloco lido existe, umponteiro para o próximo bloco

O sistema FAT12 é formado por:Duas cópias da tabela de alocação dearquivos(FAT)Tabela de entrada de arquivosDados dos arquivos

x86 Assembly CoursePart III – p.4/18

Estrutura da FAT12

Dos 2.880 setores disponíveis, 1 é utilizado paraboot, 32 para cabeçalhos, e o resto para dados

Setor Utilização Espaço0 Boot sector 512b1-9 FAT Copy 1 4,5kb10-18 FAT Copy 2 4,5kb19-32 Root Directory 7kb33-2879 Data 1,39mb

x86 Assembly CoursePart III – p.5/18

Cabeçalho do boot para FAT12

A FAT12 utiliza o ínicio do setor de boot para guardaras configurações do dispositivo e verificar se osistema é válido

OSID db ’EVANG_OS’bytesPerSector dw 0x0200sectorsPerCluster db 0x01leadingSectors dw 0x0001numFAT db 0x02maxRootDirEntries dw 0x00E0totalSectors dw 0x0B40mediaType db 0x0F0

x86 Assembly CoursePart III – p.6/18

Cabeçalho do boot para FAT12

sectorsPerFAT dw 0x0009sectorsPerTrack dw 0x0012numberOfHeads dw 0x0002hiddenSectors dd 0x00000000totalSectors2 dd 0x00000000driveNumber db 0x00reserved db 0x00bootSignaure db 0x29volumeID dd 0x26185454volumeLabel db ’EVANG_OSbbb’volumeLabel db ’OST4bbbbbbb’FATID db ’FAT12bbb’ x86 Assembly CoursePart III – p.7/18

Endereçamento da FAT12

Cada entrada da tabela FAT possui 12 bits

Com isso temos 212 = 4096(4kb) possíveis

endereços de setor

Na FAT12 cada setor possúi 512 bytes

O que disponibiliza um endereçamento total de 2mb

x86 Assembly CoursePart III – p.8/18

Entradas da FAT

Cada entrada da FAT12 possui 12 bits

Por isso para acessar cada entrada é necessário lerdois bytes, mas apenas 1 byte e meio é utilizado

Por causa disso é preciso um tratamento especialpara as entradas na FAT

x86 Assembly CoursePart III – p.9/18

Entradas da FAT

Trecho da FAT exibida em hexadecimal, cadacaracter representa um nibble de 4 bits

01 23 45 67 89

Endereço 0 endereço: 0 1 2

Endereço 1 endereço: 3 4 5

Endereço 2 endereço: 6 7 8

x86 Assembly CoursePart III – p.10/18

Entradas de arquivo

Para localizarmos os arquivos em disco é necessárioconsultar a tabela de arquivos

Byte Descrição0-7 Nome do arquivo8-10 Extensão11 Atributos12-21 Reservados22-23 Hora24-25 Data26-27 Endereço do primeiro cluster28-31 Tamanho do arquivo

x86 Assembly CoursePart III – p.11/18

Modos de endereçamento

O tipo de endereçamento utilizado pela FAT12 édiferente do utilizado pela controladora do disco

Basicamente existem dois tipos de endereçamentoCHS - Cylinder, Head, SectorLBA - Logical block address

A controladora do disco trabalha com oendereçamento CHS

x86 Assembly CoursePart III – p.12/18

Modos de endereçamento

A BIOS possui interrupções para trabalhar com LBA,no entando o código utilizado é grande, por issogeralmente é utilizado o endereçamento CHS noboot

Para acessarmos o endereço do arquivo énecessário então fazer uma conversão entre os tiposde arquivo, como ilustra o desenho abaixo

FAT12 −→ LBA −→ CHS

x86 Assembly CoursePart III – p.13/18

Transformação LBA para CHS

Sector = LBA % SectorsPerTrack + 1

Head = (LBA / SectorsPerTrack) % NumberOfHeads

Cylinder = (LBA / SectorsPerTrack) /NumberOfHeads

x86 Assembly CoursePart III – p.14/18

Transformação FAT para LBA

O FAT começa a endereçar a partir da área livre,setor 33 (0 a 32 estão ocupados)

Mas é importante lembrar que os dois primeirosendereços de entrada do FAT são reservadas

Então o endereço do bloco 33 na FAT12 é 2

Portanto para converter um FAT para LBA bastasomar 31 ao número do bloco

x86 Assembly CoursePart III – p.15/18

Funções básicas do driver

FAT12 STARTCarrega todos os cabeçalhos do sistema para amemória, em uma área segura

FAT12 READCarrega um arquivo pelo nome, e grava em umaárea disponível da memória

LBA READCarrega um setor LBA para a memória

x86 Assembly CoursePart III – p.16/18

Testando o driver

Crie vários arquivos com 512 caracteres, cada umformado por uma sequência do mesmo caracter

aaaaaaaabbbbbbbb

Execute a operação de leitura e em seguida deexibição para cada um dos arquivos e veja se oresultado está correto

Concatene os arquivos em grupos de 3, tamanho1.5kb, e execute a operação de leitura e exibiçãonovamente

Se após vários testes tudo ocorreu bem, seu sistemade arquivos está funcionando corretamente

x86 Assembly CoursePart III – p.17/18

Informações adicionais

Google - www.google.comUm dos seus melhores amigos, não deixe deperguntar para ele! =D

Intel - www.intel.comDisponibiliza manual sobre a arquitetura x86,além de várias ferramentas para desenvolvedores

x86 Assembly CoursePart III – p.18/18

top related