Você está na página 1de 41

Microprocessadores

Prof. Arthur Braga

Tópicos
„ Arquitetura Básica 8086/8088.
„ Registradores e Flags do 8086.
… Registradores de Finalidade Geral.
… Registradores Apontadores de Pilha.
… Registradores de Indexação.
… Registradores de Segmento.
… Registrador de Flags.
… Ponteiro de Instrução.
„ Emulando o 8086.
„ Modos de Endereçamento do 8086
… Endereçamento da Memória de Programa.
… Endereçamento da Memória de Dados.
„ Modos Mínimo e Máximo
„ Acesso à Memória no 8086
„ Programando - Uso da Pilha pelo Compilador.

1
As CPUS 8086/8088

As CPUs 8086 / 8088

Estrutura das CPUs 8086 / 8088

(1978)

(1979)

Característica Comum: endereçamento a 20 bits,


podendo acessar 1 Mbyte de memória.

2
As CPUs 8086 / 8088

As CPUs 8086 / 8088

≈ 29.000 transístores

3
As CPUs 8086 / 8088

?
mínimo

As CPUs 8086 / 8088

A CPU é dividida em
duas unidades
independentes:

• EU – Unidade de
Execução –
responsável pela
decodificação e
execução das
instruções.

• BIU – Unidade de
Interface de
Barramento –
responsável pela
interface com o
barramento
externo.

4
As CPUs 8086 / 8088
• Toda vez que a EU está pronta para executar uma nova instrução, ela
retira um código do topo da Fila de Códigos na BIU.
• Se a Fila de Códigos está vazia, então a BIU executa um ciclo de busca
(“fetch”) e a EU é obrigada a aguardar esse ciclo.
• Raramente a Fila de Códigos estará vazia.
Ciclos de busca e execução:
Se memória ou I/O devem
ser acessados durante a
execução de uma
instrução, então a EU
informa à BIU sobre essa
necessidade – que será
atendida com a geração
de ciclos de barramento
pela BIU.

As CPUs 8086 / 8088

OBSERVAÇ
OBSERVAÇÃO:

Não confundir a fila de 6 bytes da BIU com memória


cache. Os códigos que são colocados nessa fila são as
instruções (códigos de operação ou opcodes)
opcodes que serão
executados pela EU.
Os dados nunca são colocados nessa fila.

Como os registradores são utilizados ?

5
Registradores e Flags do 8086

Registradores e Flags do 8086


Registradores e Flags no 8086:

‰ São 4 registradores de finalidade geral (16 bits) (AX,BX,CX e DX).


DX)
‰ São 2 registradores apontadores de pilha (16 bits) (SP e BP).
BP)
‰ São 2 registradores de indexação (16 bits) (SI e DI).
DI)
‰ São 4 registradores de segmento (16 bits) (CS,DS,SS e ES).
ES)
‰ Há 1 ponteiro de instrução (16 bits) (IP).
(IP)
‰ E 1 resgistrador de estado (flags) (16 bits) (PSW).
(PSW)
‰ O 8086 importa todo o conjunto de registradores do 8085.

6
Registradores e Flags do 8086

Como são
utilizados os
registradores
?

Registradores e Flags do 8086

Registradores de Finalidade Geral

Cada registrador de finalidade geral (AX , BX , CX e DX)


pode ser acessado como um registrador de 16 bits ou
como dois registradores de 8 bits:

AX = AH:AL , BX = BH:BL , CX = CH:CL e DX = DH:DL

Todos os registradores de finalidade geral podem ser


usados como operandos em operações lógicas e
aritméticas, de 8 ou 16 bits.

7
Registradores e Flags do 8086

Registradores de Finalidade Geral

AX – Acumulador Primário:
‰ Todas as operações de I/O são realizadas com o uso auxiliar deste
registrador.
‰Operações que utilizam dados imediatos necessitam de menos memória
quando feitas através de AX.
‰Algumas operações com strings e instruções aritméticas pedem o uso
deste registrador.
‰Geralmente, é usado, pelos compiladores, para guardar valores
retornados de subrotinas.

