Linguagem de Montagem Assembly

Documentos relacionados
Representação de Dados

Representação de Dados (inteiros não negativos)

Programando em Assembly

Bits e operações. Sistemas de Computação

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

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

Representação de Dados (inteiros não negativos)

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

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

Arquitetura e Organização de Computadores

Arquitetura de Computadores. Conjunto de Instruções

Representação de Dados (inteiros não negativos)

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

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2

a) Calcule o valor médio de CPI apresentado na execução deste programa P, utilizando-se C1 sem e com otimização.

Arquitetura e Organização de Computadores

Representação de Dados Arrays e Structs

Arquiteturas de Computadores. Princípios e exemplos de conjuntos de instruções

Linguagens de Programação

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

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4

Arquitetura e Organização de Computadores

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Arquitetura e Organização de Computadores

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

Ordem de Bytes: Big Endian e Little Endian

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

Princípios de Desenvolvimento de Algoritmos MAC122

A linguagem ASSEMBLY

Disciplina: Arquitetura de Computadores

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I

Linguagem C Princípios Básicos (parte 1)

Introdução à Computação MAC0110

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

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

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

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

Organização de Computadores

Dados estruturados. Sistemas de Computação

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

Fundamentos de Programação

Slides trabalhados durante a quinta aula

SSC510 Arquitetura de Computadores 1ª AULA

Fluxo de Execução em Assembly

Unidade Central de Processamento 2. Registradores

Fundamentos de Programação

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

3. Linguagem de Programação C

Arquitetura e Organização de Computadores

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

INTRODUÇÃO À LINGUAGEM C

CONJUNTO DE INSTRUÇÕES

Algoritmos e Estruturas de dados

3. Linguagem de Programação C

Linguagem de Programação I. Aula 06 Linguagem C: Tipos de Dados

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

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Operadores e Expressões: bit-a-bit e especiais

Organização de Computadores 1

Microprocessadores CPU. Unidade de Controle. Prof. Henrique

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

Expoente Mantissa Frac. UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO

ALOCAÇÃO DINÂMICA DE MEMÓRIA

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

Organização e Arquitetura de Computadores I

Computadores de Programação (DCC/UFRJ)

UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO

Arquitetura de Computadores. Ciclo de Busca e Execução

Programação científica C++

2. A influência do tamanho da palavra

Introdução ao Assembly

GFM015 Introdução à Computação

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

Conjunto de Instruções. Alisson Brito

Linguagem C. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S

Universidade Federal do Rio de Janeiro Bacharelado em Ciência da Computação. Arquitetura de Computadores I. Organização Básica do Computador

2. A influência do tamanho da palavra

Organização e Arquitetura de Computadores I

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

INTRODUÇÃO À LINGUAGEM C

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

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

Ponteiros em C. Prof. Rui Jorge Tramontin Jr. UDESC - Rui J. Tramontin Jr. 1

Organização e Arquitetura de Computadores INTRODUÇÃO

TEÓRICA. lb $t0, 1($t1)

Aula 03: Introdução a C

3. Linguagem de Programação C

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

Linguagens de Programação I

Conceitos Básicos Linguagem C

Revisão Linguagem C Parte 1

Infra-Estrutura de Software. Introdução

A Linguagem C. A forma de um programa em C

Linguagens de Programação PROGRAMAÇÃO DE COMPUTADORES. Linguagem C. Linguagem C Estrutura Básica. Constante (literais) Linguagem C Primeiro Programa

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

José Augusto Fabri. Assembly Básico

Linguagens de Programação Classificação

Organização de computadores. Prof. Moisés Souto

Transcrição:

Linguagem de Montagem Assembly

Especificações O programa em Assembly Fica sobre a camada do Sistema Operacional Efetua chamadas ao Sistema Operacional O montador Chama-se Assembler Traduz a linguagem de montagem para a linguagem da máquina

Compilando um programa... /* oimundo.c */ #include <stdio.h> int main() { printf ( Olá Mundo!\n ); }

Passos da compilação

Arquitetura de uma máquina

