Sistemas de Computação

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

Arquitetura e Organização de Computadores

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

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

A linguagem ASSEMBLY

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

Antes de deixarmos o hardware (1) Nível da Arquitetura do Conjunto das Instruções

Nível da Arquitetura do Conjunto de Instruções. Ronaldo de Freitas Zampolo

A arquitectura IA32. A arquitectura de um processador é caracterizada pelo conjunto de atributos que são visíveis ao programador.

Assembly x86. Hugo Bessa - hrba Paulo Serra Filho ptvsf

Linguagem de Montagem Assembly

Organização de Computadores 1

Programando em Assembly

MATA49 Programação de Software Básico

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

Computadores e Programação (DCC/UFRJ)

Universidade Federal da Bahia Instituto de Matemática Departamento de Ciência da Computação MATA49 Programação de software básico Arquitetura Intel

Sistemas de Microprocessadores I Lista de exercícios (questões de provas de semestre anteriores)

EEL Microprocessadores

Linguagens de Programação Classificação

Disciplina: Arquitetura de Computadores

Registradores. Os processadores possuem espaços específicos onde são guardados valores, os chamados registradores.

Introdução a Engenharia Reversa

Informática I. Aula 9. Aula 9-17/05/2006 1

MICROPROCESSADORES. Aula 10

Organização Básica de Computadores. Organização Básica de Computadores. Organização Básica de Computadores. Organização Básica de Computadores

OTermo Assembly significa montagem, ou seja, linguagem

Arquitetura e Organização de Computadores

Microprocessadores I ELE Aula 7 Conjunto de Instruções do Microprocessador 8085 Desvios

ORGANIZAÇÃO DE COMPUTADORES O PROCESSADOR E SEUS COMPONENTES

FORMATO DO PROGRAMA FONTE

José Augusto Fabri. Assembly Básico

Arquitetura do 8086/8088

Fluxo de Execução em Assembly

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

Nível do Conjunto de Instruções Prof. Edson Pedro Ferlin

Instruções. Maicon A. Sartin

14/3/2016. Prof. Evandro L. L. Rodrigues

Introdução à Computação: Arquitetura von Neumann

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE DE CONTROLE E A INTERPRETAÇÃO DE INSTRUÇÕES. Prof. Dr. Daniel Caetano

Unidade de Controle. UC - Introdução

SEL-433 APLICAÇÕES DE MICROPROCESSADORES I

Arquitetura do SET de instruções Instruction SET. CISC vs RISC. What s assembly as to do with it?

William Stallings Arquitetura e Organização de Computadores 8 a Edição

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE DE CONTROLE E A INTERPRETAÇÃO DE INSTRUÇÕES. Prof. Dr. Daniel Caetano

EXEMPLO DE ARQUITETURAS REAIS INTEL 8086 AULA 07 Arquitetura de Computadores Gil Eduardo de Andrade

Aula 14 Funcionamento de Processadores (Visão específica)

Prof. Adilson Gonzaga

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA

Introdução ao Assembly

PARTE II - CONJUNTO DE INSTRUÇÕES ARQUITETURA DE COMPUTADORES ANTONIO RAMOS DE CARVALHO JÚNIOR

NEANDERWIN. Algumas características do processador Neander são:

7. A pilha e subrotinas

x86 arquitetura e instruções básicas

ORGANIZAÇÃO DE COMPUTADORES

Revisão da Linguagem C Prof. Evandro L. L. Rodrigues

Microcontrolador Assembly UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk

Arquiteturas RISC e CISC. Adão de Melo Neto

ULA. Combina uma variedade de operações lógicas e matemáticas dentro de uma única unidade.

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I

COMPUTADORES COM UM CONJUNTO REDUZIDO DE INSTRUÇÕES. Adão de Melo Neto

Memória. Função: armazenamento de dados e instruções h FFFF FFFE h FFFF FFFF h byte.

Universidade Federal de Campina Grande Unidade Acadêmica de Sistemas e Computação Curso de Bacharelado em Ciência da Computação.

Classificação das linguagens de programação

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

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA

GFM015 Introdução à Computação

Arquitetura de Computadores Conceitos Fundamentais. Graduação em Engenharia Elétrica - UFPR Prof. Carlos Marcelo Pedroso 2016

Introdução. Programando em Assembly. Primeiro Exemplo (2) Primeiro Exemplo (1) Linguagem Assembly do 8086/8088

Exceções no Fluxo de Execução: Interrupções e Traps

Organização Funcional

Microprocessadores CPU. Unidade de Controle. Prof. Henrique

SSC510 Arquitetura de Computadores 1ª AULA

Transcrição:

Sistemas de Computação Introdução a programação Assembly Haroldo Gambini Santos Universidade Federal de Ouro Preto - UFOP 5 de novembro de 2009 Haroldo Gambini Santos Sistemas de Computação 1/30

Assembly Porque não C (ou outra linguagem de alto nível)? C é mais simples Mais próximo da linguagem natural (inglês, no caso) C é portável Um mesmo programa pode rodar nos SOs Linux ou Windows, usando processadores Power PC ou Intel Haroldo Gambini Santos Sistemas de Computação 2/30