Registradores e Flags do 8086

Registradores de Finalidade Geral

BX – Registrador Base:
‰ É o único registrador de finalidade geral que pode ser utilizado no
cálculo de endereços de memória.
‰Todas as referências à memória que usam esse registrador no cálculo
de endereço tomam o registrador de segmento DS como segmento
padrão.

8
Registradores e Flags do 8086

Registradores de Finalidade Geral

CX – Contador:
‰ É decrementado durante as operações com loops e strings.
‰Tipicamente, é usado para controlar o número de repetições de uma
instrução antecedida pelo prefixo REP.
REP
‰Também é usado para controlar rotações e deslocamentos de vários
bits.

Registradores e Flags do 8086

Registradores de Finalidade Geral

DX – Endereçador de I/O e Registrador de Dados:


‰ Foi-lhe dado o nome de registrador de dados principalmente por força
dos mnemônicos.
‰Em algumas operações de I/O, fornece o endereço, coisa que nenhum
outro registrador pode fazer.
‰Também utilizado em operações aritméticas, incluindo multiplicação e
divisão.
‰Pode ser usado por compiladores, juntamente com AX, para guardar
valores retornados de subrotinas.

9
Registradores e Flags do 8086

Registradores de Finalidade Geral

Operações podem ser realizadas apenas em partes de 8


bits desses registrados, afetando o conjunto de 16 bits:

mov ax, 2155h AX = 2155h


mov ah, 43h AX = 4355h

Operações que operem com uma parte de 8 bits, não


afetarão a outra parte do registrador de 16 bits:

mov dx, 21FFh DX = 21FFh


inc dl DX = 2100h

Registradores e Flags do 8086

Registradores Apontadores de Pilha

Os registradores SP e BP são usados para acessar dados


no segmento de pilha.
A pilha é particularmente importante no que diz respeito ao
uso de subrotinas.
subrotinas Quando uma instrução chama uma
subrotina, é preciso marcar qual instrução do programa
deve ser executada após o términa da subrotina.
Os registradores SP e BP também podem ser usados
como operandos em operações lógicas e aritméticas de 16
bits.
Outra aplicação para a pilha é a possibilidade de alocaç
alocação
dinâmica de variá
variáveis.
veis As variáveis alocadas na pilha são
acessadas com o auxílio de BP.

10
Registradores e Flags do 8086

Registradores Apontadores de Pilha

SP – Ponteiro de Pilha (“Stack Pointer”):


‰ Armazena o offset do endereço do topo da pilha, controlando a
alocação dinâmica de variáveis e o empilhamento de endereços de
retorno de subrotinas.
‰Todas as referências ao SP, por definição, usam o registrador SS.

BP – Ponteiro de Base:
‰ Permite acessar dados alocados na pilha.
‰Tipicamente é usado para acessar parâmetros que foram passados via
pilha para uma determinada subrotina.

Registradores e Flags do 8086

Registradores de Indexaç
Indexação

Os registradores de Indexação (SI


SI e DI):
DI
‰ São usados para acessar dados na memória de dados.
‰São extensivamente usados nas operações com strings.
‰Podem ser usados como operandos em todas as operações lógicas e
aritméticas de 16 bits.

11
Registradores e Flags do 8086

Registradores de Segmento
Quando projetou o 8086, a Intel se preocupou em facilitar o acesso e o
gerenciamento de memória desta CPU que poderia chegar a 1 MByte.
Por isso, decidiu particionar essa memória em segmentos de 64 K (16
bits) endereços. Assim, todo acesso à memória do 8086 é feito através
de segmentos de 64 K endereços.

Os Registradores de Segmento funcionam como selecionadores


destas faixas de endereçamento. Cada registrador especifica o início
de uma faixa de 64 K endereços consecutivos.

