A linguagem ASSEMBLY

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

Sistemas de Computação

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

Assembly x86. Hugo Bessa - hrba Paulo Serra Filho ptvsf

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

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

Arquitetura e Organização de Computadores

Intel x AT&T - recapitulação

Professor: Dr. Rogério Rodrigues de Vargas.

Linguagem de Montagem Assembly

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

Programando em Assembly

Organização de Computadores

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

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

Anderson L. S. Moreira

7. A pilha e subrotinas

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

Organização de Computadores 1

Programação de Computadores IV. Introdução a Linguagens de Programação Simone Martins SLIDES CEDIDOS POR BRUNO MARQUES 1

José Augusto Fabri. Assembly Básico

Disciplina: Arquitetura de Computadores

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

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

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

ORGANIZAÇÃO DE COMPUTADORES O PROCESSADOR E SEUS COMPONENTES

MATA49 Programação de Software Básico

OTermo Assembly significa montagem, ou seja, linguagem

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

EEL Microprocessadores

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

Introdução ao Assembly

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

UNIDADE CENTRAL DE PROCESSAMENTO FELIPE G. TORRES

Programação ao nível da máquina

Introdução a Engenharia Reversa

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

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

Aula 4 Conjunto de Instruções do Microprocessador 8085 Grupo Aritmético

Microprocessadores I ELE Conjunto de Instruções do Microprocessador 8085 Aula 9 - PILHA E SUBROTINAS -

Prof. Adilson Gonzaga

Computadores e Programação (DCC/UFRJ)

Assembly na arquitetura IA-32 com NASM no Linux

Arquitetura e Organização de Computadores

Computadores de Programação (DCC/UFRJ)

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

Programação Estruturada

Universidade de São Paulo

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

UNIDADE CENTRAL DE PROCESSAMENTO FELIPE G. TORRES

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

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

Universidade de São Paulo

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

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

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

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

Prof. Antonio Almeida de Barros Jr. Prof. Antonio Almeida de Barros Junior

Procedimentos Chamada de Funções e Parâmetros

Ordem de Bytes: Big Endian e Little Endian

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

Instruções. Maicon A. Sartin

Procedimentos Chamada de Funções e Parâmetros

MICROPROCESSADORES E MICROCONTROLADORES. PROVA 1 - Solução da Versão 1

Informática I. Aula 9. Aula 9-27/09/2006 1

SSC510 Arquitetura de Computadores 1ª AULA

SEL-433 APLICAÇÕES DE MICROPROCESSADORES I

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I

Sistemas Operacionais. Rodrigo Rubira Branco

CONJUNTO DE INSTRUÇÕES

Microcontrolador Assembly UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk

EEL Microprocessadores. Parâmetros e Variáveis Locais 4/5/2010. Capítulo 7 Livro Ziller. Prof. Raimes Moraes GpqCom EEL UFSC

SEL 0415 INTROD. À ORGANIZAÇÃO DE COMPUTADORES

Fluxo de Execução em Assembly

Linguagens de Programação Classificação

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

Pilha de execução Volnys Borges Bernal Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica da USP

CONJUNTO DE INSTRUÇÕES DE UM PROCESSADOR (UCP)

CONJUNTO DE INSTRUÇÕES DE UM PROCESSADOR (UCP)

Informática I. Aula Aula 18-29/10/2007 1

x86 Assembly Mini-Course

AJProença, Sistemas de Computação, UMinho, 2017/18 1. Componentes (físicos) a analisar: a unidade de processamento / o processador:

Solução Lista de Exercícios Processadores

Interrupção. Prof. Adilson Gonzaga

Unidade Central de Processamento 2. Registradores

MÓDULO. Conjunto de Instruções do 8086/88 Aritméticas, lógicas, deslocamento e rotação M 02

MICROPROCESSADORES II (EMA911915) SUB-ROTINAS E PILHA 2 O SEMESTRE / 2018

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

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

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

Linguagem de Montagem do NeanderX

2º Estudo Dirigido CAP 3

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

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

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

ENGENHARIA DE SISTEMAS MICROPROCESSADOS

