SOFTWARE BÁSICO.

Slides:



Advertisements
Apresentações semelhantes
Parte 1: Organização de Computadores
Advertisements

Software Básico Silvio Fernandes Universidade Federal Rural do Semiárido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula 05:
Arquitetura de Computadores
WebDesign Redes de Computadores Aula 05
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Ambientais Ciência da Computação Aula 06: Funções.
14/10/09 Uma animação possui: Início; Passo; Fim; 1.
Assembly MAC-1 Implementação de ciclos Ciclo ‘while’ // Em Java : ...
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Excel Profa. Cristina M. Nunes.
Arquitetura dos Microprocessadores 8086 e 8088
Algoritmos e Programação Linguagens de Programação Teoria Aula 5 (05/05) Universidade Federal do Vale do São.
ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM
ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM
ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
EXPRESSÕES ARITMÉTICAS
EXPRESSÕES ARITMÉTICAS
LINGUAGEM C.
O MICROPROCESSADOR INTEL 8080
REPRESENTAÇÃO DE INSTRUÇÕES
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Arquitetura de Computadores
Aula 4 Nomes, Vinculações, Tipos e Escopos
Linguagens de Programação
Assembly x86.
Autor: Fernando de Mesentier Silva
Ponteiros.
A arquitectura IA32 A arquitectura de um processador é caracterizada pelo conjunto de atributos que são visíveis ao programador. Tamanho da palavra Número.
Programação em Assembly Procedimentos e funções
Programação em assembly
Listas Encadeadas.
Revisão da Linguagem C.
Classes e objetos P. O. O. Prof. Grace.
Apontadores ou Ponteiros
Funcionamento básico de um computador
Linguagem de Montagem.
Linguagem de Montagem Vetores.
João Ferreira, Dez 2003STRINGS, 1/6 Definição de String String (sentido lato) -> um string é um conjunto de valores (não necessariamente interpretáveis.
Linguagem de Montagem PROVA 4 – 3/12.
PROGRAMAÇÃO I UNIDADE 2.
ORGANIZAÇÃO DE COMPUTADORES
Prática de Programação Assembly 8086
Prof. Ricardo Santos PONTEIROS
Programação em C++ Compiladores
Interface entre as linguagens C e Assembly 8085
Agenda - Aula 2 Introdução (Computador Digital) Processadores
Agenda Modos de Endereçamento.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Capítulo VIII Ambientes de Execução
3. Introdução à Linguagem C
ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM
Planilha Eletrônica - Excel
Algumas notas sobre a linguagem de programação C
Arquitetura de Computadores
8088 Assembly Software Básico Mitsuo Takaki.
8 - 1 Organização Básica de Computadores e Linguagem de Montagem Ricardo Pannain ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM A pilha e subrotinas.
Procedimentos Registro de Ativação e Variáveis Locais 11 1.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
CES-10 INTRODUÇÃO À COMPUTAÇÃO
Organização Básica de Computadores e Linguagem de Montagem Ricardo Pannain ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM Arrays e modos.
Ciro Ceissler / ASSEMBLY Ciro Ceissler /
Lucas Aranha ASSEMBLY Lucas Aranha
Existem 8 registos principais de 32 bits no processador (existem mais como %EIP): %EAX %EBX %ECX %EDX %ESI %EDI %EBP %ESP Os registos são armazenados em.
Afonso Ferreira Miguel
ARQUITETURA DE COMPUTADORES Nível do Conjunto de Instruções
Ney Laert Vilar Calazans Exemplo de Apresentação de TP1 Descrição Resumida de uma Arquitetura de Processador: o estudo de caso do Intel 8086 ORGANIZAÇÃO.
Transcrição da apresentação:

SOFTWARE BÁSICO

Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas para programá-la, Programação em linguagem de alto nível para linguagens de baixo nível, Conversão de programa em linguagem de alto nível para linguagens de baixo nível, Conceitos sobre alocação de variáveis estáticas e dinâmicas, Técnicas de endereçamento.

Família INTEL 80X86 (32 bits) Registradores de Dados (32, 16, 8 bits)

Processador INTEL 80X86 Registradores: de propósito geral ou de dados; de endereços (segmentos, apontadores e índices); sinalizadores de estado e controle (FLAGS); Registradores de propósito geral (de dados): – AX, BX, CX e DX • são todos registradores de 16 ou 32 bits • utilizados nas operações aritméticas e lógicas • podem ser usados como registradores de 16 ou 8 bits:

Processador INTEL 80X86 Registradores de propósito geral (de dados): AX (acumulador)  utilizado como acumulador em operações aritméticas e lógicas; em instruções de E/S, ajuste decimal, conversão etc

Processador INTEL 80X86 Registradores de propósito geral (de dados): BX (base)  usado como registrador BASE para referenciar posições de memória; BX armazena o endereço BASE de uma tabela ou vetor de dados, a partir do qual outras posições são obtidas adicionando-se um valor de deslocamento (offset). CX (contador)  utilizado em operações iterativas e repetitivas para contar bits, bytes ou palavras, podendo ser incrementado ou decrementado; CL funciona como um contador de 8 bits.

Processador INTEL 80X86 Registradores de propósito geral (de dados): DX (dados)  utilizado em operações de multiplicação para armazenar parte de um produto de 32 bits, ou em operações de divisão, para armazenar o resto; utilizado em operações de E/S para especificar o endereço de uma porta de E/S.

Registro de Endereço

Registradores Apontador de Pilha e de índice: – SP (stack pointer - apontador de pilha) é utilizado em conjunto com SS, para acessar a área de pilha na memória; aponta para o topo da pilha – atualizado automaticamente. – BP (base pointer - apontador base) é o ponteiro que, em conjunto com SS, permite acesso a dados dentro do segmento de pilha. – SI (source index - índice fonte) usado como registrador índice em alguns modos de endereçamento indireto, em conjunto com DS. – DI (destination index - índice destino) similar ao SI, atuando em conjunto com ES. • Obs: SI e DI facilitam a movimentação de dados armazenados em seqüência entre posições fonte (indicado por SI) e posições destino (indicado por DI).

Registradores Apontador de Pilha e de índice: Registrador de Sinalizadores (FLAGS): – indica o estado do microprocessador após a execução de cada instrução; – conjunto de bits individuais, cada qual indicando alguma propriedade; – subdividem-se em: FLAGS da estado (status) e FLAGS de controle.

Registrador de Sinalizadores (FLAGS):

Registrador de Sinalizadores (FLAGS): Flags de Estados: – CF - Flag de Carry • CF = 1  após instruções de soma que geram "vai um“; após instruções de subtração que geram "empréstimo" ("empresta um"); • CF = 0  caso contrário. – PF - Flag de paridade • PF = 1  caso o byte inferior do resultado de alguma operação aritmética ou lógica apresentar um número par de "1's"; • PF = 0  caso contrário (número impar).

Registrador de Sinalizadores (FLAGS): ZF - Flag de Zero • ZF = 1  caso o resultado da última operação aritmética ou lógica seja igual a zero; • ZF = 0  caso contrário. SF - Flag de Sinal: utilizado para indicar se o número resultado é positivo ou negativo em termos da aritmética em Complemento de 2 (se não ocorrer erro de transbordamento - overflow). • SF = 1  número negativo; • SF = 0  número positivo. OF - Flag de Overflow (erro de transbordamento). • OF = 1  qualquer operação que produza overflow; • OF = 0  caso contrário.

Linguagem Assembly

Linguagem Assembly Campo Nome: – Pode ser um rótulo de instrução, um nome de sub-rotina, um nome de variável, contendo de 1 a 31 caracteres, iniciando por uma letra ou um caractere especial e contendo somente letras, números e os caracteres especiais ? . @ _ : % Exemplos: nomes válidos nomes inválidos - LOOP1: - DOIS BITS - .TEST - 2abc - @caracter - &A2.25 - SOMA_TOTAL4 - #33

Linguagem Assembly Campo de Código de Operação: – Contem o código de operação simbólico (mnemônico) – No caso de diretivas, contem o código de pseudoinstrução Exemplos: instruções diretivas - MOV - .MODEL - ADD - .STACK - INC - nome PROC - JMP

Linguagem Assembly Campo de operandos: • Instruções podem conter 0, 1 ou 2 operandos no 8086. Exemplos: NOP ; sem operandos: instrui para fazer nada INC AX ; um operando: soma 1 ao conteúdo de AX ADD $2, AX ; dois operandos: soma 2 ao conteúdo da ; palavra de memória A (variável A) Operandos imediatos (constrantes numéricas) devem começar com $

Linguagem Assembly No caso de instruções de dois operandos: – o primeiro, operando fonte: não modificado pela instrução; – o segundo, operando destino: registrador ou posição de memória onde o resultado será armazenado, o conteúdo inicial será modificado; – os operandos são separados por uma vírgula. Campo de Comentário: – Um ponto-e-vírgula ( # ) marca o início deste campo;

Linguagem Assembly Formato de dados, variáveis e constantes – decimal: $61 # é considerado decimal – hexa: 0x12 # é considerado hexadecimal

Linguagem Assembly Algumas instruções básicas do 8086 – mov origem, destino - movl origem, destino • Usada para transferir dados entre: – registrador e registrador – registrador e uma posição de memória – mover um número diretamente para um registrador ou posição de memória movw WORD1 ,%AX ; mov o conteúdo da mem WORD1 para AX movb $2, %AH ; transfere o num 2 para AH movb $0x4, %AH ; idem anterior: 4h para AH movb %BL, %AH ; mov o conteúdo BL para AH movw %CS, %AX ; transfere cópia do conteúdo de CS para AX

Linguagem Assembly Algumas instruções básicas do 8086 add origem, destino addl origem, destino sub origem, destino subl origem, destino and origem, destino andl origem, destino – Usadas para adicionar (ou subtrair) dados entre: • registrador e registrador • registrador e uma posição de memória • adicionar (ou subtrair) um número diretamente a (de) um registrador ou posição de memória

Linguagem Assembly Algumas instruções básicas do 8086 orl origem, destino xorl origem, destino imull origem, destino idivl origem, destino – Usadas para adicionar (ou subtrair) dados entre: • registrador e registrador • registrador e uma posição de memória • adicionar (ou subtrair) um número diretamente a (de) um registrador ou posição de memória

Linguagem Assembly Algumas instruções básicas do 8086 pushl f ; empilha origem popl d ; desempilha destino – Usadas para empilhar ou desempilhar: • pushl f ; (esp = esp – 4; mem[esp] = f) • popl d ; (d = mem[esp]; esp = esp + 4)

Linguagem Assembly ● f ou f1: operando fonte ou origem ● d: operando destino ou resultado ● Operandos imediatos (constantes numéricas) devem começar com $ ● Registradores devem iniciar com %eax ● Na mesma instrução, apenas um dos operandos pode ser do tipo mem ● O endereço de acesso à memória é calculado pela expressão: endereço(mem) = base + (index * scale) + disp ● A instrução cdq é usada para estender o sinal de %eax em %edx antes de executar a idivl

Linguagem Assembly

Linguagem Assembly

Linguagem Assembly Segmento de dados – Contem a definição e declaração das variáveis. – Pode-se também fazer a atribuição de símbolos para constantes. Sintaxe: .DATA (segment data) Exemplo: .DATA WORD1 DW A8h BYTE1 DB 5 MENSAGEM DB ‘Isto e uma mensagem’ LF EQU 0Ah

Linguagem Assembly

Procedimentos e Funções Uso da pilha: Endereço de retorno Passagem de parâmetros Armazenamento de variáveis locais ● Uso de registradores: %ebp é usado como apontador para parâmetros e variáveis locais na pilha O valor original do %ebp deve ser preservado Deve ser guardado na pilha no início da rotina e recuperado no final da rotina A instrução movl %esp,%ebp faz o %ebp apontar para os parâmetros e variáveis locais na pilha

Sequencia mínima de uma rotina push %ebp # quarda %ebp original na pilha movl %esp, %ebp # %ebp aponta para parâmetros e # variáveis locais subl $N, %esp # reserva N bytes na pilha para # variáveis locais . . . movl %ebp, %esp # libera espaço reservado na pilha # para variáveis locais popl %ebp # recupera %ebp original da pilha # retorna ● %eax guarda o valor de retorno de uma função.

Sequencia mínima de uma rotina

Sequencia mínima de uma rotina

Pseudo instruções .date indica um trecho de programa que será armazenado variáveis a: .int b: .int .text indica um trecho de programa que será armazenado no segmento de código .globl label declara o label global, visível por outros módulos

Sequencia mínima de uma rotina a = a + 10; addl $10,a #include <stdio.h> main() { int x; x = func(); printf("%d\n",x ); } .text .global func func: pushl %ebp movl %esp, %ebp subl $0, %esp movl $10, %eax movl %ebp,%esp popl %ebp ret

Sequencia mínima de uma rotina Uma instrução pode finalizar com l, w ou b, depende do tamanho do registrador da operação: "long" - 4 byte operands, instrução finaliza com 'l‘ - eax "word" - 2 byte operands, instrução finaliza com 'w' - ax "byte" - 1 byte operands, instrução finaliza com 'b' - ah #include <stdio.h> main() { int x; x = func(); printf("%d\n",x ); } .text .global func func: pushl %ebp movl %esp, %ebp subl $0, %esp movw $5, %ax addw $12, %ax movl %ebp,%esp popl %ebp ret

Sequencia mínima de uma rotina Uma instrução pode finalizar com l, w ou b, depende do tamanho do registrador da operação: "long" - 4 byte operands, instrução finaliza com 'l‘ - eax "word" - 2 byte operands, instrução finaliza com 'w' - ax "byte" - 1 byte operands, instrução finaliza com 'b' - ah #include <stdio.h> main() { int x; x = func(); printf("%d\n",x ); } .text .global func func: pushl %ebp movl %esp, %ebp subl $0, %esp movw $5, %ax addw $0x12, %ax movl %ebp,%esp popl %ebp ret

Sequencia mínima de uma rotina Uma instrução pode finalizar com l, w ou b, depende do tamanho do registrador da operação: "long" - 4 byte operands, instrução finaliza com 'l‘ - eax "word" - 2 byte operands, instrução finaliza com 'w' - ax "byte" - 1 byte operands, instrução finaliza com 'b' - ah #include <stdio.h> main() { int x; x = func(); printf("%d\n",x ); } .text .global func func: pushl %ebp movl %esp, %ebp subl $0, %esp movb $17, %al addb $15, %al movl %ebp,%esp popl %ebp ret

Sequencia mínima de uma rotina Uma instrução pode finalizar com l, w ou b, depende do tamanho do registrador da operação: "long" - 4 byte operands, instrução finaliza com 'l‘ - eax "word" - 2 byte operands, instrução finaliza com 'w' - ax "byte" - 1 byte operands, instrução finaliza com 'b' - ah #include <stdio.h> main() { int x; x = func(); printf("%d\n",x ); } .text .global func func: pushl %ebp movl %esp, %ebp subl $0, %esp movb $2, %al movb $2, %ah movl %ebp,%esp popl %ebp ret

Sequencia mínima de uma rotina a++ , a-- #include <stdio.h> main() { int x; x = func(); printf("%d\n",x ); } .text .global func func: pushl %ebp movl %esp, %ebp subl $0, %esp movl $12, %eax incl %eax decl %eax movl %ebp,%esp popl %ebp ret

Sequencia mínima de uma rotina a = a + b; a = a - b .text .globl func func: pushl %ebp movl %esp, %ebp subl $0, %esp movl $5,%eax addl $10,%eax movl %ebp,%esp popl %ebp ret movl $25,%eax subl $10,%eax

Sequencia mínima de uma rotina a = a & b; a = a * b .text .globl func func: pushl %ebp movl %esp, %ebp subl $0, %esp movl $11,%eax andl $10,%eax movl %ebp,%esp popl %ebp ret movl $5,%eax imull $6,%eax

Sequencia mínima de uma rotina a = a | b; a = a ^ b .text .globl func func: pushl %ebp movl %esp, %ebp subl $0, %esp movl $11,%eax orl $10,%eax movl %ebp,%esp popl %ebp ret xorl $10,%eax

Sequencia mínima de uma rotina section .data a: .int section .text .globl func func: pushl %ebp movl %esp, %ebp subl $0, %esp movl $15, a movl a, %eax addl $9, %eax movl %ebp,%esp popl %ebp ret b: .int movl $12, b addl b, %eax