x86 arquitetura e instruções básicas

Documentos relacionados
Arquitectura de Computadores 3º Teste. Instruções do x86

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

Microprocessadores. Família x86 - Programação do i8086

Arquitectura de Computadores

Microprocessador Intel 8086

Operadores lógicos (bit a bit)

INSTRUÇÕES DE TRANSFERÊNCIA

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

Professor: Dr. Rogério Rodrigues de Vargas.

Instruções funcionamento em 16 bits. 8B bytes W Mod 000 r/m

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

Arquitectura de Computadores (ACom)

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

Arquitectura de Computadores (ACom)

Arquitetura de Um Processador I

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

Símbolos e abreviaturas utilizadas na descrição das instruções

7. A pilha e subrotinas

CONJUNTO DE INSTRUÇÕES

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

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

Sistemas de Computação

Organização Funcional

Universidade de São Paulo

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

Introdução a Engenharia Reversa

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

Arquitectura de Computadores

Conjunto de Instruções (ISA) I

Assembly. Prof. Jorge Cavalcanti. Prof. Sérgio Faustino.

Conjunto de Instruções (ISA) II

04/09/2011. Tipos de Instruções. Dados numéricos. Template. Tipo de instruções. Montagem. Conjunto de Instruções do Pentium (ISA) Instruções Diádicas

Fluxo de Execução em Assembly

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

EEL Microprocessadores

A linguagem ASSEMBLY

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

****************************************************************************

Prova de Arquitectura de Computadores (21010) Data: 5 de Fevereiro de 2009

Prova de Arquitectura de Computadores (21010) Data: 12 de Fevereiro de 2010

Prova de Arquitectura de Computadores (21010) Data: 18 de Junho de 2010

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

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

José Augusto Fabri. Assembly Básico

Arquitetura e Organização de Computadores

Introdução à Arquitetura de Computadores

Prova de Arquitectura de Computadores (21010) Data: 23 de Junho de 2009

Arquitectura de Computadores 3º TESTE

Arquitectura de Computadores

Organização de Computadores

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

Estrutura do tema ISA do IA-32

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

Grupo I (5 valores) CD AB

O conjunto de ações executadas quando ocorre uma solicitação de interrupção mascarável ( de hardware ).

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

Sebenta ARQUITECTURA DE COMPUTADORES 2006/2007. Paulo Matos

Arquitectura de Computadores

Ministério da Educação UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ. Aula 2. Cibele Lemos Freire Viginoski

Software de Telecomunicações Tópicos de Assembly86

Prova de Arquitectura de Computadores (21010) Data: 5 de Fevereiro de 2009

Para facilitar o entendimento das rotinas escritas em assembly, apresentadas em aula, estudar as seguintes instruções da linguagem assembly:

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

Prof. Adilson Gonzaga

Assembly Sintaxe do Assembly. Instruções que afectam Flags. Aplicações de Microprocessadores 2006/2007

O estudo da arquitectura de computadores efectua-se com recurso à Abstracção

Linguagem de Montagem Assembly

****************************************************************************

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

7. PROGRAMANDO O MICROCONTROLADOR. Microcontroladores - Prof: Demantova

Arquitectura de Computadores

Estrutura do tema ISA do IA-32

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

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

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

Solução Lista de Exercícios Processadores

Capítulo 1 1. UNIDADE DE INTERFACE DE BARRAMENTO

Revisão: Modo Real, pt 2 Interrupções

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

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

- 1 - TUTORIAL DA LINGUAGEM ASSEMBLY

Periféricos e Interfaces Ano lectivo 2003/2004 Docente: Ana Paula Costa. Aula Teórica 3

Disciplina de. Organização de Computadores Digitais

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

p-fólio Arquitectura de Computadores U.C de julho de 2018 INSTRUÇÕES

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

Neander - características

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

Assembly x86. Hugo Bessa - hrba Paulo Serra Filho ptvsf

As 5 partes fundamentais. Linguagem de Programação Pinagem Características Elétricas Ambiente de Desenvolvimento Integrado - IDE

SimuS. Gabriel P. Silva. José Antonio Borges. Um Simulador Didático para o Ensino de Arquitetura de Computadores DCC-IM/UFRJ NCE/UFRJ

7. Instruções lógicas, de deslocamento e de rotação

2º Estudo Dirigido CAP 3

Programação de Microprocessadores. Programação de Microprocessadores SEL-433 APLICAÇÕES DE MICROPROCESSADORES I

Sistemas Microprocessados. sato<at>utfpr<dot>edu<dot>br

Arquitectura de Computadores 2007/2008 2º Semestre 1º Teste (A) - 30/04/2008. Folha de Respostas

Arquitetura do 8086/8088

Assembly IA32 Procedimentos

Programação Assembler no PC-IBM e Compatíveis ÍNDICE... 2 PREFÁCIO DA EDIÇÃO ELETRÔNICA INTRODUÇÃO CONCEITOS BÁSICOS...

Transcrição:

x86 arquitetura e instruções básicas 1

