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

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

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

2º Estudo Dirigido CAP 3

ENGENHARIA DE SISTEMAS MICROPROCESSADOS

Arquitetura e Organização de Computadores

EEL Microprocessadores

Organização de Computadores 1

Arquitetura do 8086/8088

Aula 10 Processadores de Propósito Geral

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

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

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

Sistemas de Computação

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

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

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

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

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

Solução Lista de Exercícios Processadores

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

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

Arquitetura e Organização de Computadores

Disciplina: Arquitetura de Computadores

2. A influência do tamanho da palavra

Arquitetura e Organização de Computadores

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

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

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

Processador. Processador

Universidade de São Paulo

Organização Funcional

ORGANIZAÇÃO DE COMPUTADORES O PROCESSADOR E SEUS COMPONENTES

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

CONJUNTO DE INSTRUÇÕES

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

2. A influência do tamanho da palavra

Organização e Arquitetura de Computadores I

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

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

Estrutura Básica de um Computador

José Augusto Fabri. Assembly Básico

Organização e Arquitetura de Computadores I

ORGANIZAÇÃO DE COMPUTADORES

Organização de Computadores

OTermo Assembly significa montagem, ou seja, linguagem

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

Conjunto de Instruções. Alisson Brito

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

MICROPROCESSADORES. Aula 10

25/8/2010. Praticamente todas as arquiteturas de computadores fornecem mais de um modo de

Todo processador é constituído de circuitos capazes de realizar algumas operações primitivas:

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE DE CONTROLE E A INTERPRETAÇÃO DE INSTRUÇÕES. Prof. MSc. Tiago Alves de Oliveira

Unidade Central de Processamento 2. Registradores

ORGANIZAÇÃO DE COMPUTADORES CAPÍTULO 6: PROCESSADORES. Prof. Juliana Santiago Teixeira

A linguagem ASSEMBLY

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

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

MODOS DE ENDEREÇAMENTO E CONJUNTO DE INSTRUÇÕES

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

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

Sistemas Operacionais I

Endereçamento e Formato de Instruções

Organização de Sistemas de Computadores

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

Sistemas Operacionais I

Capítulo 1 1. UNIDADE DE INTERFACE DE BARRAMENTO

MODOS DE ENDEREÇAMENTO E CONJUNTO DE INSTRUÇÕES

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

SSC510 Arquitetura de Computadores 1ª AULA

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

Arquitetura e Organização de Computadores

ORGANIZAÇÃO DE COMPUTADORES

Organização de Computadores

Prof. Leonardo Augusto Casillo

SEL-433 APLICAÇÕES DE MICROPROCESSADORES I

Professor: Dr. Rogério Rodrigues de Vargas.

Conceitos Básicos Processador

Instruções. Maicon A. Sartin

Estrutura do tema ISA do IA-32

Linguagem de Montagem Assembly

Conjunto de Instruções e Modelos de Arquiteturas

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

Instruções de Máquina

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

Computadores e Programação (DCC/UFRJ)

CPU. Funções: Componentes: Processamento; Controle. UC (Unidade de Controle); Registradores; ALU s, FPU s etc. Arquitetura de Computadores 3

Organização de computadores. Aula 05

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

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

SEL-0415 Introdução à Organização de Computadores Aula 2 Prof. Dr. Marcelo Andrade da Costa Vieira

ção de Computadores I

Sistemas de Computação. Seção Notas. Endereçamento de Memória. Notas. Oitava Aula. Haroldo Gambini Santos. 3 de setembro de 2009.

Estrutura do tema ISA do IA-32

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

Arquitetura de Computadores. Conjunto de Instruções

Capítulo 3 Organização Interna de um Computador

INSTITUTO FEDERAL CATARINENSE Campus Ibirama

Micro-Arquiteturas de Alto Desempenho. Introdução. Ementa

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

Transcrição:

EXEMPLO DE ARQUITETURAS REAIS INTEL 8086 AULA 07 Arquitetura de Computadores Gil Eduardo de Andrade O conteúdo deste documento é baseado no livro Princípios Básicos de Arquitetura e Organização de Computadores Linda Null e Julia Labur. 1. Introdução A Intel Corporation tem produzido muitas arquiteturas diferentes, algumas das quais podem ser muito familiares. Contudo, seu primeiro chip popular, o 8086, foi introduzido em 1979 e foi usado no IBM PC. Ele usava dados de 16 bits e funcionava com endereços de 20 bits; portanto, ele podia endereçar um milhão de bytes de memória. A UCP do 8086 era dividida em duas partes: a unidade de execução, que incluía os registradores gerais e a UAL, e a unidade de interface de barramento, que incluía uma fila de instruções, os registradores de segmento e o apontador de instruções. O 8086 tinha quatro registradores de 16 bits de uso geral, denominados de AX (o acumulador principal), BX (o registrador base usado para estender o endereçamento), CX (o registrador contador) e DX (o registrador de dados). Cada um destes registradores era dividido em dois pedaços: a metade mais significativa era designada como metade alta (denotada por AH, BH, CH e DH) e a menos significativa era designada como metade baixa (denotada por AL, BL, CL e DL). Diversas instruções do 8086 requeriam o uso de um registrador específico, mas os registradores podiam também ser usados para outros propósitos. O 8086 também tinha três registradores apontadores: o apontador de pilha (SP stack pointer), usado como um deslocamento para acessar a pilha; o apontador base (BP base pointer), usado para fazer referência a parâmetros inseridos na pilha; e o apontador de instruções (IP instruction pointer), que continha o endereço da próxima instrução. Um programa em linguagem simbólica do 8086 era dividido em diferentes segmentos, blocos especiais ou áreas de memórias que continham tipos específicos de informações. Existia um segmento de código (para conter o programa). Um segmento de dados (para conter os dados do programa) e um segmento de pilha (para conter a pilha do programa). Para acessar essas informações em qualquer um destes segmentos, era necessário especificar o deslocamento deste item a partir do início do segmento correspondente. Portanto, eram necessários apontadores de segmento para armazenar os endereços dos segmentos. Estes registradores incluíam o registrador de segmento de código (CS code segment), o registrador de segmento de dados (DS data segment) e o registrador de segmento de pilha (SS stack segment). Existia também um quarto registrador de segmento, chamado de registrador de segmento extra (ES extra segment), que era usado por algumas operações de string para lidar com endereçamento de memória. Endereços eram especificados usando-se endereçamento com segmento e deslocamento, na forma xxx:yyy, onde xxx era o valor no registrador de segmento e yyy era o deslocamento. Em 1980, a Intel introduziu o 8087, que adicionou instruções em ponto-flutuante ao conjunto de instruções de máquina do 8086, bem como uma pilha mais larga, de 80 bits. Muitos chips novos foram introduzidos usando essencialmente o mesmo ISA (conjunto de instruções da arquitetura) que o 8086, incluindo o 80286, em 1982 (que podia endereçar 16 milhões de bytes), e o 80386, em 1985 (que podia endereçar mais de 4 milhões de bytes de memória). O 80386 era um chip de 32 bits, o primeiro da família de chips frequentemente chamados de IA 32 (Intel Architecture, 32 bits). Quando a Intel mudou do 80286 de 16 bits para o 80386 de 32 bits, os projetistas queriam que estas arquiteturas fossem compatíveis com versões anteriores, o que significaria que programas escritos para um processador mais antigo e menos poderoso poderiam ser executados nos processadores mais novos, mais rápidos. Portanto a Intel manteve a mesma arquitetura básica e o mesmo conjunto de registradores. (Novas características foram adicionadas a cada modelo subsequente, de modo que a compatibilidade com os novos modelos não era garantida.)

