Você está na página 1de 13

Captulo

8086

O 8086 possui dois microprocessadores no mesmo chip, que se denominam respectivamente Unidade de Execuo e Unidade de Interface de Barramento. Cada um possui os seus prprios registos e a sua seco lgico-aritmtica, trabalhando assincronamente um com o outro de modo a proporcionar a mxima potncia de trabalho 1. UNIDADE DE INTERFACE DE BARRAMENTO A unidade de interface de barramento (BIU - Bus Interface Unit) a parte do microprocessador que proporciona a comunicao com o meio exterior, atravs de 16 linhas de dados bidireccionais e de 20 linhas de endereos. A BIU responsvel por todas as operaes externas que envolvam o barramento. As suas funes especficas so busca das instrues, arranjo sequencial dos bytes de instruo no registo interno, busca e armazenamento dos operandos, realocao de endereos e controle de barramentos. Para implementar estas funes a BIU possui: registos de segmento, registos de comunicao interna, indicador de instruo, fila de registos, somador de endereos e lgica de controlo de barramentos. A BIU utiliza o mecanismo chamado fluxo de instruo, para implementar a arquitectura pipeline. O registo fila permite que haja uma pr-busca at 6 bytes de cdigo de instruo (no caso do 8088 so s 4 bytes). Sempre que o registo fila apresentar lugar para 2 bytes (no 8088 para 1 byte) e no mesmo tempo a EU no estiver executando operaes no estiver a executar operaes de escrita ou leitura na memria, a BIU estar livre para executar uma operao de pr-busca. Por possuir um barramento de dados de 16 bits, a BIU do 8086 realiza uma pr-busca de dois bytes por ciclo de memria. O registo fila do tipo FIFO (First In First Out), ou seja o primeiro a entrar o primeiro a ser retirado pela EU. Quando o registo de fila est completo e a EU no necessita aceder operandos em memria, a BIU no executa ciclos de barramento. Estes intervalos de tempo por inactividade das vias que podem acontecer entre ciclos, so chamados de estados inactivos (Idle States). Caso a BIU esteja processando um pr-busca e a EU comandando uma operao de leitura/escrita na memria ou E/S a BIU primeiramente completa o seu trabalho e s depois atende o pedido da EU. 2. UNIDADE DE EXECUO A unidade de execuo responsvel pela descodificao e execuo de todas as instrues. A EU constituda por uma unidade aritmtica e lgica, flags de estado e controle, oito registos de uso geral registos temporrios e lgica de controle de fila. 1-1 Microprocessadores III

8086
A EU busca as instrues no registo de fila da BIU, processa a descodificao destas instrues, gera endereos de operandos se necessrio, transfere estes endereos BIU, requisitando ciclos de leitura ou escrita na memria ou E/S e processa a operao especificada pela instruo sobre os operandos. Durante a execuo a EU testa as flags de estado e controle alterando-os se necessrio conforme o resultado da instruo corrente. Geralmente, o registo fila contm pelo menos, um byte de cdigo de instruo fazendo com que a EU no necessite de esperar pela busca na memria. Quando a EU executa uma instruo de desvio ou salto, ela transfere o contedo para uma nova posio de memria. Neste instante a BIU automaticamente, reinicia a fila (reseta-o), passando a executar a pr-busca das instrues na nova localizao.

Figura 1- Unidade de execuo e de busca num pentium

Todos os endereos manipulados pela EU so de 16 bits. Entretanto, atravs da recolocao de endereamento executada pela BIU, a EU pode aceder qualquer localizao dentro do Megabyte de memria disponvel. Os microprocessadores da gerao anterior executam um programa repetindo ciclicamente os seguintes passos: Busca a prxima instruo na memria L um operando (se for requerido pela instruo) Executa a instruo Escreve o resultado se for requerido pela instruo

Estes passos so executados em srie, acarretando uma utilizao inadequada dos barramentos e produzindo perda de tempo necessrio.
1-2

Microprocessadores III

Captulo

8086

3. REGISTOS DO 8086 Os registos podem ser classificados em 4 grupos 1. 2. 3. 4. Registos gerais ou de dados Registos ponteiros e de ndice Registos de Segmento Registos de estado ou flags e indicadores de instruo