x86 arquitetura e instruções básicas

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

Transcrição:

A linguagem ASSEMBLY

Assembly é uma linguagem de baixo nível, chamada freqüentemente de linguagem de montagem É uma linguagem considerada difícil, principalmente porque o programador precisa conhecer a estrutura da máquina para usá-la Assembly

A linguagem Assembly é atrelada à arquitetura de uma certa CPU, ou seja, ela depende completamente do hardware Cada família de processador tem sua própria linguagem assembly (Ex. X86, ARM, SPARC, MIPS) Por essa razão Assembly não é uma linguagem portável, ao contrário da maioria das linguagens de alto nível Assembly

Antes do assembly: adição do microprocessador de sinal digital (DSP) TMS-320C54x da Texas Instruments 0000000SIAAAAAAA instrução de adição dos computadores B-200, B-300 e B-500 da Burroughs Corporation: Campo: O M N AAA BBB CCC Código: 1 2 3 100 200 300 Assembly

As primeiras linguagens Assembly surgiram na década de 50, na chamada segunda geração das linguagens de programação A segunda geração visou libertar os programadores de dificuldades como lembrar códigos numéricos e calcular endereços Assembly - História

Assembly foi muito usada para várias aplicações até os anos 80, quando foi substituída pelas linguagens de alto nível Isso aconteceu principalmente pela necessidade de aumento da produtividade de software Assembly - História

Atualmente Assembly é usada para manipulação direta de hardware e para sistemas que necessitem de performance crítica Device drivers, sistemas embarcados de baixo nível e sistemas de tempo real são exemplos de aplicações que usam Assembly Assembly - História

A linguagem Assembly é de baixo nível, porém ainda precisa ser transformada na linguagem que a máquina entende Quem faz isso é o Assembler. O Assembler é um utilitário que traduz o código Assembly para a máquina Assembly - Assembler

Exemplo: Antes -> mov al, 061h (x86/ia-32) Depois -> 10110000 01100001 Assembly - Assembler

Byte, Word e Dword são blocos de dados básicos. O processador trabalha com o tamanho de dados adequados para executar as instruções Um byte possui 8 bits, um word possui 16 bits ou 2 bytes e um dword possui 32 bits ou 4 bytes Assembly - Fundamentos

Em Assembly é comum representar os números na forma hexadecimal. Isso acontece porque é interessante visualizar o número na forma de dados A representação hexadecimal facilita o tratamento de números muito grandes e permite saber quais bits estão ligados ou desligados Assembly - Fundamentos

Um algarismo hexadecimal pode ser representado por quatro algarismos binários Logo um byte pode ser representado como dois números hexa, um word como quatro números hexa e um dword como oito números hexa Assembly - Fundamentos

Binário Hexa Decimal Tipo 10000000 80 128 byte 10000000000000 01 8001 32.769 word 11111111111111 FFFF 65.535 word 11 11111111111111 11111111111111 1111 FFFFFFFF 4.294.967.2 95 dword Assembly - Fundamentos

Registradores são áreas especiais dentro do processador que são mais rápidas que operandos de memória. Como vamos trabalhar com o processador Intel, existem apenas 8 registradores de uso geral Assembly - Registradores

São eles: EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP Os registradores ESP e EBP só devem ser usados preferencialmente para trabalhar com a pilha Assembly - Registradores

Assembly - Registradores Nos registradores de uso geral (Exceto ESI e EDI) é permitido usar três modos de acesso diferentes, ilustrados pela figura abaixo:

EAX -> Chamado de Acumulador, geralmente é usado para operações aritméticas e para guardar resultados EBX -> Chamado de Base, geralmente é usado para armazenar dados em geral e para endereços de memória Assembly - Registradores

ECX -> Chamado de Contador, como o nome já diz é usado como contador, principalmente para controlar loops EDX -> Chamado de registrador de dados, é usado geralmente para guardar o endereço de uma variável na memória Assembly - Registradores

ESI e EDI -> Respectivamente Source Index e Destination Index, são menos usados do que os registradores descritos anteriormente. Geralmente usa-se ESI e EDI para movimentação de dados, com ESI guardando o endereço fonte de uma variável e EDI guardando o endereço destino. Não podem ser acessados em nível de Byte. Assembly - Registradores

