Escolar Documentos
Profissional Documentos
Cultura Documentos
Part 1
Introduo
Assembly uma linguagem de programao de baixo nvel em formato mnemonico Ela possibilita trabalhar diretamente com o processador da mquina, executando operaes que muitas vezes no so possveis em linguagens de alto nvel
Porque utilizar?
Muito utilizado no desenvolvimento de aplicativos que exigem resposta em tempo real Tirar proveito de conjuntos de instrues especcas dos processadores: SSE, SSE2, SSE3, 3DNOW, outros Obter conhecimento do funcionamento do hardware, visando desenvolver softwares de melhor qualidade
Utilizao em softwares
Muitas vezes os aplicativos precisam de um desempenho maior em partes crticas do cdigo Nesses techos devem ser utilizados algoritmos otimizados, com baixa ordem de complexidade Mesmo com o uso de um algoritmo adequado, pode no ser possvel atingir o tempo de resposta necessrio Nesses casos, podemos tentar melhorar a performance utilizando otimizaes de baixo nvel
Problemas
Otimizaes de baixo nvel no podem ser programadas em linguagens de alto nvel como C/C++ ou Java Quando fazemos otimizaes de baixo nvel, estamos conando mais em ns mesmo, que no compilador para fazer a gerao de cdigo Muitas vezes otimizaes de baixo nvel no so a soluo para gargalos no desempenho, sendo necessrio trocar a ordem de complexidade do algoritmo utilizado
Ferramentas utilizadas
Principais: Editor de cdigo - No existem IDEs com grandes recursos, devido as limitaes da linguagem Montador Utilitrios: Depurador Editor hexadecimal
Montadores
Um dos primos do compilador O papel do montador transformar os mnemonicos em cdigo de mquina Existem vrios montadores para a linguagem Assembly: MASM - Microsoft Assembler NASM - Netwide Assembler (Verses para diferentes plataformas) TASM - Turbo Assembler (Borland)
Depurador
Ferramenta extremamente importante para encontrar erros cometidos durante a programao Erros cometidos durante a programao geralmente travam a mquina, no sendo possvel detecta-lo com facilidade Um erro cometido na 10 linha de cdigo geralmente s percebido centenas de linhas para frente, longe de onde o erro foi cometido
Editor hexadecimal
Ferramente importante para trabalhar com arquivos binrios Utilizada para editar e modicar informaes internas de arquivos binrios
Inlining Assembly
Algumas linguagens possuem mecanismos para permitir a insero de cdigos assembly dentro linguagem Com isso podemos ter maior controle do noso aplicativo, no precisando manter modulos externos em Assembly que devam ser linkados juntos com a aplicao
Inlining Assembly
Exemplo do uso de cdigo Assembly na linguagem C/C++
Arquitetura 8086
CPU Registradores de 16 bits Memria Memria limitada a 1MB Dividida em segmentos 64kb Somente modo real Bytes na memria no possuem endereo nico Organizao little endian
Arquitetura 8086
Endereamento de memria
Endereo = 16 segmento + of f set
Arquitetura 8086
Mapeamento da memria 0x00000 - 0x003FF 0x00400 - 0x005FF 0x00600 - 0x9FFFF 0xA0000 - 0xAFFFF 0xB0000 - 0xB7FFF 0xB8000 - 0xBFFFF 0xC0000 - 0xDFFFF 0xE0000 - 0xFDFFF 0xFE000 - 0xFFFFF Tabela de interrupes (ISR) rea de BIOS (BDA) rea livre Memria de vdeo EGA/VGA Memria de texto monocromtico Memria de vdeo CGA ROM instalada ROM xa ROM da BIOS
x86 Assembly Course p.13/26
Arquitetura 80386
CPU Registradores de 32 bits Memria Memria limitada a 4GB Modo real e protegido Bytes na memria possuem endereo nico Organizao little endian
Sintaxes de comando
Intel mov eax, 1 mov ebx, 0ffh int 80h mov eax, [ebx] mov eax, [ebx+3] AT&T movl $1, %eax movl $0xff, %ebx int $0x80 movl (%ebx), %eax movl 3(%ebx), %eax
Diretiva de dados
Diretivas de dados so utilizadas para denir espao na memria Existem duas diretivas de dados Diretivas de dados Descrio RESX Dene espao para memria DX Dene espao para memria e inicializa a rea O smbolo X deve ser trocado pelo tipo de dado desejado
Diretiva de dados
Tipos de dado byte word double word quad word ten bytes Letra B W D Q T Tamanho(bits) 8 16 32 64 80
Registradores
A arquitetura 8086 possui 14 registradores de 16 bits, sendo: 4 de propsito geral 5 de offset para acesso a memria 4 de segmento para acesso a memria 1 registrador de ags
Registradores
Registradores de propsito geral Registrador AX BX CX DX Propsito geral Acumulador Base Contador Dados
Registradores
Registradores de offset para acesso a memria Registrador IP SP BP SI DI Offset Instruction pointer Stack pointer Base pointer Source Index Destination Index
Registradores
Registradores de segmento para acesso a memria Registrador CS SS DS ES Segmento Code segment Stack Segment Data Segment Extra segment
Registradores
Registrador de ags Flags OF DF IF TF SF ZF AF PF CF Descrio Overow ag Direction ag Interrupt ag Trap ag Sign ag Zero ag Auniliary ag Parity ag Carry ag
x86 Assembly Course p.22/26
Registradores
A arquitetura 80386 possui registradores de 32 bits que extendem os registradores anteriores mantendo compatibilidade Os registradores de 32 bits possuem o prefxo E
AX 16b
No acessvel 16b AH 8b AL 8b
EAX 32b
Instrues
Instruo mov add sub push pop jmp int call Descrio Move dados Adio aritmtica Subtrao aritmtica Empilha Desempilha Salto incondicional Interrupo Chamada
Interrupes
So chamadas de funes externas A tabela interrupes se encontram no incio da memria, e chamada ISR(Interrupt Service Routine) A ISR possui o endereo das funes de cada interrupo, contendo o segmento e offset de cada uma delas Quando o comando: int 21h executado, estamos na verdade saltando para o endereo de memria que contm o cdigo da interrupo
Interrupes da BIOS
Interrupo Descrio 10h Escreve caracter 13h Reseta drive L do disco Escreve no disco 16h L caracter 18h Chama Basic 19h Reseta
Sistema de arquivos
Quando trabalhamos com arquivos, necessitamos de um mecanismo capaz de manipular os mesmos, chamado sistema de arquivos O sistema de arquivos deve disponibilizar as operaes necessrias para manipulao arquivos, como: Listar Leitura Gravao
Sistema FAT12
FAT12 um sistema de arquivos TODO Na FAT12 existe um ponteiro para o primeiro bloco de cada arquivo e para cada bloco lido existe, um ponteiro para o prximo bloco O sistema FAT12 formado por: Duas cpias da tabela de alocao de arquivos(FAT) Tabela de entrada de arquivos Dados dos arquivos
Estrutura da FAT12
Dos 2.880 setores disponveis, 1 utilizado para boot, 32 para cabealhos, e o resto para dados Setor 0 1-9 10-18 19-32 33-2879 Utilizao Boot sector FAT Copy 1 FAT Copy 2 Root Directory Data Espao 512b 4,5kb 4,5kb 7kb 1,39mb
Endereamento da FAT12
Cada entrada da tabela FAT possui 12 bits Com isso temos 212 = 4096(4kb) possveis endereos de setor Na FAT12 cada setor possi 512 bytes O que disponibiliza um endereamento total de 2mb
Entradas da FAT
Cada entrada da FAT12 possui 12 bits Por isso para acessar cada entrada necessrio ler dois bytes, mas apenas 1 byte e meio utilizado Por causa disso preciso um tratamento especial para as entradas na FAT
Entradas da FAT
Trecho da FAT exibida em hexadecimal, cada caracter representa um nibble de 4 bits
Entradas de arquivo
Para localizarmos os arquivos em disco necessrio consultar a tabela de arquivos Byte 0-7 8-10 11 12-21 22-23 24-25 26-27 28-31 Descrio Nome do arquivo Extenso Atributos Reservados Hora Data Endereo do primeiro cluster Tamanho do arquivo
x86 Assembly CoursePart III p.11/18
Modos de endereamento
O tipo de endereamento utilizado pela FAT12 diferente do utilizado pela controladora do disco Basicamente existem dois tipos de endereamento CHS - Cylinder, Head, Sector LBA - Logical block address A controladora do disco trabalha com o endereamento CHS
Modos de endereamento
A BIOS possui interrupes para trabalhar com LBA, no entando o cdigo utilizado grande, por isso geralmente utilizado o endereamento CHS no boot Para acessarmos o endereo do arquivo necessrio ento fazer uma converso entre os tipos de arquivo, como ilustra o desenho abaixo FAT12 LBA CHS
Testando o driver
Crie vrios arquivos com 512 caracteres, cada um formado por uma sequncia do mesmo caracter aaaaaaaa bbbbbbbb Execute a operao de leitura e em seguida de exibio para cada um dos arquivos e veja se o resultado est correto Concatene os arquivos em grupos de 3, tamanho 1.5kb, e execute a operao de leitura e exibio novamente Se aps vrios testes tudo ocorreu bem, seu sistema de arquivos est funcionando corretamente
x86 Assembly CoursePart III p.17/18
Informaes adicionais
Google - www.google.com Um dos seus melhores amigos, no deixe de perguntar para ele! =D Intel - www.intel.com Disponibiliza manual sobre a arquitetura x86, alm de vrias ferramentas para desenvolvedores