O acesso a endereços dentro de um segmento é feito através de um


deslocamento (offset)
(offset) a partir do endereço-base.

São 4 tipos de segmentos considerados: CÓDIGO, DADOS, PILHA e


EXTRA.

Registradores e Flags do 8086

Registradores de Segmento

CS – Segmento de Código (“Code Segment”):


‰ Todos os acessos ao código de programa tomam este registrador
como seletor. O “offset”
offset” é o registrador IP.
IP

DS – Segmento de Dados (“Data Segment”):


‰ Todo acesso a dados usa este registrador como referência, mas há 3
exceções:
‰ Endereços para acessos à pilha usam o registrador SS.
SS
‰ Endereços para acesso a dados que usam o BP são calculados a
partir de SS.
SS
‰ Operações com strings, que usam DI no cálculo do endereço, são
feitas usando ES.
ES

12
Registradores e Flags do 8086

Registradores de Segmento

SS – Segmento de Pilha (“Stack Segment”):


‰ Todos os acessos a dados que utilizam os registradores SP ou BP
tomam como referência este registrador.

ES – Segmento Extra (“Extra Segment”):


‰ Operações com strings que usam DI para calcular o endereço são
feitas usando o registrador ES para definir o segmento.

Registradores e Flags do 8086

Palavra de Estado do Programa (PSW) ou Registrador de Flags

C – Carry – reflete o “vai um” do bit mais significativo em operações


aritméticas (8 ou 16 bits). Também modificado por algumas instruções
de rotação e deslocamento.
P – Paridade – indica a paridade do byte menos significativo do
resultado de uma operação. (P=1, número par de “1s” no byte menos
significativo; P=0, caso contrário).

13
Registradores e Flags do 8086

Palavra de Estado do Programa (PSW) ou Registrador de Flags

A – Carry Auxiliar – reflete o “vai um” do bit 3 em uma operação de


8 bits.
Z – Flag Zero – indica se uma operação teve zero como resultado
(Z=1, se o resultado da operação for zero; Z=0, caso contrário).

Registradores e Flags do 8086

Palavra de Estado do Programa (PSW) ou Registrador de Flags

S – Flag de Sinal – é igual ao bit de mais alta ordem do resultado


de uma operação aritmética (S=0, resultado positivo; S=1, caso
contrário).

T – Armadilha (“Trap”) – para a depuração de programas – este bit


coloca o 8086 no modo passo a passo, de forma a invocar uma
exceção após a execução de cada instrução.

14
Registradores e Flags do 8086

Palavra de Estado do Programa (PSW) ou Registrador de Flags

I – Interrupção – habilita ou desabilita a interrupção pedida pelo pino


INTR (I=1, interrupção habilitada).

D – Direção – determina se as operações com strings vão


incrementar ou decrementar os registradores de indexação SI e DI
(D=1, SI e DI serão decrementados, a string será acessada de seu
endereço mais alto para o mais baixo; D=0, ocorre o contrário).

Registradores e Flags do 8086

Palavra de Estado do Programa (PSW) ou Registrador de Flags

O – Overflow – indica um overflow de magnitude, em aritmética


binária com sinal.

15
Registradores e Flags do 8086

Palavra de Estado do Programa ou Registrador de Flags

Exemplos de usos do registrador de flags:

a)If (a<b) { printf (“a<b”) ; a-b , testa o flag S de sinal ( jns )


X=b-a;
...}

b) If (a==b) { printf (“a==b”) ; xor (a,b) , a = b testa o flag Z de zero ( jnz )


X = a*12;
...}

Registradores e Flags do 8086

Ponteiro de Instruç
Instrução

O Ponteiro de Instruç
Instrução (IP) e o registrador CS, juntos,
são responsáveis por marcar o endereço da próxima
instrução a ser executada.

Como começar o estudo


do uso dos registradores
e Flags do 8086 ?

16
Emulando o 8086

www.emu8086.com