Assembly Porque programar em Assembly Código em Assembly pode ser mais rápido e menor do que código gerado por compiladores Assembly permite o acesso direto a recursos do hardware, o que pode ser difícil em linguagens de alto nível Programar em Assembly permite que se ganhe um conhecimento profundo de como os computadores funcionam Haroldo Gambini Santos Sistemas de Computação 3/30

Assembly Porque programar em Assembly Código em Assembly pode ser mais rápido e menor do que código gerado por compiladores Assembly permite o acesso direto a recursos do hardware, o que pode ser difícil em linguagens de alto nível Programar em Assembly permite que se ganhe um conhecimento profundo de como os computadores funcionam Conclusão Saber Assembly é muito útil mesmo que nunca se programe diretamente nele! Haroldo Gambini Santos Sistemas de Computação 3/30

O Assembly do 80386 Características Primeiro processador da Intel de 32 bits com recursos modernos: Modo protegido de memória (nas versões antigas, como o 8086 havia o modo real, onde cada programa poderia bagunçar livremente a memória de algum outro) Todos os sistemas operacionais modernos operam rodando sobre o modo protegido Multitarefa Novos chips da Intel mantém compatibilidade: Pentium, Core2Duo, Atom,... Existem diversas ferramentas livres na Internet que facilitam o desenvolvimento desse tipo de código Haroldo Gambini Santos Sistemas de Computação 4/30

Assembly com o NASM Netwide Assembler: NASM Software livre Portável: roda em vários sistemas operacionais Windows e Linux Simples de usar e com suporte a macros Haroldo Gambini Santos Sistemas de Computação 5/30

Registradores 80386 EAX ESI CS FS EBX EDI DS GS ECX EBP ES SS EDX EIP ESP EFLAGS 16 bits 16 bits 32 bits 32 bits Haroldo Gambini Santos Sistemas de Computação 6/30

Registradores pré-80386 EAX AX ESI SI CS FS EBX BX EDI DI DS GS ECX CX EBP BP ES SS EDX EIP DX IP ESP SP EFLAGS FLAGS 16 bits 16 bits 32 bits 32 bits Haroldo Gambini Santos Sistemas de Computação 7/30

Registradores 80386 Registradores de Propósito Geral - Uso Típico EAX : Registrador acumulador. Usado para endereçar E/S, aritimética, etc. EBX : Registrador base. Usado como ponteiro para acesso à memória, interrupções. ECX : Registrador contador. Usado como contador em laços, interrupções. EDX : Registrador de dados. Usado para endereçar E/S, aritmética, interrupções. Haroldo Gambini Santos Sistemas de Computação 8/30

Registradores 80386 Registradores de Endereço EIP Ponteiro de índice: guarda um índice indicando a próxima instrução a ser executada. EBP Endereço base da pilha. ESP Endereço do topo da pilha. EDI Índice do destino - na operação de cópia de cadeias de caracteres. ESI Índice da fonte - na operação de cópia de cadeias de caracteres. Haroldo Gambini Santos Sistemas de Computação 9/30

Registradores 80386 Registador EFLAG Cada um de seus 32 bits controla ou exibe algum estado nal/ intermediário de uma operação. Exemplo: 6 Zero Flag: indica se o resultado de uma operação foi zero. 10 Direction Flag: usado no processamento de strings, indica quando o processamento deve ser feito do início para o m ou o contrário. 11 Overow Flag: usado por operações aritméticas que podem gerar overow. Haroldo Gambini Santos Sistemas de Computação 10/30

Palavra - word Palavra Registradores de 32 bits, mas palavra no Assembly do 80386 tem 16 bits. unidade de memória word double word quad word paragraph tam. em bytes 2 bytes 4 bytes 8 bytes 16 bytes Haroldo Gambini Santos Sistemas de Computação 11/30

Tipos de Operandos registrador o operando refere-se diretamente ao conteúdo de um registrador da CPU; memória refere-se a um dado em memória - posição constante ou informada em um registrador; imediato valores xos expressos diretamente na instrução implicado valor não mostrado diretamente. ex.: operação de incremento Haroldo Gambini Santos Sistemas de Computação 12/30

Instruções Básicas mov dest, src copia em dest o src conteúdo de src. Ex.: mov eax, 3; grava 3 no registrador eax mov ebx, eax; grava o conteúdo de eax em ebx add adiciona inteiros. Ex.: add eax, 4; eax = eax + 4 add ebx, eax; ebx = ebx + eax sub : mesmo formato de add inc : ex.: inc eax; eax++ dec : ex.: dec eax; eax-- Haroldo Gambini Santos Sistemas de Computação 13/30

Diretivas %dene dene um valor constante a ser usado no programa: %define SIZE 100 mov eax SIZE Haroldo Gambini Santos Sistemas de Computação 14/30