Família x86 Data CPU Palavra Endereço (bits) 1978 8086, 8088 1982 80186, 80188 1985 80386 1989 80486 1993 Pentium, Pentium MMX 1995 Pentium Pro 1997 Pentium II/III, Celeron, Xeon 2003 Pentium M, Intel Core (2006) 2000 Pentium 4 2005 16 20 80286 16 24 Pentium 4 Prescott, Celeron D, Pentium D 32 32 32 36 32 36 64 36 2006 Core 2 64 36 2008 2011 2013 2015/2016 Core i3, Core i5 and Core i7 (Nehalem/Westmere) Intel Core i3, Core i5 and Core i7 (Sandy Bridge/Ivy Bridge) Intel Core i3, Core i5 and Core i7 (Haswell/Broadwell) Intel Core i3, Core i5 and Core i7 (Skylake/Kaby Lake/Cannonlake) 64 36 64 40 64 44 2

Arquitetura 3

Arquitetura A BIU executa todas as operações com o BUS do sistema: Troca de dados entre a EU e a memória do sistema e dispositivos de I/O. Enquanto a EU está ocupada a executar instruções, a BIU lê na memória central as próximas instruções a realizar (prefetch). 4

Registos gerais (16 bits) até ao 80286 5

Registos gerais (32 bits) 6

Registos Algumas instruções usam os registos de forma implícita Registo EAX AX AL AH EBX ECX CL EDX ESP ESI EDI Operações Multiplicação, divisão, I/O (DoubleWord) Multiplicação, divisão, I/O (Word) Multiplicação, divisão, I/O (Byte) Multiplicação, divisão (Byte) Tradução Loops, operações com strings Rotação e deslocamento de variáveis Multiplicação, divisão, (Word); I/O indirecto Operações de stack Operações com strings Operações com strings 7

Flags O 8086 tem 3 flags de controle que podem ser alteradas pelos programas para alterar as operações do processador, e 6 flags de estado que refletem certas propriedades do resultados das operações aritméticas ou lógicas. 8

Flags 9

Flags carry - carry ou borrow no bit mais significativo (MSB) de um resultado (8 ou 16 bits) paridade - paridade par quando activa auxiliar - carry ou borrow entre nibbles (usada por aritmética decimal) zero - o resultado da operação é 0 sinal - o MSB é 1 (número negativo) overflow - perda de um bit significativo interrupt enable - permite que o CPU reconheça interrupções externas (mascaráveis) direção - quando activa provoca o auto-decremento nas intruções sobre strings, de contrário provoca o auto-incremento trap - põe o processador no modo single-step para debugging 10

Stack (32 bits) A stack no x86 encontra-se em memória e é referenciada pelo registo ESP (stack pointer). Um sistema pode ter um número ilimitado de stacks. Apenas se pode endereçar uma stack de cada vez. As operações na stack são sempre sobre 32 bits. Um valor é carregado (PUSHed) em stack decrementando o ESP 4 unidades e escrevendo o valor na stack. Um valor é retirado (POPed) da stack lendo-o do topo da stack e incrementando o ESP 4 unidades. 11

Instruções de transferência de dados MOV destino, origem PUSH origem POP destino XCHG destino, origem XLAT tabela LAHF SAHF PUSHF POPF Âmbito Geral Move byte, word, doubleword ou quadword Carrega doubleword na stack Retira doubleword da stack Troca byte, word, doubleword ou quadword Traduz byte Transferência de flags Coloca as flags em AH Coloca AH nas flags Carrega as flags na stack Retira flags da stack 12

Instruções aritméticas ADD destino, origem ADC destino, origem INC destino SUB destino, origem SBB destino, origem DEC destino NEG destino CMP destino, origem MUL origem IMUL origem DIV origem IDIV origem CBW CWD Adição Adiciona byte, word, doubleword ou quadword Idem com carry Incrementa byte, word, doubleword ou quadword 1 unidade Subtracção Subtrai byte, word, doubleword ou quadword Idem com borrow Decrementa byte, word, doubleword ou quadword 1 unidade Nega byte, word, doubleword ou quadword Compara byte, word, doubleword ou quadword Multiplicação Multiplica byte, word, doubleword ou quadword sem sinal Multiplicação inteira de byte, word, doubleword ou quadword Divisão Divide byte, word, doubleword ou quadword sem sinal Divisão inteira de byte, word, doubleword ou quadword Converte byte em word Converte word em doubleword 13

Instruções de manipulação de bits NOT destino AND destino, origem OR destino, origem XOR destino, origem TEST destino, origem SHL / SAL destino, count SHR destino, count SAR destino, count ROL destino, count ROR destino, count RCL destino, count RCR destino, count Lógicas Complementa byte, word, doubleword ou quadword Produto lógico de byte, word, doubleword ou quadword Soma lógica de byte, word, doubleword ou quadword Ou exclusivo de byte, word, doubleword ou quadword Teste (AND) de byte, word, doubleword ou quadword Deslocamentos Deslocamento lógico / aritmético de byte, word, doubleword ou quadword à esquerda Deslocamento lógico de byte, word, doubleword ou quadword à direita Deslocamento aritmético de byte, word, doubleword ou quadword à direita Rotações Roda byte, word, doubleword ou quadword à esquerda Roda byte, word, doubleword ou quadword à direita Roda byte, word, doubleword ou quadword com carry à esquerda Roda byte, word, doubleword ou quadword com carry à direita 14