3.1 Registos de dados Cada um dos registos de dados AX, BX, CX e DX, pode ser usado como registo de 16 bits ou como dois registos separados de 8 bits, divididos em 2 bytes de 8 bits cada identificados separadamente, como AH a DH e AL a DL, em que H refere-se posio como byte mais significativo e L refere posio como byte menos significativo. Apesar destes registos serem usados principalmente para a aritmtica de 8 e 16 bits, operaes lgicas e transferncia de dados, em alguns casos estes registos possuem funes especficas: AX (acumulador) O registo AX funciona como acumulador e, como tal, est envolvido em tipos especficos de operaes com IN (entrada de dados), OUT (sada de dados), multiplicao, diviso e operaes de ajuste decimal codificado em binrio. BX (Base) O registo BX frequentemente usado como um registo base para referenciar posies de memria. Nesses caso, o BX armazena o endereo base de uma tabela ou vector, no qual posies especficas so referenciadas adicionando-se um valor de deslocamento. CX (Contador) O CX funciona como um registo de 16 bits para contar o nmero de bytes ou palavras num dado tipo caractere especifico (string), durante operaes com cadeias de caracteres e em operaes interactivas. Pe exemplo se n palavras devem ser movidas de uma rea de memria para outra, o registo CX conteria, inicialmente o nmero total de palavras a serem movidas e seria decrementado medida que cada palavra ou byte fosse transferido. CL usado como um contador de 8 bits para instrues de deslocamento e rotao. DX (Dados) O DX usado em operaes de multiplicao para armazenar parte de um produto de 32 bits, ou em operaes de divises para armazenar o resto. Pode tambm ser usado em operao IN e OUT para especificar o endereo de uma porta de E/S.

Microprocessadores III

1-3

8086
3.2 Registos Ponteiro e de ndice Os registos ponteiros e de ndice so usados para armazenar valores de deslocamento a fim de aceder a posies de memria muito usadas, tais como a posio do tipo da pilha ou blocos de dados em um segmento de arranjo vectorial. Os registos ponteiros, SP e BP, so usados para armazenar deslocamentos no segmento de pilha corrente da memria, enquanto os dois registos de ndice SI e DI, so usados para armazenar deslocamentos nos segmentos de dados da memria. Em algumas ocasies existem excepes para essas regras gerais, como em operaes em que dados so transferidos de uma posio para outra, com as posies fonte e destino indicadas por SI e DI, respectivamente. Uma caracterstica importante dos quatro registos deste grupo que podem ser usados em operaes aritmticas e lgicas, possibilitando, assim, que os valores de deslocamento neles contidos sejam resultado de operaes anteriores. SP (Pilha) o ponteiro de pilha, que aponta para a posio do topo da pilha na memria (ou seja, o segmento de pilha corrente). O ponteiro de pilha o registo usado, implicitamente, pelas instrues PUSH e POP, que guardam e retiram dados da pilha. BP (Base) o ponteiro de base, que permite o acesso de dados dentro do segmento de pilha. Usualmente, este registo utilizado para referenciar parmetros que devem ser acedido atravs da pilha. SI (ndice) usado como registo ndice em alguns modos de endereamento indirecto. usado, tambm, para armazenar um deslocamento que vai enderear a posio do operando fonte em operaes com strings. DI (ndice) usado com registo ndice em alguns modos de endereamento indirecto. usado, tambm para armazenar a posio de um operando destino em operaes com string. 3.3 Registos de segmento As reas de memria alocadas para o cdigo de programa, os dados e a pilha so endereadas separadamente, embora se possam misturar a qualquer momento. Existem quatro blocos de memria endereveis disponveis, chamados segmentos, cada um com 64Kbytes. Os registos de segmentos CS, DS, SS e ES so usados para apontar base dos quatro segmentos endereveis de memria, segmento de cdigo, segmento de dados, segmento de pilha e segmento extra.

1-4

Microprocessadores III

Captulo

8086