CPU Unidade Central de Processamento Unidade de Controle Unidade Aritmética e Lógica Conjunto de registradores Funcionam como uma memória de acesso extremamente rápido dado Não dependem da memória principal (acesso requer sem barramento) Instruções de transferência de dados transferem dados entre memória e registradores Os operandos de diversas instruções geralmente devem estar em registradores Exemplos de registradores PC (program counter): contém o endereço da próxima instrução a ser executada Instruction register: onde é copiada cada instrução a ser executada

Barramentos e Dispositivos de E/S Barramentos: conduítes elétricos que carregam a informação entre os vários componentes da máquina Projetados para transportar palavras Dispositivos de E/S: Conexão da máquina com o mundo externo Conectados ao barramento de E/S por controladores (chipsets no próprio dispositivo ou na placa mãe) ou adaptadores (quando placa separada).

Hierarquia de memória

Execução de um programa

Representação de Dados

Representação Binária Exemplo: 15213 10 = 11101101101101 2 Vantagens: Implementação eletrônica Possibilidade de armazenar elementos com dois estados Transmissão eletrônica confiável (robustez a ruídos) Implementação eficiente de operações aritméticas

Bases Numéricas Hexadecimal Decimal Binário 0 0 0000 1 1 0001 2 2 0010 3 3 0011 4 4 0100 5 5 0101 6 6 0110 7 7 0111 8 8 1000 9 9 1001 A 10 1010 B 11 1011 C 12 1100 D 13 1101 E 14 1110 F 15 1111

Palavra (WORD) Cada máquina tem seu tamanho de palavra: número de bits ocupados por um valor inteiro número de bits de endereços A maioria das atuais máquinas tem palavra de 32 bits (4 bytes) Diferentes tipos de dados (p.ex. char, double) podem ocupar uma fração ou múltiplo do tamanho da palavra, mas sempre um número inteiro de bytes

Tamanho dos Tipos em C Tamanho em bytes dos tipos em C Int 4 bytes long int 8 bytes Char 1 byte Short 2 bytes Float 4 bytes Double 8 bytes long double 8 bytes Ponteiro 8 bytes Obs.: sizeof( Tipo ) retorna o tamanho do Tipo

Memória Orientada à Palavras Memória é um vetor de bytes (cada um com um endereço) mas o acesso ocorre palavra a palavra Endereço corresponde ao primeiro byte da palavra Endereços de palavras subsequentes diferem de 4 em máquina de 32 bits

Ordenação de Bytes Como organizar os bytes de uma palavra (4 bytes)? Big Endian (computadores Sun, Mac) byte menos significativo com maior endereço Little Endian (computadores Alpha, PCs) Byte menos significativo no menor endereço Exemplo variável x tem valor 0x01234567 (hexa) Endereço &x é 0x100

Ordenação de Bytes Transparente para o programador C Relevante quando analisamos o código de máquina Exemplo (litte endian): 01 05 64 94 04 08 add 0x8049464 Importante também para a transmissão de dados entre máquinas big e little endian

Verificação Big ou Little? #include <stdio.h> typedef unsigned char *byte_ptr; void mostra (byte_ptr inicio, int tam) { int i; for (i=0;i<tam;i++) printf("%.2x", inicio[i]); printf("\n"); } void mostra_int (int num) { mostra((byte_ptr) &num, sizeof(int)); }

Caracteres Usa-se uma tabela para mapear inteiros (não negativos) em símbolos Tabelas mais comuns: ASCII codificação em 8 bits UNICODE codificação em 16 bits Em C, tipo char define apenas 1 byte Pode-se manipular um char como um int Exemplo: if (c > 0 ) val = c 0 ;

Operadores bit a bit Podem ser aplicados a qualquer tipo C Baseados na Álgebra Booleana E (AND) A & B = 1 quando A=1 e B=1 OU (OR) A B = 1 quando A=1 ou B=1 Negação (NOT) ~A = 1 quando A = 0 Ou exclusivo (XOR) A ^ B = 1 quando A=1 e B=0 ou A=0 e B=1

Exemplos Swap sem terceira variável

Exercícios Para x=0x66 e y=0x93, faça x & y x y ~x ~y x &!y x && y x y!x!y x && ~y

Deslocamento de Bits X << K deslocamento para esquerda X * 2 K X >> K deslocamento para direita X / 2 k Exemplos