A convenção de nomes usada para os registradores 80386, que vinha vindo de 16 para 32 bits, devia incluir um prefixo E (que significava extended ) de modo que, em vez de AX, BX, CX e DX, os registradores se tornassem EAX, EBX, ECX e EDX. Esta mesma convenção era usada para todos os outros registradores. Entretanto, o programador poderia ainda acessar os registradores originais, AX, AL e AH, por exemplo, usando os nomes originais. A figura 01 ilustra como isso funcionava usando como exemplo o registrador AX. Figura 01: Registrador AX, desmembrado em partes. O 80386 e o 80486 eram máquinas de 32 bits com barramentos de dados de 32 bits. O 80486 adicionou uma memória cache de alta velocidade, que melhorou significativamente o desempenho. A série Pentium começou com o processador Pentium, que tinha registradores de 32 bits e um barramento de dados de 64 bits e adotava um projeto superescalar. Isto significava uma UCP com várias ULAs que podia despachar mais de uma instrução por ciclo de relógio (i.e., executar instruções em paralelo). O Pentium II adicionou a tecnologia MMX (não foi um grande sucesso) para lidar com multimídia. O Pentium III adicionou um melhor suporte para gráficos 3D (usando instruções em ponto-flutuante). Historicamente, a Intel usou uma abordagem CISC clássica ao longo de suas séries de processadotes. A sétima geração da família de UCPs da Intel intriduziu o processador Intel Pentium IV (também conhecido como Pentium 4). Este processador difere de seus antecessores de muitas maneiras distintas, muitas das quais estão além do escopo deste texto. É suficiente dizer que o processador Pentium IV possui frequências de relógio de 1.4 e 1.7 Ghz, usa não menos que 42 milhões de transistores para a UCP e implementa a microarquitetura NetBurst (microarquitetura é um termo usado para descrever a arquitetura abaixo do conjunto de instruções). O processador Pentium IV também introduziu hyperyhreading (HT). Threads são tarefas que podem executar independentemente uma da outra dentro do contexto do mesmo processo. Uma thread compartilha código e dados com o processo pai, mas possui os seus próprios recursos, incluindo uma pilha e um apontador de instruções. Visto que threads filhas compartilham com seu pai, as threads requerem menos recursos do sistema do que se cada uma fosse um processo separado. Sistemas com mais de um processador levam vantagem no processamento de threads via separação de instruções, de modo que várias threads podem ser executadas em paralelo no microprocessador. Entretanto, o HT da Intel permite que um único processador físico simule dois processadores lógicos (ou virtuais) o sistema operacional na realidade enxerga dois processadores onde existe somente um. O HT faz isso por meio de uma mistura de recursos de chips compartilhados, duplicados e particionados, incluindo registradores, unidades matemáticas, contadores e memória cache.

Arquitetura Interna do Microprocessador 8086 O fluxograma mostrado abaixo pode ser subdividido em duas partes, chamado de Unidade de Execução (UE) e Unidade de Interface de Barramento (UIB). Unidade de Execução (UE): A unidade de execução consiste em registradores de 16-bit AX,BX, CX e DX e ponteiros como SP(Stack Pointer), BP (Base Pointer) e finalmente registros de índice como SI (Source Index) e DI (Destination Index). Unidade de Interface de Barramento (UIB): O interfaceamento da UE com o barramento de dados e o barramento de endereços do sistema é feito pela Unidade de Interface de Barramento(UIB). A UIB é composta por 5 registradores de 16 bits e uma estrutura de armazenamento de dados tipo fila. Registradores: Os oitos registradores de uso geral da UE são descritos a seguir: AX: é o chamado ACUMULADOR (o X refere-se a extended ). O AX pode ser dividido em dois registradores de 8 bits: AL e AH, sendo AL formado pelo byte menos significativo (D0 a D7), enquanto AH é constituído pelo byte mais significativo (D8 a D15), podendo cada um deles ser acessado separadamente. BX: assim como o AX, o BX também pode ser dividido em BL e BH. É o chamado registrador