IP Ponteiro de instruo usado para localizar dentro do segmento de cdigo corrente a posio da prxima instruo de cdigo a ser executada. IP automaticamente incrementado em funo do numero de bytes da instruo previamente executada. 3.4 Registo de Flags O registo de flags um registo de 2 bytes, contendo nove flags de um bit, que so usadas para indicar vrias condies durante a execuo de um programa. Os bits 0, 2, 4, 5, 6, 7 e 11 contm flags de estado que denotam os resultados de operao no programa. Os bits 8 a 10 contm flags de controlo e os bits 1, 3, 5 e 12 no so usados.
Bit 15 14 13 12 11 DF 10 IF 9 TF 8 SF 7 Designao OF Flag de overflow: qualquer resultado de uma operao aritmtica sinalizada, que exceda os limites da rea destinada produz um excesso ou overflow. Flag de direco: usada para indicar a direco em que as instrues de string so processadas em relao aos registos SI e DI. Flag de interrupo: uma vez a 1 habilita as interrupes INT externas, a 0 inibe as interrupes INT externas Trap flag: uma vez a 1, acorrer aps a execuo da prxima instruo, uma interrupo passo a passo. Esta flag colocada a zero pela prpria interrupo Flag de sinal: usado para indicar se um numero positivo ou negativo. O bit mais significativo de qualquer valor em complemento de dois usado para indicar um valor positivo (0) ou negAtivo (1). Flag de zero: colocado a zero quando o resultado de um operao lgica ou aritmtica for zero. Flag de carry auxiliar: utilizada pelas instrues de ajuste decimal. Reflecte o estado de vai um entre os nibbles do byte inferior de um resultado aritmtico. Flag de paridade: se o byte menos significativo do resultado de uma operao aritmtica ou lgica apresentar um numero par de 1s, o bit 1-5 Funo

ZF 6 5 4 3 2 PF AF

Microprocessadores III

8086
de paridade est a 1, caso contrrio est a 0. 1 0 CF Flag de carry: est a zero ou um conforme a instruo processada

4. ENDEREOS SEGMENTADOS O 8086 um processador de 16 bits, e no pode trabalhar directamente com nmero maiores que 16 bits, teoricamente isto significaria que o 8086, deve estar habilitado para aceder somente a 216 ou seja 64 Kbytes de memria. No entanto o 8086 possui 20 linhas de endereos pelo que podemos enderear 1024 Kbytes. Para conseguir um espao de endereamento com registos de 16 bits o 8086 utiliza os registos segmentados, em que cada um dos segmentos corresponde a 64 KB de memria. Cada segmento comea por um pargrafo (endereo divisvel por 16). Para aceder a um endereo individualmente, utiliza-se dois registos de 16 bits um que indica a base do segmento um outro que indica o offset, que aponta para a localizao num determinado segmento. Porque os offset so sempre relativos ao comeo de um segmento, eles so designados por endereos relativos ou deslocamentos relativos. Uma base e um deslocamento formam o que se designa por endereo segmentado. O 8086 converte um endereo segmentado de 32 bits num endereo fsico de 20 bits. Na realidade o que acontece que o CPU desloca a base de 4 bits esquerda e adiciona-lhe o valor do deslocamento, para criar os 20 bits de endereo. Exemplo: O endereo 1666:0001, em que a base 1666 e 0001 o deslocamento, para se obter o endereo fsico fazer 16660+0001=16661h.

Tipo de referncia Memria Busca de instruo Operao na pilha Varivel (DADOS) Fonte para instruo de string Destino para instrues de string BP usado como registo BASE BX usado como registo base

Segmento BASE CS SS DS DS

Segmento Alternativo Nenhum Nenhum CS, SS, ES CS, SS, ES

Deslocamento IP SP SI

ES

Nenhum

DI

SS

CS, DS, ES

DS

CS, SS,ES

1-6

Microprocessadores III

Captulo

8086