Representação de Arrays Alocação contígua na memória Primeiro elemento (a[0]) corresponde ao menor endereço de memória Tipo a[tam] ocupa sizeof(tipo)*tam bytes O nome do array equivale a um ponteiro (cujo valor não pode ser alterado) Exemplo: int a[tam], a é ponteiro constante tipo int *, e seu valor é &a[0] Nomes de arrays passados como parâmetros são endereços (do array)

Aritmética básica de ponteiros Ponteiro é um endereço para um tipo específico de dado. Ex int *, char *,... Em Tipo *pa *pa significa objeto Tipo apontado por pa. pa significa (endereço de objeto). Expressão (pa +i) = pa + sizeof(t)*i O que significam: pa++, ++pa, (*p)++? Comparação entre ponteiros (p == q, p >q ) só se são para o mesmo tipo Subtração entre dois ponteiros, (p1 p2), indica o número de elementos entre p1 e p2 Existe equivalência entre arrays e ponteiros

Exemplos

Alocação de Arrays

Arrays Aninhados Declaração vetor a[4] equivalente a int a[4][5] Variável a denota array de 4 elementos Alocados continuamente Cada elemento é um vetor de 5 int s Alocados continuamente Ordenação é por linha da matriz (elementos do vetor mais externo)

Estruturas Heterogêneas O alinhamento de structs na memória segue as regras: Os campos são alocados na ordem em que aparecem na declaração; Cada campo do struct que corresponde a uma palavra (ou múltiplas palavras) deve ser alocado em um endereço múltiplo de 4; shorts em múltiplos de 2 O início de cada estrutura tem que estar sempre alinhado em endereços múltiplos de 4

Exemplo de alinhamento

Números Negativos Complemento de 2 000, 001, 010, 011, 100, 101, 110, 111 Overflow 010 + 011

Representação de Números Negativos e Overflow

Programando em Assembly Precisa-se saber como interpretar e gerenciar a memória e como usar instruções de baixo nível para o processamento Não existem tipos e variáveis (apenas bytes na memória) Não tem-se o auxílio da verificação de tipos do compilador, que ajudam a detectar vários erros Código assembly é altamente dependente da máquina perde-se a portabilidade de uma linguagem de alto nível

Diferenças entre Assemblers Diferenças Intel/Microsoft X GAS Operandos em ordem contrária mov Dest, Src movl Src, Dest Constantes não precedidas pelo $, hexadecimais com h no final 100h $0x100 Tamanho do operando indicado por operando ou sufixo de instrução sub subl entre outros

Visão do Programador Assembly

Características do Assembly Tipos de dados básicos Inteiro de 1, 2, ou 4 bytes Valores int, short, long int, char Endereços (ponteiro sem tipo) Não existem tipos de dados complexos como arrays ou structs Apenas bytes alocados de forma contígua na memória Operações primitivas Funções aritméticas sobre registradores ou dados na memória Transferência de dados (mov) entre memória e registradores Carregar dado de memória para registrador Armazenar dado em registrador para memória Controle de fluxo de execução Desvios (jump) incondicionais Desvios condicionais (dependendo de um bit em EFLAGS)

Tipos de Dados em Assembly

Registradores São usados para armazenamento temporário de dados e endereços da memória Ex:

Principais Registradores Registradores de Dados ou de Uso Geral EAX, EBX, ECX, EDX Todos possuem acesso menor. Ex: BX, BH, BL Registrador de Ponteiro de Pilha (stack pointer - ESP) ponteiro da pilha do sistema é modificado quando um valor é colocado (pushed) ou removido (popped) da pilha Registrador de Ponteiro Base (EBP) ponteiro base da pilha do sistema fornece qual a posição inicial que pode ser utilizada pelo programa

Registrador de Sinais (Flags) EFLAGS Seus bits são utilizados para definir algumas características do processador indicam o resultado da execução da instrução (status flags) 0 CF: carry flag: indica a presença de um carry out; 2 PF: parity flag: indica se o número é ímpar; 6 ZF: zero flag: indica se o resultado da operação foi zero; 7 SF: sign flag: indica se o sinal é negativo; 10 DF: direction flag; 11 OF: overflow flag: indica se ocorreu overflow;

Exercício Fazer um programa que converta inteiros para binários utilizando operações bit a bit