x86 Assembly Mini-Course



Documentos relacionados
Introdução à Arquitetura e Linguagem Assembly de Processadores IA-32

Projeto 1 - Bootloader

Software Básico. Conceito de Linguagem de Máquina e Montagem: introdução ao Assembly. Prof. MSc. Hugo Vieira L. Souza

Linguagem de Montagem 2. Operações e Operandos

Unidade: Unidade Lógica e Aritmética e Registradores. Unidade I:

Linguagem de Montagem

1. SINTAXE DA LINGUAGEM ASSEMBLY

Laboratório de Hardware

Arquitetura de Computadores. Prof. João Bosco Jr.

Rodrigo Rubira Branco

CPU. CPU Unidade Central de Processamento. Função: leitura, escrita e processamento de dados

ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM

Programação de Computadores. Turma CI-180-B. Josiney de Souza.

Organização de Computadores Como a informação é processada?

LABORATÓRIO DE LINGUAGEM DE MONTAGEM INTERRUPÇÕES DO DOS E DA BIOS

Sistemas Operacionais. Prof. André Y. Kusumoto

SOP - TADS Sistemas de Arquivos Cap 4 Tanenmbaum

5.2 - Armazenamento em Disco

Laboratório de Sistemas Processadores e Periféricos Lista de comandos de Assembly

Gerenciador de Boot Simples

Gerência do Sistema de Arquivos. Adão de Melo Neto

VIII. VARIÁVEIS. Tabela I ARQUITETURA DA MEMÓRIA. 0x0000 0x34 0x0001 0xB0 0x0002 0x23. 0xFFFF 0x00

Algoritmos e Programação Aula 01 Introdução a Computação

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Capítulo 6. Gerenciamento de Arquivos. 6.1 Arquivos 6.2 Diretórios 6.3 Implementação (6.3.1 a 6.3.6) 6.4 Exemplos

Universidade do Algarve Faculdade de Ciências e Tecnologia Área Departamental de Engenharia Electrónica e Computação

O TEMPO DE ACESSO A UM DADO EM DISCOS MAGNÉTICOS É FORMADO POR TRÊS TEMPOS SIGNIFICATIVOS COMBINADOS:

Algoritmos DCC 119. Introdução e Conceitos Básicos

Os 3 principais tipos de Instruções (INSTRUTION SET) dos up são:

Introdução à Computação: Sistemas de Computação

Uso de interrupções de BIOS/DOS

2 - Processadores. CEFET-RS Curso de Eletrônica. Organização de Computadores. Profs. Roberta Nobre & Sandro Silva

Roteiro. MC-102 Aula 01. Hardware e dispositivos. O que é um computador? Primeiro Semestre de A linguagem C

MATA49 Programação de Software Básico

CRIANDO UM SISTEMA OPERACIONAL BÁSICO Por: Fernando Birck aka Fergo

Organização de Computadores 1

Ambiente de desenvolvimento de Programação Assembly MCU 8051 IDE

8. Instruções de multiplicação e divisão

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Aula 14: Instruções e Seus Tipos

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

Sistemas de Computação

Introdução à estrutura e funcionamento de um Sistema Informático

Evolução dos Processadores

Linguagem de Montagem e Assembly. André Luiz da Costa Carvalho

Linguagem de Montagem

Edeyson Andrade Gomes

INT 5h - Print screen Modo Resolução Caract. INT 10h - Vídeo INT 10h - Vídeo

MC404 - Organização de Computadores. e Linguagem de Montagem Instituto de Computação. Universidade Estadual de Campinas

Descrição do Produto. Altus S. A. 1

Linguagens de Programação

Programação ao nível da máquina. Operações lógicas e aritméticas

A linguagem ASSEMBLY

Acetatos de apoio às aulas teóricas

Sistemas de Arquivos NTFS, FAT16, FAT32, EXT2 e EXT3

Instalar uma versão do Ubuntu de 32 bits ou de 64 bits?

Sistemas de Computação para Controle e Automação CIC132. Assembly. Assembly. Notas. Décima quarta aula: Introdução a programação Assembly

Aula Prática 1 Introdução à programação Assembly no DOS usando TASM Bruno Silva bs@cin.ufpe.br lauro Moura lauromoura@gmail.com

ARQUITECTURA DE COMPUTADORES CAPÍTULO II AULA X

No. de bits. O primeiro IBM PC foi construído com o 8088 (versão de 8 bits do 8086).