Emulando o 8086

www.emu8086.com

17
Emulando o 8086

www.emu8086.com

Modos de Endereçamento

18
Modos de Endereçamento
Geraç
Geração de endereç
endereço fí
físico
Registradores Internos – 16 bits Endereço Físico – 20 bits ?
A geração do endereço físico envolve a combinação de um valor
“offset”
offset” (desvio ou deslocamento) de 16 bits contido em um registrador ou
explicitado, com um valor base em um registro de segmento (16 bits).

base + offset = endereço físico


Tipo de referência Segmento Base Segmento Base Offset
à memória padrão alternativo
Busca de instrução CS - IP

Operação na pilha SS - SP

Variáveis DS CS, SS, ES *


Fonte para string DS CS, SS, ES SI

Destino para string ES - DI

BP como registro base SS CS, DS, ES *

BX como registro base DS CS, SS, ES *

Modos de Endereçamento
Geraç
Geração de endereç
endereço fí
físico

Deslocamento de 4 bits a esquerda

início do
Seletor:Seletor:
XXXX XXXX XXXX XXXX 0XXXX
000 segmento

Offset: 0 0 0 0 YYYY YYYY YYYY YYYY (deslocamento)

End. Físico: ZZZZ ZZZZ ZZZZ ZZZZ YYYY (20 bits)

NOTAÇ
NOTAÇÃO PARA O ENDEREÇ
ENDEREÇO FÍ
FÍSICO DE UM BYTE:

Seletor : Offset

Registrador de Segmento Registrador ou Valor

19
Modos de Endereçamento
Geraç
Geração de endereç
endereço fí
físico
A maioria das variáveis (operandos da memória) normalmente está
localizada no segmento de dados corrente, embora um programa possa
instruir a BIU para acessar uma variável em qualquer um dos segmentos
endereçáveis.
O valor “offset” de uma variável na memória é calculado pelo EU. Este
valor é baseado no modo de endereçamento especificado pela instrução. O
resultado é denominado Endereço Efetivo (EA) do operando.

Modos de Endereçamento
1) Modos de endereç
endereçamento da memó
memória de programa
Sempre a busca de instrução é feita com CS+IP.
CS+IP Porém, instruções de jump e
call podem modificar o conteúdo do IP de três maneiras:
a) Endereç
Endereçamento relativo (programa)
• Um deslocamento de 8 ou 16 bits, especificado de forma imediata é
adicionado ao IP (adição binária com sinal);
• Como não altera CS, o salto é intra-segmento (limitado em 64k).
b) Endereç
Endereçamento direto (programa)
• Os valores de IP ou de IP e CS são especificados na instrução de forma
imediata;
• Esta operação é classificada como salto near ou salto far.
Near – altera IP (intrasegmento);
Far – altera IP e CS (intersegmento).
c) Endereç
Endereçamento indireto (programa)
• O dado na memória é interpretado como um endereço para um jump ou
call. Pode ocorrer de duas formas: (i) intrasegmento (modifica apenas IP)
ou (ii) intersegmento (modifica IP e CS).

20
Modos de Endereçamento
1) Modos de endereç
endereçamento da memó
memória de programa

E o endereçamento para a memória de dados ?

Modos de Endereçamento
2) Modos de endereç
endereçamento da memó
memória de dados
Seis classes: Imediato, Direto, Indexado, Implicado, Relativo à Base ou
Pilha.
a) Endereçamento imediato – Nesta forma de endereçamento, os
operandos estão definidos nos bytes seguintes ao código da operação. O
dado a ser operado é obtido do segmento de código.

21
Modos de Endereçamento
2) Modos de endereç
endereçamento da memó
memória de dados
b) Endereçamento direto – Os dois bytes que se seguem ao código da
instrução constituem o offset do endereço (o seletor é DS) físico do dado a
ser acessado.

Obs: o dado a ser operado é obtido do segmento de dados.