de BASE, pois pode ser usado como base de endereçamento para manipulação de tabelas. CX: também pode ser dividido em CL e CH. É chamado registrador de CONTAGEM, pois além de trabalhar com dados também é usado para contagens em instruções com LOOPS na manipulação de strings. DX: pode ser dividido em DL e DH. É chamado de registrador de DADOS, pois ele pode ser usado como uma extensão do AX em operações de multiplicação e divisão. SP: é o STACK POINTER ou ponteiro de pilhas, que aponta para o topo da memória do tipo pilha usada pelo 8088. BP: este registrador, que é chamado de BASE POINTER, é usado para endereçamento de memória (geralmente relacionado a pilha, ou seja, é uma registrador de base para a pilha). Pode conter o endereço inicial (base) de uma tabela que será manipulada pela CPU. SI: SOURCE INDEX (registrador de índice que aponta para a origem dos dados que serão movimentados) é usado para indexação de tabelas no endereçamento indireto. DI: DESTINATION INDEX (registrador de índice que aponta para o destino dos dados que serão movimentados). Assim como o SI, o registrador DI é utilizado para a indexação no endereçamento indireto. Registradores de Flags: O registrador de flags contém os seguintes principais bits: ZF (Zero Flag): indica se o resultado de uma operação aritmética é igual a zero (1) ou diferente de zero (0). Se numa operação os valores são iguais o ZF = 1. SF (Sign Flag): indica se o resultado de uma operação com sinal é positivo (0), em caso contrário (1). TF (Trap Flag): permite uma operação passo a passo para debug. IF (Interrupt Flag): indica se as interrupções estão habilitadas (1) ou não (0). DF (Direction Flag): para operações com strings, se D=0 os registradores de índice serão incrementados, caso contrário (D=1) serão decrementados. OF (Overflow Flag): indica um estouro da capacidade de armazenamento de um registrador. Registradores de Segmento: Os endereços dos segmentos são armazenados nos 4 seguintes registradores da UIB: CS (CODE SEGMENT): endereça o segmento onde devem estar as instruções a serem executadas pela CPU. SS (STACK SEGMENT): endereça o segmento que está reservado ao uso da PILHA ou STACK. DS (DATA SEGMENT): como o nome diz, acessa o segmento reservado aos dados manipulados pelo 8088.

ES (EXTRA SEGMENT): é usado para acessar outro segmento que conterá dados. Normalmente, é usado para manipulação de tabelas e strings. Instruções Aritméticas: ADD: Realiza a adição de dois dados e armazena o resultado no registrador da esquerda. add al, bl INC: Incrementa em 1 o registrador especificado. SUB: Realiza a subtração de um dado por outro e armazena o resultado no registrador da esquerda. sub al, bl DEC: Decrementa em 1 o registrador especificado. CMP: Faz a comparação entre dois valores. cmp al, 1 cmp ah, [var] cmp al, ah MUL/IMUL: para multiplicações não-sinalizadas utilizamos o comando MUL. Já para multiplicações sinalizadas, o comando usado é o IMUL. Ao contrário da soma, a multiplicação é feita sempre com o registrador AX (multiplicando), que irá possuir o resultado da multiplicação de 16 bits. mul bl mov bl, 3 imul bl DIV/IDIV: Realiza a divisão de valores. Para divisões não-sinalizadas, usamos o comando DIV. Já para multiplicações sinalizadas, o comando usado é o IDIV. div bl OBS.: Nesse caso, AL tem AX/BL e AH tem AX%BL.

Instruções Lógicas: AND: Executa a função E bit-a-bit. NOT: É o operando de negação, que executa a operação bit-a-bit. OR: É o operando lógico OU, que executa a operação bit-a-bit. XOR: Operando lógico do OU EXCLUSIVO, também bit-a-bit. Instruções de Controle: JMP: Salto incondicional para outra parte do programa. JE/JZ: Salta para outra parte do programa no caso do primeiro valor ser igual ao segundo. JL/JNGE: Salta caso o primeiro operador seja menor que o segundo (núm. sinalizados). JLE/JNG: Salta caso o primeiro operador seja menor ou igual ao segundo (núm. sinalizados). JB/JNAE: Salta caso o primeiro operador seja menor que o segundo (números não-sinalizados). JBE/JNA: Salta caso o primeiro operador seja menor ou igual ao segundo (núm. nãosinalizados). JO: Salta caso haja estouro de capacidade (overflow). JNE/JNZ: Salta se o primeiro valor for diferente do segundo. JNL/JGE: Salta se o primeiro valor for menor do segundo. JNLE/JG: Salta caso o primeiro seja menor ou igual ao segundo (núm. não-sinalizados). JNB/JAE: Salta se o primeiro valor não for menor que o segundo. JNBE/JA: Salta se o primeiro valor não for menor ou igual ao segundo. JNO: Salta se não houver estouro de capacidade. Instruções de Transferências de Dados: MOV: Move dados para registradores, ou dos registradores para a memória. mov AL, 30, move para AL o valor 30 Diretivas: DB: Definição de Byte (1 byte). DW: Definição de Word (2 bytes). HLT: usado para acabar com a execução (parar o processador).