5. CICLOS BARRAMENTO Os ciclos de barramento so implementados pelo CPU para acesso memria a dispositivos de entrada/sada e ao controlador de interrupes, estes correspondem a uma sequncia de eventos em que se inicia com a colocao de um endereo no barramento do sistema, seguido de uma transferencia de dados tipo leitura ou escrita. Durante estas operaes, o CPU produz uma srie de sinais de controle de sincronizao dos eventos. O ciclo bsico composto de, no mnimo 4 perodos de relgio, chamados estados T (T1, T2, T3 e T4). Durante T1, a BIU coloca um endereo no barramento. Para o ciclo de escrita de memria, o dado colocado no barramento durante o perodo T2 e a permanece durante T3 e T4. Para o caso do ciclo de leitura de memria, o dado a ser lido deve ser colocado no barramento durante T3 e T4. Caso no haja a ocorrncia de um ciclo de barramento, a BIU executa o estado IDLE (repouso). Durante estes estados no existe actividade no barramento. Cada estado IDLE tem a durao de um perodo de relgio e qualquer quantidade destes ciclos pode ser inserida entre os ciclos de barramento.

Figura 2- Diagrama temporal ciclo de escrita e INTA

Microprocessadores III

1-7

8086

Caso o registo fila esteja cheio e a EU no necessite da BIU para operaes de leitura e escrita na memria, o CPU executa estados IDLE. Por outro lado, podero ocorrer estados de WAIT (espera) durante os ciclos de barramento, em resposta a um pedido de hardware pela entrada READY. A existncia de estados de espera permite a sincronizao entre dispositivos de memria lentos e a CPU, ou pelo circuito gestor do barramento.

Figura 3- Diagrama temporal ciclo de leitura

6. ORGANIZAO E O INTERFACE DE MEMRIA O espao de memria do 8086 implementado por dois bancos de memria de 512KB independentes. Denominados banco par e banco mpar. Dados associados com endereo a terminar em 0 residem no banco par e os dados associados com endereos a terminar com1 residem no banco mpar. Os bits de endereos de A1 a A19 seleccionam e acedem a uma posio de memria. Assim sendo, estes sinais so aplicados aos dois bancos em paralelo. A0 e o sinal BHE (Bank High Enable) so utilizados como sinais de seleco do banco. Lgica 0 em A0 identifica um endereo par de um byte de dados e faz com que esse banco de memria fique acessvel. Por outro lado, o BHE igual a 0 permite ao banco mpar ser acedido

1-8

Microprocessadores III

Captulo

8086

por um endereo mpar de um byte de dados. Cada um dos bancos de memria providencia metade dos i6 bits de dados. Quando o 8086 acede a uma palavra de dados de 16 bits em um endereo par, os dois bancos so acedidos ao mesmo tempo. Tanto A0 como BHE esto a nvel lgico 0. Neste caso, um byte de dados transferido ou recebido pelo banco par e pelo banco mpar simultaneamente. Esta palavra de 16 bits transferida pela linha de dados completa (D0-D15). Quando a memria for acedida por endereo par diz-se que os bancos de memria esto alinhados e as operaes de transferncia fazem-se em apenas um ciclo barramento. Uma palavra em endereo mpar diferente. dito que os bancos esto no-alinhados. Isto , o byte menos significativo est localizado no endereo menor no banco mpar, como podemos ver, o byte mpar da palavra est localizado no endereo X+1 e o byte para no endereo Y. So necessrios dois ciclos para aceder a esta palavra. No primeiro ciclo, o byte mpar que est localizado no endereo X+1 no banco mpar, acedido colocando-se os sinais A0=1 e BHE=0 e os dados so transferidos por D8 a D15. Logo aps, o 8086 automaticamente incrementa o endereo (A0=0). Isto representa o prximo endereo da memria, que par. A seguir, inicia-se um segundo ciclo de memria. Durante esse ciclo, o byte para, localizado em Y no banco par acedido. A transferncia realizada nos bits D0 a D7 das linhas de dados, sendo A0=0 e BHE=1. Como se observa para uma palavra no-alinhada necessrio mais tempo transferncia. Alm disso, o CPU 8086 ter de, internamente, alinhar as palavras, sempre que acontecer uma transferncia no-alinhada. Este alinhamento transparente para o utilizador. Operando em posies de memria podem ser armazenados ou acedidos em tamanhos de byte ou de palavra, de acordo com as instrues usadas. Referncias a bytes ou +palavras podem enderear em memrias pares ou mpares. Quando dados de tamanho de uma palavra so armazenados na memria, o byte que contm os bits mais significativos da palavra armazenado no endereo de memria mais alto, enquanto o byte menos significativo armazenado no endereo de memria mais baixo. Por exemplo o valor AABB armazenado no endereo A25E estaria localizado da seguinte maneira:
Endereo A25E A25F Valor BB AA