Modos de Endereçamento
2) Modos de endereç
endereçamento da memó
memória de dados
c) Endereçamento direto, indexado – É obtido com o uso de SI (no
segmento de dados) ou DI (no segmento extra) como Indexador.

d) Endereçamento Implicado – Este modo é uma degeneração do


anterior. É obtido quando não se especifica qualquer deslocamento.

22
Modos de Endereçamento
2) Modos de endereç
endereçamento da memó
memória de dados
e) Endereçamento relativo à base – É utilizado um registrador (BX ou
BP) para fornecer todos os modos de endereçamento já descritos, com
exceção do imediato, estão disponíveis neste modo.
De forma simplificada, basta somar BX ou BP aos modos anteriores.
Existe duas maneiras de implementação:
• Relativo à memória de dados, neste caso, usam-se BX e DS;
• Relativo à pilha, usam-se BP e SS.
Exemplos:

Modos de Endereçamento
2) Modos de endereç
endereçamento da memó
memória de dados
e) Endereçamento relativo à base
Exemplos:

23
Modos de Endereçamento
2) Modos de endereç
endereçamento da memó
memória de dados
f) Endereçamento relativo à pilha – Todos os endereçamentos relativos
à base também servem para a pilha, basta substituir BX por BP e, com
isso, usa-se SS como segmento.
Exemplos:

Modos de Endereçamento
2) Modos de endereç
endereçamento da memó
memória de dados

Selecione view
Selecione memory

24
Modos de Endereçamento
2) Modos de endereç
endereçamento da memó
memória de dados

Selecione view
Selecione memory

EXERCÍCIO PARA CASA: Localize na memória dados armazenados com


EXERCÍ
os modos de endereçamento comentados.

Modos Mínimo e Máximo

25
Modos Mínimo e Máximo
A CPU 8086 é, em verdade, um dos componentes de um sistema com
diversos Circuito Integrados. Por exemplo:
• Gerador de Clock;
• Controlador de barramento;
• Latch não-inversor;
• Transceiver inversor.

EXEMPLO:

Modos Mínimo e Máximo

Drivers – Para ampliar a capacidade de corrente.


Receivers – Para retirar os sinais dos barramentos.
Transceivers – O conjunto Driver + Receiver.

26
Modos Mínimo e Máximo

Drivers – Para ampliar a capacidade de corrente.


Receivers – Para retirar os sinais dos barramentos.
Transceivers – O conjunto Driver + Receiver.
Latch – Utilizado para guardar sinais do barramento por um curto período
de tempo.

Modos Mínimo e Máximo


VARIEDADE DE MODOS DE FUNCIONAMENTO:
• Monoprocessamento (uma única CPU);
• Multiprocessamento (mais de uma CPU);