ESP e EBP -> Respectivamente Stack Pointer e Base Pointer, só devem ser usados para manipulação da pilha. O Registrador ESP guarda a referência para o topo da pilha, enquanto o registrador EBP é usado para andar pela pilha Assembly - Registradores

Entre os registradores que não são de uso geral, existe um registrador muito relevante para o programador, o registrador flags Através do registrador flags podemos saber se dois valores são iguais, se um é maior que outro ou se um valor é negativo, além de outras informações Assembly - Registradores

Assembly - Registradores O => Overflow D => Direction I => Interrupt Enable T => Trap S => Signal

Assembly - Registradores Z => Zero A => Auxiliar Carry P => Parity C => Carry

Todos os programas fazem uso da pilha em tempo de execução, porém nas linguagens de alto nível não é preciso se preocupar com o funcionamento da pilha Já em Assembly, o programador precisa saber trabalhar com a pilha, pois ela é uma ferramenta importante Assembly - Pilha

A pilha é uma área de dados existente na memória em tempo de execução, na qual seu programa pode armazenar dados temporariamente O processador é rápido no acesso à pilha, tanto para escrever quanto para ler Assembly - Pilha

As principais funcionalidades da pilha são: - Preservar valores de registradores em funções - Preservar dados da memória - Transferir dados sem usar registradores - Reverter a ordem de dados - Chamar outras funções e depois retornar - Passar parâmetros para funções Assembly - Pilha

push ax push bx push cx push dx push ds push es push di push si pusha push es, ds popa pop es, ds Assembly Exemplo Pilha

Movimentação de dados: - mov destino, fonte (Sintaxe Intel) - mov fonte, destino (Sintaxe AT&T) Obs: Nas instruções AT&T, é necessário informar o tamanho do dado com que se está trabalhando Assembly - Instruções

Intel mov eax, 1 mov ebx, 0ffh mov eax, [ebx] mov eax, [ebx+3] AT&T movl $1, %eax movl $0xff, %ebx movl (%ebx), %eax movl 3(%ebx), %eax Assembly - Instruções

Instrução de soma: - add destino, fonte (Sintaxe Intel) Exemplo: add eax,[ebx+ecx] - add fonte, destino (Sintaxe AT&T) Exemplo: addl (%ebx,%ecx),%eax Assembly - Instruções

Instrução de subtração: - sub destino, fonte (Sintaxe Intel) Exemplo: sub eax,ebx - sub fonte, destino (Sintaxe AT&T) Exemplo: subl %ebx,%eax Assembly - Instruções

Instruções de operações lógicas: - and/or/xor destino, fonte (Sintaxe Intel) Exemplo: and ax,bx - and/or/xor fonte, destino (Sintaxe AT&T) Exemplo: andw %bx,%ax Assembly - Instruções

Instrução de comparação: - cmp operando1, operando2 (Sintaxe Intel) Exemplo: cmp 08h, eax - cmp operando1, operando2 (Sintaxe AT&T) Exemplo: cmp $0x8, %eax Assembly - Instruções

Instruções de jump: Pulo incondicional: - jmp [100] (Sintaxe Intel) - jmp eax (Sintaxe Intel) - jmp *100 (Sintaxe AT&T) - jmp *%eax (Sintaxe AT&T) Assembly - Instruções

Pulo condicional: - je [100] (Sintaxe Intel) - jne eax (Sintaxe Intel) - je *100 (Sintaxe AT&T) - jne *%eax (Sintaxe AT&T) Assembly - Instruções

Instruções de manipulação da pilha: - push eax (Sintaxe Intel) - push %eax (Sintaxe AT&T) - pop eax (Sintaxe Intel) - Pop %eax (Sintaxe AT&T) Assembly - Instruções

O código Assembly é dividido em seções. As principais seções no Linux são: - section.data -> A seção.data é usada para declarar variáveis inicializadas. Porém essas variáveis não mudam no decorrer do programa. Essa seção é usada geralmente para definir nomes de arquivos, constantes, entre outros. Assembly - Seções