Diretivas de Dados Reservam de espaços de memória. Os espaços são marcados com rótulos (labels): L1 db 0 ; byte rotulado L1 com valor inicial 0 L2 dw 1000 ; palavra rotulada L2 com valor inicial 1000 L3 db 110101b ; byte inicializado para 110101 em binário L4 db 12h ; byte inicializado to 12 em hexadecimal L5 db 17o ; byte inicializado to 17 em octal L6 dd 1A92h ; double word inicializado 1A92 em hexadecimal L7 resb 1 ; 1 byte não inicializado L8 db "A" ; byte inicializado o código da letra A (65) L9 db 0, 1, 2, 3 ; define 4 bytes L10 db "w", "o", "r", 'd', 0 ; uma string compatível com C L11 db 'word', 0 ; mesmo que L10 Haroldo Gambini Santos Sistemas de Computação 15/30

Rótulos (labels) Endereço: 0 1 2 3 4 5 10111100 11010110 00001011 00000001 00111010 11110100 byte L1 Rótulos Reservam espaço em algum lugar na memória e opcionalmente inicializam seu conteúdo No decorrer do programa o mesmo espaço de memória é facilmente acessado através de seu rótulo Exemplo: L1 db 1 No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado com 1 Haroldo Gambini Santos Sistemas de Computação 16/30

Rótulos (labels) Endereço: 0 1 2 3 4 5 10111100 11010110 00001011 00000001 00111010 11110100 byte L1 Usando rótulos Similar ao conceito de ponteiros em C Pode-se trabalhar com o endereço do rótulo ou com o seu conteúdo mov eax, L1 Registrador eax recebe 3 mov eax, [L1] Registrador eax recebe 1 Haroldo Gambini Santos Sistemas de Computação 17/30

Rótulos de mais de um byte L1 dd 35 O tipo dd refere-se a um double word do 80386 (32 bits), bom para armazenar inteiros mov [L1], 15 Não funciona! O assembler não sabe se deve trabalhar com byte, palavra ou palavra dupla, por exemplo Correto: mov dword [L1], 15 Haroldo Gambini Santos Sistemas de Computação 18/30

Tipos de Dados res* e d* - suxos: B byte W word D double word Q quad word T ten bytes Haroldo Gambini Santos Sistemas de Computação 19/30

Estrutura Haroldo Gambini Santos Sistemas de Computação 20/30

Comandos de Entrada e Saída Usualmente dependente do sistema operacional. Solução mais portável: asm_io.inc Biblioteca com comandos simplicados: Linux: http://www.drpaulcarter.com/pcasm/linux-ex.zip Windows: http://www.drpaulcarter.com/pcasm/ms-ex.zip Haroldo Gambini Santos Sistemas de Computação 21/30

Imprimindo %include "asm_io.inc" segment.data prompt1 db "Digite um numero: ", 0 segment.text... mov eax, prompt1 call print_string... Haroldo Gambini Santos Sistemas de Computação 22/30

Lendo um Inteiro %include "asm_io.inc" segment.bss x resd 1 segment.text... call read_int mov [x], eax... Haroldo Gambini Santos Sistemas de Computação 23/30

Desvios Rótulos de Código Marcam determinada posição no código. Ex.: mov ebx, [y] mov eax, [x] call print_string... Instrução Jump: JMP jmp rotulo_de_codigo Faz com a próxima instrução executada seja aquela situada imediatamente após o rótulo rotulo_de_codigo. Haroldo Gambini Santos Sistemas de Computação 24/30

Repetição Instrução LOOP Formato: LOOP posição_para_saltar Verica o valor do registrador ECX, caso o mesmo seja diferente de zero pula para a parte do código rotulada em posição_para_saltar. Haroldo Gambini Santos Sistemas de Computação 25/30

Repetição Equivalente em C for (int i=0 ; (i<10) ; i++ ) printf("%d\n", i); Assembly %include "asm_io.inc" segment.text... mov [ECX] 10 inicio: mov eax, ecx call print_int loop inicio... Haroldo Gambini Santos Sistemas de Computação 26/30

Testes condicionais Executando o if em assembly Duas partes: 1 Executa uma comparação (instrução CMP) Altera valor do registrador EFLAGS 2 Avalia resultado (instruções JE, JNE,...) Haroldo Gambini Santos Sistemas de Computação 27/30

Testes condicionais Assembly Equivalente em C if ( x==0 ) comandoa; else comandob;... mov eax, [x] cmp eax, 0 je posicaoa jmp posicaob posicaoa: comandoa jmp depoisteste posicaob: comandob jmp depoisteste depoisteste:... Haroldo Gambini Santos Sistemas de Computação 28/30

Desvios Incondicional Haroldo Gambini Santos Sistemas de Computação 29/30

Referências PC Assembly Language: http://www.drpaulcarter.com/pcasm/ (livro em PDF) The Netwide Assembler: http://www.nasm.us/ Writing a Useful Program with NASM: http://leto.net/writing/nasm.php GNU Compiler Collection: http://gcc.gnu.org/ MingW: Minimalist GNU for Windows http://www.mingw.org/ Haroldo Gambini Santos Sistemas de Computação 30/30