SELEÇ
SELEÇÃO DOS MODOS DE FUNCIONAMENTO:
• Modo mínimo (MN /*MX = 1);
• Modo máximo (MN /*MX = 0);
No modo multiprocessamento existe uma lógica interna para gerenciar
as prioridades de acesso ao barramento.
Cada CPU pode ter sua própria memória e/ou compartilhar memória
com outras CPU´s.

27
Modos Mínimo e Máximo
CONFIGURAÇ
CONFIGURAÇÃO DA CPU 8086

Modos Mínimo e Máximo

mínimo

28
Modos Mínimo e Máximo

mínimo

Modos Mínimo e Máximo


LINHAS DE CONTROLE E ESTADO
São divididas em:
• Afetadas por MN / *MX.

• Não afetadas por MN / *MX.

29
Projeto Máximo

Modo Máximo
PROJETO NO MODO MÁ
MÁXIMO:
O modo máximo é usado para sistemas multiprocessados ou co-
processado.
Neste modo, utiliza-se o
controlador de barramento
8288:
1. O estado da fila interna é
informado por QS0 e QS1.
2. O estado do barramento é
obtido através de *S0, *S1 e
*S2.
3. Existe o mecanismo de “lock”
do barramento para controlar
recursos compartilhados.
4. *RQ/*GT0 e *RQ/*GT1
permitem diversas CPUs
compartilharem o mesmo
barramento.

30
Projeto Mínimo

Modo Mínimo
PROJETO NO MODO MÍ
MÍNIMO:
• 1 Mb de memória.
• 64 k de I/O ( sinais A16 – A19 mantidos baixos em ciclos de I/O).

31
Acesso à Memória no 8086

Acesso à Memória no 8086

ACESSANDO A MEMÓ
MEMÓRIA

32
Acesso à Memória no 8086
ACESSANDO A MEMÓ
MEMÓRIA

O grande problema é que


os programas operam,
na grande maioria das
vezes, com bytes.

Acesso à Memória no 8086

?
33
Acesso à Memória no 8086

UTILIZAÇ
UTILIZAÇÃO DA MEMÓ
MEMÓRIA

Implementação utilizando *BHE e A0

Acesso à Memória no 8086


UTILIZAÇ
UTILIZAÇÃO DA MEMÓ
MEMÓRIA

Acesso a 1 Byte de endereço par (endereço x)

34
Acesso à Memória no 8086
UTILIZAÇ
UTILIZAÇÃO DA MEMÓ
MEMÓRIA

Acesso a 1 Byte de endereço impar (endereço x+1)

Acesso à Memória no 8086


UTILIZAÇ
UTILIZAÇÃO DA MEMÓ
MEMÓRIA

Acesso a palavra de 16 bits em endereço par (endereço x)


• O endereço de uma palavra de 16 bits é definido pelo seu byte
menos significativo.

35
Acesso à Memória no 8086
UTILIZAÇ
UTILIZAÇÃO DA MEMÓ
MEMÓRIA
Acesso a palavra de 16 bits em endereço impar (endereço x+1)

Acesso à Memória no 8086


UTILIZAÇ
UTILIZAÇÃO DA MEMÓ
MEMÓRIA
Instruções que acessam bytes e palavras em endereços pares e impares:

36
Programando o 8086

Uso da pilha pelo compilador

O SEGMENTO DE PILHA é fundamental para os compiladores


implementarem SUBROTINAS.
SUBROTINAS Este segmento de memória, além
de armazenar o endereç
endereço de retorno,
retorno é responsável por receber
os parâmetros a serem manuseados pela subrotina, que são
passados pelo procedimento que a chamou.

37
Uso da pilha pelo compilador
Segmento de Pilha
código instruç
instrução
instruç
instrução retorno

instruç
instrução de chamada
instruç
instrução seguinte

1a. instruç
instrução da subrotina
instruç
instrução da subrotina
instruç
instrução da subrotina
instruç
instrução de retorno

Uso da pilha pelo compilador

EXEMPLO:

Considere uma SUBROTINA que recebe dois parâmetros inteiros


de 16 bits:

parm1 e parm2

Deseja-se que a SUBROTINA retorne a soma dos dois parâmetros


acrescida de uma unidade.

38
Uso da pilha pelo compilador

Uso da pilha pelo compilador

E caso fosse um call far ?

39
Uso da pilha pelo compilador

Uso da pilha pelo compilador

E caso fosse um call far ?

40
Bibliografia Básica
„ Zelenovsky, Ricardo e Mendonça, Alexandre, PC um
guia prático de Hardware e Interfaceamento, MZ Editora
Ltda, 4a. edição, 2006. (http://www.mzeditora.com.br/)
„ Brey, Barry, The Intel Microprocessors - 8086/88, 286,
386 and 486 - Architecture, Programming and
Interfacing, Third Edition, PHI, 1994.
„ Zanco, Wagner da Silva. Microcontroladores PIC
16F628A/648A – uma abordagem prática e objetiva,
Editora Érica, 2005.

Material da Disciplina
http://www.dee.ufc.br/~arthurp

41

Você também pode gostar