Instruções sobre strings REP REPE / REPZ REPNE / REPNZ MOVS destino, origem MOVSB / MOVSW CMPS destino, origem SCAS destino LODS origem STOS destino Repete Repete enquanto for igual / zero Repete enquanto não for igual / não zero Move string de bytes, words ou doublewords Move string de bytes, words ou doublewords Compara string de bytes, words ou doublewords Pesquisa string de bytes, words ou doublewords Lê string de bytes, words ou doublewords Escreve string de bytes, words ou doublewords 15

Instruções sobre strings Registos e flags utilizados ESI EDI ECX AL / AX / EAX DF ZF Índice (offset) da string origem Índice (offset) da string destino Contador de repetições Valor para pesquisa Destino para LODS Origem para STOS 0 = auto-incrementa SI, DI 1 = auto-decrementa SI, DI Termina pesquisa ou comparação 16

Fluxo das operações com strings (16 bits) 17

Instruções de transferência de controle (1) JA / JNBE rótulo JAE / JNB rótulo JB / JNAE rótulo JBE / JNA rótulo JC rótulo JE / JZ rótulo JG / JNLE rótulo JGE / JNL rótulo JL / JNGE rótulo JLE / JNG rótulo JNC rótulo JNE / JNZ rótulo JNO rótulo JNP / JPO rótulo JNS rótulo JO rótulo JP / JPE rótulo JS rótulo Transferências condicionais Salta se superior / não inferior nem igual Salta se superior ou igual / não inferior Salta se inferior / não superior nem igual Salta se inferior ou igual / não superior Salta se carry Salta se igual / zero Salta se superior / não inferior nem igual Salta se superior ou igual / não inferior Salta se inferior / não superior nem igual Salta se inferior ou igual / não superior Salta se não carry Salta se não for igual / não zero Salta se não overflow Salta se não paridade / paridade ímpar Salta se não tiver sinal Salta se overflow Salta se paridade / paridade par Salta se tiver sinal 18

Instruções de transferência de controle (2) Transferências incondicionais CALL nome-de-rotina Chama procedimento RET valor-a-retirar (op) Volta de um procedimento JMP endereço Salta Controle de iteração LOOP rótulo Ciclo LOOPE / LOOPZ rótulo Ciclo se igual / zero LOOPNE / LOOPNZ rótulo Ciclo se não igual / não zero JCXZ rótulo Salta se CX = 0 Interrupções INT tipo Interrupção INTO Interrupção se overflow IRET Volta de interrupção 19

Instruções de transferência de controle (condições testadas) Mnemónica Condições testadas JA / JNBE (CF ou ZF) = 0 JAE / JNB CF = 0 JB / JNAE CF = 1 JBE / JNA (CF ou ZF) = 1 JC CF = 1 JE / JZ ZF = 1 JG / JNLE ((SF xor OF) ou ZF) = 0 JGE / JNL (SF xor OF) = 0 JL / JNGE (SF xor OF) = 1 JLE / JNG ((SF xor OF) ou ZF) = 1 JNC CF = 0 JNE / JNZ ZF = 0 JNO OF = 0 JNP / JPO PF = 0 JNS SF = 0 JO OF = 1 JP / JPE PF = 1 JS SF = 1 20

Instruções de controlo do processador STC CLC CMC STD CLD STI CLI HLT WAIT ESC LOCK NOP Operações com flags Ativa flag de carry Desativa flag de carry Complementa flag de carry Ativa flag de direção Desativa flag de direção Ativa flag de interrupt enable Desativa flag de interrupt enable Sincronização externa Para até interrupção ou reset Espera até pino TEST/ estar ativo Escape para processador externo Prende o bus para a próxima instrução Sem efeito Não efectua nenhuma operação 21

Endereçamento 22

Operandos em registo e imediato As instruções com operandos apenas em registo são as mais compactas e rápidas. São executadas inteiramente na CPU. Exemplo:ADD AX, BX Os operandos imediatos são constantes contidas na instrução, sendo por isso de acesso rápido. Servem apenas como origem, nunca como destino. Exemplo:ADD AL, 5 23

Endereçamento directo É o modo de endereçamento mais simples. É usado para endereçar variáveis simples (escalares). Exemplos: ADD CX, alfa ADD alfa, 6 24

Endereçamento indirecto Uma instrução pode operar em diferentes posições de memória se o registo de base ou índice for actualizado. Exemplos: ADD BL, [BX] ADD [SI], 12 25

Tipos de dados C ou Java (depende do exemplo) Assembly byte n; n resb 1 short p; p resw 1 int x; x resd 1 long r; r resq 1 byte n=3; n db 3 short p=5; p dw 5 int x=0x31; x dd 0x31 long r=0x1a; r dq 0x1A char s[20]; s resb 20 int v[12]; v resd 12 String t="olá Mundo"; t db "Olá Mundo" 26