- Exemplo: section.data mensagem: db 'Hello world!' msglength: equ 12 Assembly - Seções

- section.bss -> É a seção usada para declarar as variáveis do programa - Exemplo: section.bss nomearq: resb 230 ;Reserva 230 bytes numero: resb 1 ;Reserva 1 byte array: resw 10 ;Reserva 10 words Assembly - Seções

- section.text -> Essa é a seção onde o código do programa é escrito - Exemplo: section.text global _start _start:......... Assembly - Seções

Interrupções são chamadas ao processador requisitando um serviço O nome interrupção vem do fato de que o processador tem sua atividade atual interrompida quando recebe um sinal de chamada Assembly - Interrupções

Quando isso acontece, o processador salva o processo atual e executa a rotina daquela interrupção Após a execução da rotina, que geralmente está armazenada em uma tabela na memória RAM, o processador retorna ao processo em que estava anteriormente Assembly - Interrupções

Para se chamar uma interrupção no Linux, é feito o seguinte processo: - Coloca-se o número da interrupção no registrador EAX - Coloca-se os argumentos requeridos pela interrupção nos devidos registradores - Chama-se a interrupção O resultado geralmente será retornado em EAX Assembly - Interrupções

- Exemplo (Sintaxe Intel): mov eax,1 ; Interrupção Exit mov ebx,0 ; Argumento em EBX int 80h ; Chamada da interrupção - Exemplo (Sintaxe AT&T): movl $1,%eax movl $0, %ebx int $0x80 Assembly - Interrupções

Assembly - Interrupções

Um programa é constituido por várias regiões de memória. Pilha Heap Código Dados Assembly Organização do Programa

Hello World (Sintaxe Intel) section.data hello: db 'Hello world!',10 ; A string 'Hello World! e um linefeed hellolenght: equ $-hello ; Tamanho da string hello section.text global _start _start: mov eax,4 ; Interrupção de escrita (sys_write) mov ebx,1 ; Argumento que indica modo de escrita mov ecx,hello ; Argumento que indica o endereço da string mov edx,hellolenght ; Argumento que indica o tamanho da string int 80h ; Chamada da interrupção mov eax,1 ; Interrupção exit (sys_exit) mov ebx,0 ; Argumento da interrupção int 80h ; Chamada da interrupção Assembly - Exemplo

Hello World (Sintaxe AT&T).data hello:.string "Hello World!\n".text.globl main main: mov $4,%eax mov $1,%ebx mov $hello,%ecx mov $13,%edx int $0x80 mov $1,%eax mov $0,%ebx int $0x80 Assembly - Exemplo

.stack.data include arquivo1.asm include arquivo2.asm.code start: include arquivo3.asm end start Assembly - Include

.data arquivo1 db 'dat/arquivo1', 0 arquivo2 db 'dat/arquivo2', 0 arquivo3 db 'dat/arquivo3', 0 arquivo4 db 'dat/arquivo4', 0 arquivo5 db 'dat/arquivo5', 0 arquivo6 db 'dat/arquivo6', 0 arquivo7 db 'dat/arquivo7', 0 arquivo8 db 'dat/arquivo8', 0 Assembly Carregar Arquivos

.text call NomeProcedimento NomeProcedimento PROC NEAR mov ax, 0x0F; ret NomeProcedimento ENDP Assembly - Procedimentos

Exemplo mov ah, 0 mov al, 13h ; modo video 320*200 int 10h Video Display Area (RAM) A000 -> gráficos de alta resolução B000 B800 Assembly Interrupção de Vídeo

www.cin.ufpe.br/~clac/infra_de_software http://www.wagemakers.be/english/doc/vga http://www.scribd.com/doc/13290971/interrupcoes http://maven.smith.edu/~thiebaut/artofassembly/ artofasm.html http://www.xs4all.nl/~smit/asm04001.htm#vga http://arapaho.nsuok.edu/~kingw/cs3173/ Chapter9.htm http://burks.bton.ac.uk/burks/language/asm/asmtut/ asm8.htm Assembly Referências