AULA 16 - Sistema de Arquivos

Capítulo 7 Nível da Linguagem Assembly

IDENTIFICAÇÃO MANUTENÇÃO

Sistemas de Arquivos. Arquivos e Diretórios Características e Implementação Tadeu Ferreira Oliveira - tadeu.ferreira@ifrn.edu.br

Entradas/Saídas. Programação por espera activa Programação por interrupções

Sistemas de Arquivos. André Luiz da Costa Carvalho

Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger

Estrutura de Dados Básica

Estrutura Interna do KernelUNIX Sistema O. Estrutura Interna de Arquivos (1) Estrutura Seqüência. User application. Standard Unix libraries

1. Os caracteres (p.ex: a, A, 8,!, +, etc) são representados no computador através da codificação ASCII (American Standard Code for

Curso de Instalação e Gestão de Redes Informáticas

10/02/2015. Introdução. Podemos classificar os tipos de dados a serem processados em dados e instruções Dados: Algoritmos e Lógica de Programação

EEL Microprocessadores

REPRESENTAÇÃO DE DADOS EM SISTEMAS DE COMPUTAÇÃO AULA 03 Arquitetura de Computadores Gil Eduardo de Andrade

implementação Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa Fernando Ramos, Nuno Neves, Sistemas Operativos,

Organização de Computadores 1

ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM

Unidade 11: A Unidade de Controle Prof. Daniel Caetano

CONCEITOS BÁSICOS PARA A CONSTRUÇÃO DE ALGORITMOS PARA COMPUTADORES. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com

E/S CPU. Memória (Instruções e dados) 2 PARADIGMA IMPERATIVO. Instruções e dados. Resultados das operações. Unidade lógica e aritmética

28/3/2011. Família Intel 80x86. Arquitetura dos Processadores Intel 80x86

Introdução à Arquitetura de Computadores. Renan Manola Introdução ao Computador 2010/01

Data types. In C: char. short. int/long. double/long long AC 2017/2018. Pedro Serra / Sérgio Ferreira

LINEAR EQUIPAMENTOS RUA SÃO JORGE, 267/269 - TELEFONE: (11) SÃO CAETANO DO SUL - SP - CEP:

DISPOSITIVOS DE BLOCO. Professor: João Paulo de Brito Gonçalves

Acadêmicos: Luís Fernando Martins Nagata Gustavo Rezende Vinícius Rezende Santos

ARQUITETURA DE COMPUTADORES

5.1 Sistemas de Arquivos

Conjunto de instruções e modos de. aula 4. Profa. Débora Matos

ULA Sinais de Controle enviados pela UC

Nível da Arquitetura do Conjunto das Instruções

John von Neumann(Budapeste. Desenvolvido no IAS(Institute of Advanced Studies-Princeton\USA). Iniciado em1946 e finalizado em 1952

Podium View TM 2.0 Software de Imagem para o Apresentador Virtual Manual do Utilizador - Portugués

Arquitetura do 8086/8088

Figure 2 - Nós folhas de uma árvore binária representando caracteres ASCII

Principais códigos utilizados. Codificação. Código binário puro. Codificação binária. Codificação Binária. Código Binário puro e suas variantes

Organização de Computadores Software

Sistemas Operacionais

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 1

Prof. Bruno Calegaro

Transcrição:

x86 Assembly Mini-Course Part 1 Bruno P. Evangelista bpevangelista@gmail.com

Introdução Assembly é uma linguagem de programação de baixo nível em formato mnemonico Ela possibilita trabalhar diretamente com o processador da máquina, executando operações que muitas vezes não são possíveis em linguagens de alto nível x86 Assembly Course p.1/26

Porque utilizar? Muito utilizado no desenvolvimento de aplicativos que exigem resposta em tempo real Tirar proveito de conjuntos de instruções específicas dos 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 um desempenho maior em partes críticas do código Nesses techos devem ser utilizados algoritmos otimizados, com baixa ordem de complexidade Mesmo com o uso de um algoritmo adequado, pode não ser possível atingir o tempo de resposta necessário Nesses casos, podemos tentar melhorar a performance utilizando otimizações de baixo nível x86 Assembly Course p.3/26

Problemas Otimizações de baixo nível não podem ser programadas em linguagens de alto nível como C/C++ ou Java Quando fazemos otimizações de baixo nível, estamos confiando mais em nós mesmo, que no compilador para fazer a geração de código Muitas vezes otimizações de baixo nível não são a solução para gargalos no desempenho, sendo necessário trocar a ordem de complexidade do algoritmo utilizado x86 Assembly Course p.4/26

Ferramentas utilizadas Principais: Editor de código - Não existem IDEs com grandes recursos, devido as limitações da linguagem Montador Utilitários: Depurador Editor hexadecimal x86 Assembly Course p.5/26

Montadores Um dos primos do compilador O papel do montador é transformar os mnemonicos em código de máquina Existem vários montadores para a linguagem Assembly: MASM - Microsoft Assembler NASM - Netwide Assembler (Versões para diferentes plataformas) TASM - Turbo Assembler (Borland) x86 Assembly Course p.6/26

Depurador Ferramenta extremamente importante para encontrar erros cometidos durante a programação Erros cometidos durante a programação geralmente travam a máquina, não sendo possível detecta-lo com facilidade Um erro cometido na 10 linha de código geralmente só é percebido centenas de linhas para frente, longe de onde o erro foi cometido x86 Assembly Course p.7/26

Editor hexadecimal Ferramente importante para trabalhar com arquivos binários Utilizada para editar e modificar informações internas de arquivos binários x86 Assembly Course p.8/26

Inlining Assembly Algumas linguagens possuem mecanismos para permitir a inserção de códigos assembly dentro linguagem Com isso podemos ter maior controle do noso aplicativo, não precisando manter modulos externos em Assembly que devam ser linkados juntos com a aplicação x86 Assembly Course p.9/26

Inlining Assembly Exemplo do uso de código Assembly na linguagem C/C++ asm() { pusha xor ax, ax popa } x86 Assembly Course p.10/26

Arquitetura 8086 CPU Memória Registradores de 16 bits Memória limitada a 1MB Dividida em segmentos 64kb Somente modo real Bytes na memória não possuem endereço único Organizaçã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: 2 20 = 1MB x86 Assembly Course p.12/26

Arquitetura 8086 Mapeamento da memória 0x00000-0x003FF 0x00400-0x005FF 0x00600-0x9FFFF 0xA0000-0xAFFFF 0xB0000-0xB7FFF 0xB8000-0xBFFFF 0xC0000-0xDFFFF 0xE0000-0xFDFFF 0xFE000-0xFFFFF Tabela de interrupções (ISR) Área de BIOS (BDA) Área livre Memória de vídeo EGA/VGA Memória de texto monocromático Memória de vídeo CGA ROM instalada ROM fixa ROM da BIOS x86 Assembly Course p.13/26

Arquitetura 80386 CPU Memória Registradores de 32 bits Memória limitada a 4GB Modo real e protegido Bytes na memória possuem endereço único Organização little endian x86 Assembly Course p.14/26

Sintaxes de comando Intel AT&T mov eax, 1 movl $1, %eax mov ebx, 0ffh movl $0xff, %ebx int 80h int $0x80 mov eax, [ebx] movl (%ebx), %eax mov 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ço na memória Existem duas diretivas de dados Diretivas de dados RESX DX Descrição Define espaço para memória Define espaço para memória e inicializa a área O símbolo X deve ser trocado pelo tipo de dado desejado x86 Assembly Course p.16/26

Diretiva de dados Tipos de dado Letra Tamanho(bits) byte B 8 word W 16 double word D 32 quad word Q 64 ten bytes T 80 x86 Assembly Course p.17/26

Registradores A arquitetura 8086 possui 14 registradores de 16 bits, sendo: 4 de propósito geral 5 de offset para acesso a memória 4 de segmento para acesso a memória 1 registrador de flags x86 Assembly Course p.18/26

Registradores Registradores de propósito geral Registrador AX BX CX DX Propósito geral Acumulador Base Contador Dados x86 Assembly Course p.19/26

Registradores Registradores de offset para acesso a memória Registrador IP SP BP SI DI Offset Instruction pointer Stack pointer Base pointer Source Index Destination Index x86 Assembly Course p.20/26

Registradores Registradores de segmento para acesso a memória Registrador CS SS DS ES Segmento Code segment Stack Segment Data Segment Extra segment x86 Assembly Course p.21/26

Registradores Registrador de flags Flags OF DF IF TF SF ZF AF PF CF Descrição Overflow flag Direction flag Interrupt flag Trap flag Sign flag Zero flag Auniliary flag Parity flag Carry flag 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 prefíxo E AX 16b { }} { Não acessível 16b AH 8b AL 8b } {{ } EAX 32b x86 Assembly Course p.23/26

Instruções Instrução mov add sub push pop jmp int call Descrição Move dados Adição aritmética Subtração aritmética Empilha Desempilha Salto incondicional Interrupção 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 da memória, e é chamada ISR(Interrupt Service Routine) A ISR possui o endereço das funções de cada interrupção, contendo o segmento e offset de cada uma delas Quando o comando: int 21h é executado, estamos na verdade saltando para o endereço de memória que contêm o código da interrupção x86 Assembly Course p.25/26

Interrupções da BIOS Interrupção 10h 13h 16h 18h 19h Descrição Escreve caracter Reseta drive Lê do disco Escreve no disco Lê caracter Chama Basic Reseta x86 Assembly Course p.26/26

x86 Assembly Mini-Course Part 3 Bruno P. Evangelista bpevangelista@gmail.com

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 operações necessárias para manipulação arquivos, como: Listar Leitura Gravaçã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, NTFS VFAT, EXT3, EXT3, REISER Os sistemas de arquivos são desenvolvidos baseado no dispositivo que será utilizado Alguns formatos não são adequados para dispositivos de pequenos porte, pois utilizam muito espaç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 facilmente criado, no entanto, não isso demanda tempo Ao utilizarmos um sistema já existente, podemos fazer uso das diversas ferramentas e recursos disponí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 bloco de cada arquivo e para cada bloco lido existe, um ponteiro para o próximo bloco O sistema FAT12 é formado por: Duas cópias da tabela de alocação de arquivos(fat) Tabela de entrada de arquivos Dados dos arquivos x86 Assembly CoursePart III p.4/18

Estrutura da FAT12 Dos 2.880 setores disponíveis, 1 é utilizado para boot, 32 para cabeçalhos, e o resto para dados Setor Utilização Espaço 0 Boot sector 512b 1-9 FAT Copy 1 4,5kb 10-18 FAT Copy 2 4,5kb 19-32 Root Directory 7kb 33-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 guardar as configurações do dispositivo e verificar se o sistema é válido OSID db EVANG_OS bytespersector dw 0x0200 sectorspercluster db 0x01 leadingsectors dw 0x0001 numfat db 0x02 maxrootdirentries dw 0x00E0 totalsectors dw 0x0B40 mediatype db 0x0F0 x86 Assembly CoursePart III p.6/18

Cabeçalho do boot para FAT12 sectorsperfat dw 0x0009 sectorspertrack dw 0x0012 numberofheads dw 0x0002 hiddensectors dd 0x00000000 totalsectors2 dd 0x00000000 drivenumber db 0x00 reserved db 0x00 bootsignaure db 0x29 volumeid dd 0x26185454 volumelabel 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 2 12 = 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 ler dois bytes, mas apenas 1 byte e meio é utilizado Por causa disso é preciso um tratamento especial para as entradas na FAT x86 Assembly CoursePart III p.9/18

Entradas da FAT Trecho da FAT exibida em hexadecimal, cada caracter 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ário consultar a tabela de arquivos Byte Descrição 0-7 Nome do arquivo 8-10 Extensão 11 Atributos 12-21 Reservados 22-23 Hora 24-25 Data 26-27 Endereço do primeiro cluster 28-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çamento CHS - Cylinder, Head, Sector LBA - Logical block address A controladora do disco trabalha com o endereç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 isso geralmente é utilizado o endereçamento CHS no boot Para acessarmos o endereço do arquivo é necessário então fazer uma conversão entre os tipos de 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 primeiros endereç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 basta somar 31 ao número do bloco x86 Assembly CoursePart III p.15/18

Funções básicas do driver FAT12 START Carrega todos os cabeçalhos do sistema para a memória, em uma área segura FAT12 READ Carrega um arquivo pelo nome, e grava em uma área disponível da memória LBA READ Carrega 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 um formado por uma sequência do mesmo caracter aaaaaaaa bbbbbbbb Execute a operação de leitura e em seguida de exibição 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 operação de leitura e exibição novamente Se após vários testes tudo ocorreu bem, seu sistema de arquivos está funcionando corretamente x86 Assembly CoursePart III p.17/18

Informações adicionais Google - www.google.com Um dos seus melhores amigos, não deixe de perguntar para ele! =D Intel - www.intel.com Disponibiliza manual sobre a arquitetura x86, além de várias ferramentas para desenvolvedores x86 Assembly CoursePart III p.18/18