7. SISTEMA DE ENTRADA / SADA A maneira utilizada pelo 8086 para aceder aos dispositivos de entrada/sada semelhante utilizada para a memria principal, ou seja estas transferncias so realizadas atravs do barramento multiplexado dos dados e endereos. Atravs deste

Microprocessadores III

1-9

8086
barramento paralelo fcil fazer a interface com os dispositivos controladores. Estas interfaces podem dar entrada/sada de dados na forma de bits bytes ou palavras. 7.1 Espao de endereamento E/S e transferncia de dados As portas de entrada ou sada num sistema com o 8086 podem transferir informao de 8 ou 16 bits. A porta seleccionada acedida por um endereo E/S. Este endereo especificado na instruo que executa operaes de E/S. Os endereos so de 16 bits e aparecem nas linhas AD0-AD15 do barramento multiplexado. Os bits A16-A19 so no nvel lgico baixo, durante o perodo de endereamento (T1) de todos os ciclos de barramento E/S. Atravs do sinal de controlo M/IO, o CPU informa ao circuito externo que o endereo no barramento para uma porta de E/S. Por esta razo, este sinal pode ser usado para habilitao do circuito da latch de endereo, ou descodificador externo. O espao dedicado aos dispositivos E/S, possui uma rea independente de 64 KB, podendo comportar 64Kb de portas de 8 bits ou 32KB de portas de portas de 16 bits. A rea compreendida entre o endereo 0000h e 00FFh chamada a pgina zero, algumas instrues so especificadas para trabalhar nesta rea. As transferncias entre o CPU e os dispositivos externos so realizados atravs do barramento de dados. A transferencia de dados palavra (16 bits) requer de um a dois ciclos barramento. Para assegurar a necessidade de somente um ciclo, os dados para as portas de E/S devero estar alinhados nos endereos pares. Por outro lado as transferncias de dados byte sempre requerem um ciclo de barramento. Desta forma, no importa se o endereo par ou mpar. No 8086 a transferncia de endereos pares so realizadas sobre as linhas D0-D7 e as mpares so realizadas sobre as linhas D8D15. Para aceder sequencialmente a um dispositivo perifrico, este deve estar ligado de tal modo que estejam em endereos pares ou mpares. Desta forma, todas as transferncias de dados tero lugar na mesma parte da via de dados 7.2 E/S por mapeamento de memria Os dispositivos de entrada sada tambm podem ser alocados no espao de memria do 8086. Devido ao facto de os dispositivos actuarem como um endereo de memria, o CPU vera os dispositivos como posio de memria e no saber distinguir as duas situaes. Esta tcnica de mapeamento de E/S de memria proporciona flexibilidade de programao. Qualquer instruo que referencia a memria pode ser usada para aceder um a porta E/S localizada no espao de memria. Por exemplo a instruo MOV, pode transferir dados entre uma porta lgica e um registo, ou as instrues AND, OR e TEST podero ser usadas para manipular bits nos registos dos dispositivos de E/S, alm disso, E/S em memria mapeada apresenta a vantagem de poder utilizar os vrios modos de endereamento do processador.

1-10

Microprocessadores III

Captulo

8086

Figura 4- multi-master bus interface

Microprocessadores III

1-11

8086

Figura 5- Sistema tpico utilizando o 80186/80188

1-12

Microprocessadores III

Captulo

8086

Referncias

8086/8088 Hardware, Software, Aplicaes, Projectos - Wilson Alonso Dias Jr. The 8086 family Design, Programming and Interfacing John Uffenbeck http://www.intel.com http://www.x86.org

Microprocessadores III

1-13