Você está na página 1de 71

3.

ESTUDO DA CPU

3.1. Formato de Instrues

Programa: consiste numa seqncia de instrues.

Instruo: executa uma ao particular.

Componentes de uma instruo:


Cdigo de operao: especifica a ao a ser executada.
Operandos: contm ou especificam a localizao do dado
utilizado pela instruo.
Formatos tpicos de uma instruo de mquina:

Cdigo de Operao
(a) Instruo sem endereo

Cd. de Operao Endereo


(b) Instruo com um endereo

Cd. de Operao Endereo 1 Endereo 2


(c) Instruo de dois endereos

1
Relaes possveis entre o comprimento de uma instruo e
o comprimento de uma palavra da mquina:
Todas as instrues possuem o mesmo comprimento.
As instrues podem assumir dois ou trs comprimentos
diferentes.
As instrues podem ser mais curtas, ter o mesmo
tamanho ou ser mais compridas do que a palavra da
mquina.
Exemplos:

1 palavra 1 palavra

End. End.
0 Instruo 0 Instruo Instruo Instruo Instruo
1 Instruo 1 Instruo Instruo Instruo Instruo
2 Instruo 2 Instruo Instruo Instruo Instruo
3 Instruo 3 Instruo Instruo Instruo Instruo
(a) (b)
1 palavra 1 palavra

End. End.
0 Instruo 0 Instruo Instruo Instruo Instruo
1 Instruo 1 Instruo Instruo
2 2 Instruo Instruo Instruo
3 Instruo 3 Instruo Instruo Instruo
4 Instruo 4 Instruo Instruo Instruo
5 5 Instruo Instruo
6 6 Instruo
7 Instruo 7 Instruo Instruo
(c) (d)

2
Critrios de Projeto para Formatos de Instrues

Instrues curtas so melhores do que instrues longas.


Um programa com n instrues de 16 bits consome a
metade do espao de memria do que um de n instrues
de 32 bits.
Cada memria tem a sua taxa de transferncia
determinada pela tecnologia de projeto.
Nmero de bits por segundo que pode ser lido da
memria.
Para uma taxa de transferncia de t bps e um
comprimento mdio de instruo de r bits, a
memria pode fornecer no mximo t/r instrues
por segundo para o processador.
A taxa de instrues executadas por segundo
(velocidade do processador) depende do
comprimento da instruo.
Este critrio s no seria importante se o tempo
para a execuo das instrues fosse grande
comparado ao tempo de busca da instruo.
Deve haver espao suficiente na instruo para expressar
todas as operaes desejadas.
Uma mquina com 2n operaes deve ter instrues com
no mnimo n bits.
desejvel que o comprimento da palavra de mquina
seja um mltiplo inteiro de seu comprimento de caractere.
Se o caractere tiver k bits, o comprimento da palavra deve
ser k, 2k, 3k, ..., para no haver desperdcio de espao
para o armazenamento de caracteres.
3
Ou uma instruo ocupa um nmero inteiro de bytes ou
palavras ou uma palavra abriga um nmero inteiro de
instrues.
O nmero de bits no campo de endereos.
Considerando-se uma mquina com o caractere de 8 bits
e uma memria principal com capacidade de armazenar
216 caracteres, temos diversas possibilidades, entre elas:
Unidade bsica (palavra) de 8 bits:
Memria de 216 bytes, de 0 a 65535.
Um endereo para cada caractere.
Unidade bsica (palavra) de 32 bits:
Memria de 214 palavras, de 0 a 16383.
Comparao entre dois caracteres na memria: busca
das palavras e extrao dos caracteres dentro das
palavras.
Um endereo mais curto possibilita a existncia de
instrues mais curtas.
Permite o endereamento de uma quantidade de memria
4 vezes maior com o mesmo nmero de bits de endereos
do anterior.
Quanto maior a resoluo de endereamento da memria,
maior o tamanho da instruo.
Exemplos:
Burroughs B 1700: endereamento de bits.
CDC Cyber: endereamento de palavras de 60 bits.

4
Expandindo os Cdigos de Operao

Considerando-se uma instruo de n + k bits, com o cdigo


de operao de k bits e endereamento de memria de
n bits.
Permite 2k operaes diferentes.
Permite 2n clulas endereveis de memria.
Considerando-se uma instruo de n + k bits, com o cdigo
de operao de k - 1 bits e endereamento de memria de
n + 1 bits.
Permite 2k/2 operaes diferentes.
Permite 2*2n clulas endereveis de memria ou o
mesmo nmero com o dobro da resoluo.
Considerando-se uma instruo de n + k bits, com o cdigo
de operao de k + 1 bits e endereamento de memria de
n - 1 bits.
Permite 2*2k operaes diferentes.
Permite 2n/2 clulas endereveis de memria ou o
mesmo nmero com a metade da resoluo.

5
Expanso do cdigo de operao:
Exemplo:
Mquina com instrues de 16 bits e endereos de 4
bits.
Permite 16 cdigos de operao (4 bits) com 3 endereos
de 4 bits

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Cdigo de Endereo 1 Endereo 2 Endereo 3


Operao

Alternativa possvel:
15 instrues de 3 endereos.
cdigos de operao de 4 bits
14 instrues de 2 endereos.
cdigos de operao de 8 bits
31 instrues de 1 endereo.
cdigos de operao de 12 bits
16 instrues sem endereo.
cdigos de operao de 16 bits

Nem sempre os operandos tem o mesmo comprimento.

6
Cdigo de operao expandido:

16 bits
Cdigo de 0000 xxxx yyyy zzzz 15 instrues de
Operao de 0001 xxxx yyyy zzzz 3 endereos
4 bits 0010 xxxx yyyy zzzz
. . . .
. . . .
1100 xxxx yyyy zzzz
1101 xxxx yyyy zzzz
1110 xxxx yyyy zzzz

Cdigo de 1111 0000 yyyy zzzz 14 instrues de


Operao de 1111 0001 yyyy zzzz 2 endereos
8 bits 1111 0010 yyyy zzzz
. . . .
. . . .
1111 1011 yyyy zzzz
1111 1100 yyyy zzzz
1111 1101 yyyy zzzz

Cdigo de 1111 1110 0000 zzzz 31 instrues de


Operao de 1111 1110 0001 zzzz 1 endereo
12 bits . . . .
. . . .
1111 1110 1110 zzzz
1111 1110 1111 zzzz
1111 1111 0000 zzzz
1111 1111 0001 zzzz
. . . .
. . . .
1111 1111 1101 zzzz
1111 1111 1110 zzzz

Cdigo de 1111 1111 1111 0000 16 instrues de


Operao de 1111 1111 1111 0001 0 endereo
16 bits 1111 1111 1111 0010
. . . .
. . . .
1111 1111 1111 1101
1111 1111 1111 1110
1111 1111 1111 1111
15 12 11 8 7 4 3 0
Nmero de bits

7
Exemplos de Formato de Instruo

PDP-11
Instruo possui um cdigo de operao de 4 bits e dois
campos de endereamento de 6 bits (total de 16 bits).

Cdigo de Operao:
Primeiro bit indica se a instruo opera sobre um byte ou
sobre uma palavra.
Operando:
3 bits para modo
Operando registrador,
Operando est na memria,
Operando uma constante, ...
3 bits para registrador (8 registradores)
Os modos so os mesmos para os operandos fonte e destino.

Qualquer operao atua sobre qualquer operando fonte e


destino (cdigo de operao dito ortogonal).
Cdigo de Operando Fonte Operando Destino
Byte/
Pal. INSTRUO MODO REGISTRADOR MODO REGISTRADOR

Bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

As intrues de um operando utilizam o cdigo de escape


x111, sendo o cdigo de operao representado por 10 bits e
o operando por 6 bits.

8
As instrues que endeream memria possuem 1 ou 2
palavras adicionais de 16 bits para especificar os endereos.
A Famlia Intel 8088/80286/80386

Instrues no so muito regulares.


Geralmente, para uma instruo de dois operandos, se
um operando est na memria, o outro no pode estar na
memria (cdigo no ortogonal).
8088
Todo cdigo de operao de 1 byte.
80386
Novas instrues: o cdigo de operao 15 (1111)
funciona como um escape para os cdigos de operao de
2 bytes.
O bit menos significativo do cdigo de operao indica em
algumas instrues se a operao sobre um byte ou
palavra. O bit subseqente indica se o endereo de
memria (se for o caso) fonte ou destino.

9
CPU Comprimento de campos (em bytes)
8088 0-3 1 0-1 0 0-2 0-2
80286 0-3 1 0-1 0 0-2 0-2
80386 0-5 1-2 0-1 0-1 0-4 0-4

Formato Prefixo Cdigo Modo SIB Desloca- Imediato


da de mento
Instruo Opera
o

Bits 6 1 1 2 3 3
INSTRUO Fonte B/P ESCALA NDICE BASE

2 3 3
MOD REG R/M

Na maioria das instrues, o byte aps o cdigo de


operao indica onde se localizam os operandos:
Modo (2)
4 maneiras de se enderear um operando.
Registrador (3)
AX, BX, CX, DX, SI, DI, BP ou SP.
ou
AH, BH, CH, DH, AL, BL, CL ou DL.
Registrador/Memria (3)
O outro registrador ou o modo de endereamento a
memria (depende do Modo).
No 80386, alguns dos modos requerem um byte adicional,
SIB (Escala, ndice, Base), referente a outros modos de
endereamento.

10
Algumas instrues possuem mais 1, 2 ou 4 bytes adicionais
para especificar um endereo de memria.

Algumas instrues possuem mais 1, 2 ou 4 bytes adicionais


para especificar um operando constante.

Tamanho das instrues:


8088/80286: 1 a 9 bytes.
80386: 1 a 17 bytes.

11
A Famlia Motorola 68000/68020/68030

Tem 3 comprimentos de dados (byte, palavra, palavra


longa).

Tentativa de construir todas as instrues em 16 bits.


18 formatos diferentes de instrues (menos ponto-
flutuante).
Existem palavras adicionais para prover endereos de
memria e constantes para a instruo.
Existe um espao maior para as instrues mais
importantes e mais utilizadas.
Instruo Move: formato 1 (s dois bits
especificam esta
instruo).
CD. OPERAO: 2, 4, 8, 9, 10, 11, 12, 16 bits.
TAM: 1-byte, 2-palavra longa, 3-palavra.
OPERANDO: 6 bits.
Modo: 3 bits.
Registrador: 3 bits.
1 dos 8 registradores A ou 1 dos registradores D.

A maioria das instrues de 2 operandos utiliza um campo


REG para especificar o segundo operando. Desta forma,
perde-se a ortogonalidade nestas instrues, pois s
permitido um dos operandos na memria.

12
Formatos de instruo utilizados no 68000 (primeira
palavra):

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

1 OP TAM. OPERANDO OPERANDO MOVE

2 CD. OPER. REG MOD OPERANDO ADD, AND, CMP, SUB

3 CD. OPER. REG OP OPERANDO CHK, DIVS, LEA, MULS

4 CD. OPER. REG MOD OP REG MOVEP

5 CD. OPER. REG OP TAM OP REG ASL, ASR, ROL, ROR

6 CD. OPER. REG COD. OPER. REG ABCD, EXG, SBCD

7 CD. OPER. REG OP DADO MOVEQ

8 CD. OPER. CONT. OP OP TAM OP REG ASL, ASR, ROL, ROR

9 CD. OPER. DADO OP TAM OPERANDO ADDQ, SUBQ

10 CD. OPER. CONDIO OP OPERANDO Scc

11 CD. OPER. CONDIO DESLOCAMENTO Bcc

12 CD. OPER. CONDIO COD. OPER. REG DBcc

13 CDIGO DE OPERAO TAM OPERANDO ADDI, CMPI, NEG, TST

TAM
14 CDIGO DE OPERAO OPERANDO MOVEM

15 CDIGO DE OPERAO OPERANDO JMP, JSR, NBCD, PEA

16 CDIGO DE OPERAO VETOR TRAP

17 CDIGO DE OPERAO REG EXT, LINK, SWAP,


NLINK
18 CDIGO DE OPERAO NOP, RESET, RST,
TRAPV

13
A diferenciao entre os formatos de instruo no se d
sempre pelos bits 12 a 15 para os formatos de 2 a 12:

ADDQ 0 1 0 1 DADO 0 TAM Modo Reg

SUBQ 0 1 0 1 DADO 1 TAM Modo Reg

Scc 0 1 0 1 CONDIO 1 1 Modo Reg

DBcc 0 1 0 1 CONDIO 1 1 0 0 1 REG

Obs: Tamanho 11 invlido.


Nos microprocessadores 68020, 68030 o problema se
agrava, devido a existncia de instrues adicionais.
Compiladores e montadores mais complexos.
Microprogramas mais complicados.

14
3.2. Endereamento

As instrues podem ser classificadas de acordo com o


nmero de endereos que elas utilizam. Estes endereos
podem ser:
Nmero do registrador a ser utilizado.
Os registradores da CPU constituem uma memria
de alta velocidade e, portanto, um espao de
endereamento.
Posio de memria.
Instrues comuns: especificam 1, 2 ou 3 endereos.

Em muitas mquinas que fazem operaes aritmticas com


um endereo apenas, um registrador especial denominado
Acumulador prov um dos operandos.

Instrues de 1 endereo: em geral envolvem o


Acumulador.
Acumulador := Acumulador + Registrador 1
Acumulador := Acumulador + Memria[ end1 ]
Instrues de 2 endereos: utilizam um dos endereos como
fonte e o outro como destino ou fonte/destino.
Fonte/Destino := Fonte/Destino + Fonte
Instrues de 3 endereos: utilizam dois endereos como
fonte e o terceiro como destino.
Destino := Fonte 1 + Fonte 2
O modo de endereamento de um operando est
relacionado com a forma como os campos de endereo da
15
instruo so interpretados para se encontrar um
operando.

16
Endereamento Imediato

a maneira mais simples de uma instruo especificar um


operando, pois a parte da instruo relativa ao endereo
contm o operando propriamente dito (valor), e no o local
onde ele possa ser encontrado.

Tal operando dito operando imediato.

O operando buscado na memria ao mesmo tempo que a


instruo buscada.

Vantagem: no requer um referncia extra memria para


se buscar o operando.

Desvantagem: restringe o operando a um valor que possa


caber dentro do campo de endereamento.
Se o campo de endereo for de 3 bits, sua utilizao fica
limitada.

17
Famlia Intel:

No possui um modo de endereamento para operandos


imediatos.

Possui instrues distintas nas quais um dos operandos


imediato.

Famlia Motorola:

Possui um modo de endereamento imediato; qualquer


operando fonte pode ser uma constante.
68000: algumas instrues permitem constantes de 8 ou
16 bits.
68020, 68030: permitem constantes de 8, 16 ou 32 bits.
Existem instrues especiais (ADDI, ADDQ e CMPI)
que permitem uma codificao mais eficiente de
instrues imediatas:
Constantes imediatas pequenas so includas dentro
da palavra da instruo, sem a necessidade de se
acrescentar bytes adicionais ao final da instruo.

18
Endereamento Direto

A instruo fornece o endereo da palavra de memria


onde o operando est contido.

Exemplo:
Carga do registrador R1 com o contedo da posio de
memria de endereo 1000.

Endereo

Cdigo de (*) R1 1000


Operao
(*) Campos que
Especificam o
Endereamento
Direto

1000 1510

1510 4

R1 1510

Passo 1: O operando buscado da posio 1000.


Passo 2: O operando carregado em R1.

19
Intel:

Todas as CPUs possuem endereamento direto.


8088/80286:
Endereos diretos de 16 bits.
80386:
Utiliza endereos diretos de 16 bits nos modos real e
virtual, e segmentos de 16 bits no modo protegido.
Utiliza endereos diretos de 32 bits no modo
protegido de 32 bits.

Motorola:

Possui duas formas de endereamento direto:


16 bits
Para endereamento dos primeiros 64 Kbytes de
memria.
32bits
Para endereamento acima dos 64 Kbytes.
As formas de endereamento direto so indicadas no campo
MODO de 3 bits e se aplicam a todos os operandos da
instruo.

20
Endereamento de Registrador

Conceitualmente semelhante ao endereamento direto.


O campo de endereo da instruo contm o nmero do
registrador no qual o operando est armazenado.

O endereamento da mquina deve ter duas partes:


Um bit para indicar se ser utilizada uma posio de
memria (endereamento direto) ou um registrador
(endereamento de registrador) na instruo.
Um campo de endereo com o nmero do registrador
(endereamento de registrador) ou endereo de uma
palavra na memria (endereamento de direto).
O nmero de registradores muito menor do que o nmero
de palavras de memria: logo, os formatos freqentemente
so diferentes (para garantir instrues menores).

Fica mais claro quando o bit que diferencia estes dois tipos
de endereamento se encontra no campo de endereamento
e no no cdigo de operao.

Motivos para a utilizao de registradores:


O acesso aos registradores mais rpido do que o acesso
a palavras na memria.
O endereamento dos registradores requer apenas alguns
bits, pois estes so em pequeno nmero.
Problema: complica a programao, pois sendo em
pequeno nmero, o programador (ou o compilador) deve
decidir quais operandos e resultados intermedirios devem
permanecer em registrador.

21
Disponvel em quantidade nas CPUs Intel e Motorola.

22
Endereamento Indireto

O campo de endereamento da instruo especifica qual a


palavra de memria ou registrador contm o endereo do
operando.

Exemplo:
Carga do registrador R1 de forma indireta a partir da
posio de memria de endereo 1000.

Endereo

Cdigo de (*) R1 1000


Operao
(*) Campos que Apontador
Especificam o
Endereamento
Indireto

1000 1510

1510 4

R1 4

Passo 1: O apontador para o operando buscado da


posio 1000.
Passo 2: O operando buscado na posio 1510.
Passo 3: O operando carregado em R1.

23
Intel:

Os processadores Intel possuem endereamento indireto via


registrador, mas no permitem um endereamente indireto
na memria.

8088/80286:
Registradores utilizados para endereamento indireto:
BX, SI e DI.
80386:
Todos os registradores podem ser utilizados.

Motorola:

68000:
Permite somente o endereamento indireto via
registrador.
68020 e 68030:
Permitem tambm o endereamento indireto via memria.

Existem processadores que permitem endereamento


indireto de mltiplos nveis na memria.

24
Endereamento Indexado

Muitos algoritmos necessitam da execuo de alguma


operao sobre uma seqncia de dados armazenados em
posies consecutivas de memria.

Exemplo:
Bloco de n palavras ocupando as posies:
A, A+1, A+2,..., A+n-1
que devem ser copiadas para as posies:
B, B+1, B+2,..., B+n-1
Uma soluo possvel: se a mquina possuir uma
instruo
MOVE A, B
que copia o contedo da posio A para a posio B e
modifica a prpria instruo para:
MOVE A+1, B+1
e a executa novamente, e assim sucessivamente, at
completar as n interaes.
Problema: os programas ficam difceis de se depurar
(programa altera a si prprio).
Outra soluo: utilizar o endereamento indireto. A cada
movimentao so alterados os apontadores, que so dados.

No endereamento indexado utilizado um ou mais


registradores de ndice. Neste caso, os endereos possuem
duas partes:
O nmero de um registrador de ndice.
Uma constante.
25
O endereo do operando a soma da constante com o
contedo do registrador de ndice.

No exemplo anterior, se o registrador de ndice possuir o


valor k, a instruo MOVE A,B copiar o contedo da
posio de memria A+k para B+k. Basta o registrador de
ndice ser inicialmente carregado com o valor 0, e ser
incrementado do tamanho da palavra de memria a cada
palavra copiada.

Algumas mquinas incrementam ou decrementam o


contedo do registrador de ndice antes ou depois de cada
utilizao: auto-indexao.

CPUs Intel e Motorola: possuem endereamento indexado.

26
Endereamento de Pilha

desejvel a existncia de instrues de mquina to


curtas quanto possvel.
Economia de memria e tempo de CPU.
Instrues sem endereo possuem apenas o cdigo de
operao.

Pode-se ter uma arquitetura baseada em instrues sem


endereo, que se utilizam de uma estrutura de dados
denominada pilha. Estas mquinas so denominadas de
stack machines.

Pilha: consiste em itens de dados (palavras, caracteres, bits)


armazenados em ordem consecutiva na memria.
Base (fundo) da pilha: o primeiro item colocado na
pilha.
Ponteiro da Pilha: registrador ou palavra na memria
que contm o endereo do topo da pilha (ltimo dado
armazenado).

27
Exemplo de funcionamento da pilha:

Apontador da pilha

1001 1002 1003 1002


Fundo
da
Endereo pilha
1000 100 100 100 100
1001 40 40 40 40
1002 6 6 6
1003 Topo da 75
1004 Pilha
1005
1006

(a) (b) (c) (d)

Os computadores orientados para pilha possuem instrues


para:
Inserir o contedo de um registrador ou posio de
memria na pilha, incrementando o ponteiro da pilha
aps armazenar o dado.
Exemplo: PUSH.
Copiar o contedo do topo da pilha para um registrador
ou posio de memria, decrementando o ponteiro da
pilha aps armazenar o dado.
Exemplo: POP.
Em alguns computadores a pilha cresce no sentido
contrrio ao dos endereos.
Exemplo: CPUs da famlia Intel.

28
Instrues sem endereo utilizam como operandos dados
existentes na pilha.
Exemplo:
Uma instruo de adio obtm os dois operandos
retirando-os consecutivamente do topo da pilha e
armazena o resultado na pilha. Os operandos so
retirados da pilha aps o uso.

Apontador da pilha

1003 1002 1001

Endereo
1000 4 4 4
1001 20 20 50
1002 6 30
1003 5
1004 Topo da
Pilha
(a) (b) (c)

Tipos de notao para uma operao envolvendo dois


operandos:
Notao Infixada: o operador colocado entre os
operandos.
Exemplo: x + y.
Notao Polonesa Reversa ou Notao Ps-Fixada: o
operador colocado aps os operandos.
Exemplo: x y +.

29
Exemplos de Endereamento

Maneiras de se implementar as diversas formas de


endereamento:
Utilizar um cdigo de operao para cada modo:
Exemplos:
ADDim - ADD imediato
ADDd - ADD direto
ADDin - ADD indireto
Fazer o modo de endereamento como parte do endereo
da instruo.

30
Endereamento no PDP-11

Os modos de endereamento so implementados de forma


elegante, clara e simples.

Os endereos so especificados por um campo de 6 bits.


Instrues de dois endereos possuem dois destes campos.
Existem 8 registradores: R0 a R7.
R6 - Ponteiro da Pilha
R7 - Contador do Programa
O Contador do Programa avana de 2
imediatamente aps uma palavra de instruo ser
buscada (2 bytes) e antes de ser executada.
Todas as instrues tm 16 bits, sendo que as vezes so
necessrias 1 ou 2 palavras adicionais aps a instruo, que
so utilizadas pela instruo (valor, endereo de memria) e
podem ser consideradas como parte dela.

Formato de uma instruo de dois endereos no PDP-11.

Palavra de 16 bits

End. Fonte Destino


Cdigo de Modo Registrador Modo Registrador
N
Operao Fonte Fonte Destino Destino
4 3 3 3 3

N+2 (Prxima Palavra 1)

N+4 (Prxima Palavra 2)

31
Descrio dos modos de endereamento do PDP-11, onde R
o registrador especificado em Fonte ou Destino.

Modo Nome Como o operando localizado


0 Endereamento O operando est em R.
Registrador
1 Indireto Via O R contm um apontador para o operando.
Registrador
2 Auto- O contedo de R buscado e usado como um apontador para
Incremento o operando.
Aps esse passo, mas antes de a instruo seguinte ser
executada, R incrementado de 1 (instrues de byte) ou 2
(instrues de palavra).
3 Auto- O endereo de uma palavra na memria que contm um
Incremento apontador para o operando buscado em R. Ento R
Indireto incrementado de 1 ou 2 antes de a instruo ser executada.
4 Auto- R primeiro decrementado de 1 ou 2. O novo valor de R
Decremento ento usado como apontador para o operando.
5 Auto- R primeiro decrementado de 1 ou 2. O novo valor de R
Decremento ento usado como endereo de uma posio de memria que
Indireto contm um apontador para o operando.
6 Indexao O operando est no endereo igual soma de R (registrador
de ndice) e o deslocamento de 16 bits em complemento de 2
na prxima palavra.
O contador de programa (R7) incrementado de 2
imediatamente aps a prxima palavra ser buscada.
7 Indexao + A posio da memria que contm um apontador para o
Endereamento operando encontrada somando o contedo de R e o
Indireto deslocamento de 16 bits em complemento de 2 na prxima
palavra.
O contador de programa (R7) incrementado de 2
imediatamente aps a prxima palavra ser buscada.
Casos especiais:
Modos 6 e 7 requerem uma constante de 16 bits.
Modo 2 com o registrador R7: endereamento imediato.
Modo 3 com o registrador R7: endereamento direto.
Modo 6 com o registrador R7: endereamento auto-relativo ou
endereamento independentemente de posio. Se utilizado no
lugar do endereamento direto, tem-se programas que podem
ser carregados em qualquer posio de memria.
32
Exemplo: possibilidades da instruo MOV R, R4.

Palavra de 16 bits

End. Fonte Destino


Modo Registrador
1000 MOV 0 4
(*) Fonte Fonte
M R
4 3 3 3 3

1002 (Prxima Palavra) K

(*) Considerando as instrues que manipulam palavras, com o primeiro bit igual a 1.

Nomenclatura:
R - registrador;
$ - operando imediato;
* - indica indireo.
Um nico cdigo de operao produz um grande nmero
de instrues diferentes, j que os modos de
endereamento fonte e destinos so especificados
independentemente.

33
Modo
Fonte (M) R=0-5 R=6 R=7
0 Move R para R4. Move o apontador de pilha para R4. Move o contador de programa para R4.
Ex: MOV R3, R4 Ex: MOV SP, R4 Ex: MOV PC, R4
1 Move a palavra de memria apontada por Move o topo da pilha para R4, mas noMove K para R4; o contador de programa no
R para R4. o remove da pilha. incrementado, assim K ser executado como
a prxima instruo.
Ex: MOV *R3, R4 Ex: MOV *SP, R4 Ex: MOV *PC. R4
2 Move a palavra de memria apontada por Remove uma palavra da pilha e a coloca Move K para R4 (endereamento imediato).
R para R4 e soma 2 a R. em R4 (instruo de desempilhamento).

Ex: MOV (R3)+, R4 Ex: MOV (SP)+, R4 Ex: MOV $24, R4


3 Move para R4 a palavra da memria Desempilha o endereo do operando Carrega R4 a partir do endereo de memria
endereada pela palavra que R aponta e fonte e move o prprio operando fonte K (endereamento direto).
soma 2 a R. para R4.
Ex: MOV *(R3)+, R4 Ex: MOV *(SP)+, R4 Ex: MOV *$24, R4
4 Decrementa R de 2 e ento carrega R4 a M=4 e R=6 no fonte til; entretanto,
partir do endereo apontado por R. usado como destino em instrues para No usado.
empilhar. (causa um loop infinito).
Ex: MOV -(R3), R4 Ex. de empilhamento.: MOV $6, -(SP)
5 Decrementa R de 2 e ento carrega R4
indiretamente a partir do endereo No usado. No usado.
apontado por R. (causa um loop infinito).
Ex: MOV *-(R3), R4
6 Carrega R4 com a palavra de memria Carrega R4 com a palavra K/2 (posio Carrega R4 com a palavra distante K/2
em (R) + K (indexao). abaixo do topo da pilha). palavras desta instruo (endereamento auto-
relativo). Calculada pelo montador.
Ex: MOV 24 (R3), R4 Ex: MOV 24 (SP), R4 Ex: MOV X, R4 (X calculado pelo montador)
7 Carrega R4 com a palavra de memria Carrega R4 a partir da palavra cujo Carrega R4 com a palavra apontada pela
apontada por (R) + K (indexao + endereo est K/2 palavras abaixo do palavra distante K bytes desta instruo
endereamento indireto) topo da pilha. (endereamento indireto).
34
Ex: MOV *24 (R3), R4 Ex: MOV *24 (SP), R4 Ex: MOV *X, R4 (X calculado pelo montador)

35
Endereamento na Famlia Intel: 8088/80286/80386

Os endereamentos no 8088, 80286 e 80386 (considerando


segmentos de 16 bits) so iguais.

O byte MODO controla os modos de endereamento. Um


dos operandos especificado pela combinao dos campos
MOD (2 bits) e R/M (3 bits).

O outro operando sempre um registrador e controlado


pelo campo REG.

Para MOD=00 e R/M=000, a soma BX+SI representa um


ponteiro para a memria de onde ser obtida a palavra ou
byte, de acordo com bit menos significativo do cdigo de
operao.
MOD
00 01 10 11
000 M[BX + SI] M[BX + SI + DISP8] M[BX + SI + DISP16] AX ou AL
001 M[BX + DI] M[BX + DI + DISP8] M[BX + DI + DISP16] CX ou CL
010 M[BP + SI] M[BP + SI + DISP8] M[BP + SI + DISP16] DX ou DL
R/M 011 M[BP + DI] M[BP + DI + DISP8] M[BP + DI + DISP16] BX ou BL
100 M[SI] M[SI + DISP8] M[SI + DISP16] SP ou AH
101 M[DI] M[DI + DISP8] M[DI + DISP16] BP ou CH
110 Endereamento Direto M[BP + DISP8] M[BP + DISP16] SI ou DH
111 M[BX] M[BX + DISP8] M[BX + DISP16] DI ou BH

Os modos no so ortogonais.

A indireo permitida apenas atravs dos registradores


BX, SI e DI.

Endereamento direto existe, mas atravs da eliminao do


registrador BP.

36
Somente algumas combinaes de somas de registradores
so permitidas para formar apontadores.

No existe nenhum modo imediato, que implementado


atravs de cdigos de operaes adicionais.

No permitida a auto-indexao.

O MOD=11 indica um segundo operando registrador.


O bit 1 do cdigo de operao indica qual o operando fonte
e destino.

80386:
Possui um novo esquema de endereamento para os
segmentos de 32 bits, que permite o endereamento
indireto atravs de mais registradores.

MODO
00 01 10 11
000 M[EAX] M[EAX + DISP8] M[EAX + DISP32] EAX ou AL
001 M[ECX] M[ECX + DISP8] M[ECX + DISP32] ECX ou CL
010 M[EDX] M[EDX + DISP8] M[EDX + DISP32] EDX ou DL
R/M 011 M[EBX] M[EBX + DISP8] M[EBX + DISP32] EBX ou BL
100 SIB (*) SIB com DISP8 SIB com DISP32 ESP ou AH
101 Endereamento Direto M[EBP + DISP8] M[EBP + DISP32] EBP ou CH
110 M[ESI] M[ESI + DISP8] M[ESI + DISP32] ESI ou DH
111 M[EDI] M[EDI + DISP8] M[EDI + DISP32] EDI ou BH

(*) SIB - Escala, ndice, Base

Quando o SIB (Escala, ndice, Base) est presente, tem-


se:
Endereo do operando calculado pela soma do
Registrador de Base ao Registrador de ndice
multiplicado pelo fator de escala (1, 2, 4 ou 8). Pode-
se adicionar ainda um deslocamento de 8 ou 32 bits.
37
Exemplo de utilizao do SIB: arranjos, como para
o seguinte comando em Pascal:
for i:=0 to n do a[i]:=0;
onde a um arranjo de 4 bytes locais ao procedimento
corrente.
Pode-se armazenar a[i] numa nica instruo, enquanto no
8088 seriam necessrias 4 instrues.

EBP
Outras
Estrutura variveis i em EAX
de Pilha locais
a[0] EBP + 8 M[4 * EAX + EBP + 8]
a[1] EBP + 12
a[2] EBP + 16

38
Endereamento na Famlia Motorola: 68000/68020/68030

Cada operando especificado por um campo de 6 bits:


3 bits para especificar o modo de endereamento.
3 bits para especificar o registrador.
O ponteiro da pilha enderevel (A7), sendo que todos os
modos de endereamento de pilha se aplicam.
Palavra
Modo Reg s Descrio
Extras
0 D 0 Operando no registrador D.
1 A 0 Operando no registrador A.
2 A 0 Apontador para o operando no registrador A.
3 A 0 Apontador em A; auto-incrementa A aps o uso.
4 A 0 Auto-incrementa A; ento usa-o como
apontador.
5 A 1 Modo indexado com deslocamento de 16 bits.
6 A 1 A + registrador de ndice + deslocamento de 8
bits produz o endereo
7 0 1 Endereamento direto com endereo de 16 bits.
7 1 2 Endereamento direto com endereo de 32 bits.
7 2 1 O endereo do operando PC + deslocamento de
16 bits.
7 3 1 O endereo do operando PC + ndice +
deslocamento de 8 bits.
7 4 1 ou 2 Dado imediato.

Novos modos de endereamento foram adicionados para


permitir o acesso a arranjos e outras estruturas a partir de
uma nica instruo, a partir do 68020.

39
Exemplo de instruo do 680x0:
a) Instruo de um operando no 680x0.
b) Palavra de extenso no 68000.
c) Formato curto da palavra de extenso no 68020 e 68030.
d) Formato completo de palavras de extenso no 68020 e
68030.

Bits 10 3 3

(a) CDIGO DE OPERAO MODO REG

(b) D/A REG W/L 00 0 DESLOCAMENTO

(c) D/A REG W/L ESCALA 0 DESLOCAMENTO

D/A REG W/L ESCALA 1 BS IS TAM. DE DB 0 I/IS


(d) DESLOCAMENTO BASE (0, 1 ou 2 palavras)
DESLOCAMENTO EXTERNO (0, 1 ou 2 palavras)

Legenda:
D/A - 0 seleciona um registrador D; 1 seleciona um registrador A.
REG - seleciona um registrador (0-7) ou um ndice.
W/L - 0 indica palavra; 1 indica palavra longa.
ESCALA - 0-3 indica fatores de escala 1, 2, 4 ou 8.
BS - suprime registrador de base.
IS - suprime registrador de ndice.
TAMANHO DE DB - Tamanho do deslocamento em relao a base
(0, 1 ou 2 palavras).
I/IS - Seleciona entre indexado ou indireto.

40
Discusso Acerca dos Modos de Endereamento

Os modos de endereamento geralmente utilizados pelos


compiladores de linguagens de alto nvel so:
Auto-indexao
Empilhamento e desempilhamento de parmetros
de procedimentos.
Direto
Acesso a variveis globais.
Imediato
Transferncia de constantes.
Indexado
Acesso a variveis locais.
Registrador
Armazenamento de variveis locais.
Registrador indireto
Armazenamento de ponteiros de estruturas.

41
PDP-11:

Possui 8 modos de endereamento, sendo os modos 1, 3, 5, 7


iguais aos modos 0, 2, 4, 6 adicionando-se uma indireo.

Esquema simples, fcil de ser entendido e implementado a


nvel de micro-cdigo, e engloba todas as formas de
endereamento importantes.

Motorola 68000:

Tentou-se copiar o esquema do PDP-11, mas existiam 16


registradores ao invs de 8. Logo, sobrariam 2 bits para o
campo modo.

Optou-se por ter um modo de endereamento para os


registradores D e a maioria funcionando somente para os
registradores A.

Difere do PDP-11 por no permitir modos de


endereamento envolvendo o contador do programa.

Os modos de endereamento mais importantes esto


presentes.

Modos de endereamento quase ortogonal para os cdigos


de operao.

Os processadores 68020 e 68030 incorporaram novos


modos de endereamento complicados:
Microcdigo e compiladores mais complicados.

42
Intel 8088 e 80286:

Possuem apenas 2 bits de modo de endereamento.

Todos os 8 registradores de uso geral so diferentes.

Somente 3 registradores permitem endereamento indireto


(SI, DI e BX) e somente 4 registradores permitem
indexao (SI, DI, BX e BP).

O modo de endereamento imediato suprido pela


existncia de cdigos de operao especficos para isso.

No permitem a auto-indexao (existem instrues


especficas para a manipulao de cadeia de caracteres que
implementam a auto-indexao).

No possui endereamento de pilha, permitindo o acesso a


pilha atravs das instrues PUSH e POP. O PUSP no
permite o armazenamento de valores imediatos na pilha.

O 80386 possui um modo de endereamento melhor com a


criao do byte SIB.

DEC VAX:

Soluo para se utilizar mais registradores e manter a


ortogonalidade: 4 bits para o modo e 4 bits para o
registrador.

Cada operando necessita de 1 byte.

Uma instruo de dois operandos necessita de no mnimo 3


bytes.

43
3.3. Tipos de Instruo

Instrues de Transferncia de Dados

Transferncia de dados significa a cpia de dados de um


lugar para outro, e a mais fundamental de todas as
operaes.

A transferncia neste contexto significa a criao de um


novo objeto com o mesmo padro de bits do original,
deixando a cpia original intacta.

Locais possveis de armazenamento de dados:


palavra na memria
registrador
pilha (pode ser implementada em registradores ou na
memria, mas a forma de acess-la particular).
Devem especificar implicitamente ou explicitamente o
operando fonte (original) e destino (onde ser guardada a
cpia).

Exemplos:
Motorola (680x0):
MOVE: instruo de propsito geral, que permite a
transferncia entre registradores, memria ou pilha.
Intel (8088/80x86):
MOV, etc: instrues bem mais limitadas. Existem
muitas delas, que tornam possvel a transferncia
entre dois lugares quaisquer.

44
Operaes Didicas

Operaes didicas so aquelas que combinam dois


operandos para produzir um resultado.

Encontramos neste grupo as operaes aritmticas e


lgicas.

Instrues Aritmticas:
Adio, subtrao, multiplicao e diviso.
Instrues Lgicas:
AND, OR, XOR.
AND: calcula o produto booleano bit a bit de dois
argumentos de uma palavra cada, gerando como
resultado tambm uma palavra.
Uso importante: extrao de bits de uma palavra,
atravs de uma mscara. A operao AND tende a
remover os bits iguais a 1.
Exemplo: extrao do segundo caractere de uma
palavra de 4 bytes para ser imprimido.
Soluo: isol-lo dos demais bytes e justific-lo direita.
Extrao:

10110111 10111100 11011011 10001011 A


00000000 11111111 00000000 00000000 B (mscara)
00000000 10111100 00000000 00000000 A AND B

OR: calcula a operao booleana OR bit a bit de dois


argumentos de uma palavra cada, gerando como
resultado tambm uma palavra.
45
Uso importante: empacotamento de bits em uma
palavra, que significa o inverso da extrao. A
operao OR tende a inserir bits 1 no resultado.
Exemplo: trocar os 8 bits mais direita de uma
palavra de 4 bytes, sem alterar os demais bits.
Soluo: limpar o byte a ser alterado, mantendo os
demais, e incluir o novo byte.
Empacotamento:

10110111 10111100 11011011 10001011 A


11111111 11111111 11111111 00000000 B (mscara)
10110111 10111100 11011011 00000000 A AND B
00000000 00000000 00000000 01010111 C
10110111 10111100 11011011 01010111 (A AND B) OR C

XOR: calcula a operao booleana XOR bit a bit de dois


argumentos de uma palavra cada, gerando como
resultado tambm uma palavra.
Uso importante: permite a inverso de
determinados bits de uma palavra, aplicando a
operao XOR com um operando que possua 1s
nestes bits. A operao XOR com um bits iguais a 0
no altera o resultado.
uma operao simtrica, pois na mdia no tende
nem a inserir nem a remover bits iguais a 1.

46
Exemplo: inverter os 8 bits do segundo caractere de
uma palavra de 4 bytes, sem alterar os demais bits.
Inverso de bits:

10110111 10111100 11011011 10001011 A


00000000 11111111 00000000 00000000 B (mscara)
10110111 01000011 11011011 10001011 A XOR B

Operaes aritmticas em ponto-flutuante:


Antigamente eram implemantada via software.
Atualmente muitas mquinas possuem instrues de
mquina que implementam operaes em ponto-flutuante
diretamente por hardware (maior velocidade).
Tamanho menor dos operandos: maior velocidade.
Tamanho maior dos operandos: maior preciso.
Em muitos casos estas operaes so realizadas por
processadores numricos, tambm chamados de co-
processadores. Tais processadores realizam tambm
outras operaes que no sejam de ponto-flutuante.

47
Operaes Mondicas

Operaes mondicas so aquelas que tm um operando e


produzem um resultado.

Em geral so mais curtas que as operaes didicas, pois s


necessitam da especificao de um operando.

Encontramos neste grupo as operaes para deslocar e


rodar o contedo de uma palavra.

Deslocamentos: so operaes nas quais os bits do


operando so movidos para a esquerda ou direita,
perdendo os bits deslocados para fora da palavra,
formando o resultado.
As posies vagas so preenchidas com 0.
Um deslocamento para a direita de k bits significa uma
diviso do operando por 2k.
Um deslocamento para a esquerda de k bits significa uma
multiplicao do operando por 2k.
Exemplo: deslocamento de 2 bits de uma palavra para a
direita.

00000000 00000000 00000000 01110011 A


00000000 00000000 00000000 00011100 11 A deslocado
de 2 bits para
a direita

48
Rotaes: so operaes nas quais os bits do operando so
movidos para a esquerda ou direita, sendo que os bits que
saem da palavra reaparecem do outro lado, formando o
resultado.
Exemplo: rotao de 2 bits de uma palavra para a direita.

00000000 00000000 00000000 01110011 A


11000000 00000000 00000000 00011100 A rodado de 2
bits para a
direita

Propriedade: Se uma palavra de n bits rodada k bits


para um lado, o resultado o mesmo caso tivesse sido
rodada n-k bits para o outro lado.

Deslocamentos com sinal: so operaes de deslocamentos


para a direita que mantm o sinal do operando para gerar
o resultado.

Na prtica, isso significa que as posies vagas do lado


esquerdo so preenchidas com o bit de sinal original, 0 ou
1. Logo, um nmero negativo permanecer negativo.

49
Exemplo: deslocamento de 2 bits de uma palavra para a
direita, sem a extenso do sinal e com a extenso do sinal.

11111111 11111111 11111111 11110000 A


A deslocado de 2 bits
00111111 11111111 11111111 11111100 para a direita sem
extenso do sinal
A deslocado de 2 bits
11111111 11111111 11111111 11111100 para a direita com
extenso do sinal

Certas operaes didicas muito utilizadas com operandos


especficos podem ser fornecidas na forma monodica.
Exemplos:
Mover o valor 0 para uma palavra de memria ou
registrador:
Instruo CLEAR.
Somar/subtrair 1 a/de uma palavra de memria ou
registrador:
Instruo INC/DEC.
Negar o valor de X (significa fazer a operao
0 - X):
Instruo NEGATE.
Intel: as suas CPUs fornecem instrues INC e DEC.
Motorola: as suas CPUs fornecem instrues mais
genricas, ADDQ e SUBQ que podem somar ou subtrair
uma constante na faixa de 1 a 8.

50
Comparaes e Desvios Condicionais

Praticamente todos os programas precisam da capacidade


de testar seus dados e alterar a seqncia de instrues a
serem executadas.
Exemplo: x
Se x negativo, retorna mensagem de erro; caso
contrrio, calcular a raiz quadrada de x.
Soluo: a mquina deve possuir instrues de salto
condicional (desvio condicional).

As instrues de desvio condicional testam alguma


condio e saltam para um determinado endereo se a
condio satisfeita, e continuam a seqncia normal do
programa caso contrrio.
O desvio pode ocorrer se uma determinada condio for
satisfeita ou ento se uma determinada condio no for
satisfeita, de acordo com algum bit da instruo.
A condio mais comum a ser testada se um bit especfico
na mquina 0 ou 1.

51
Exemplo: teste do bit de sinal de um resultado.
Se o bit de sinal 1 (nmero negativo), o programa
continua a partir do endereo Rtulo. Se o bit de
sinal 0, o programa continua a partir da instruo
seguinte a instruo de salto.

JNEG REG1, Rtulo ; desvia se o registrador REG1 for negativo.


INSTR ; prxima instruo caso REG1 seja positivo.
1
INSTR
2
.
.
Rtulo: INSTR ; prxima instruo caso REG1 seja negativo.
3
INSTR
4
.
.

Muitas mquinas possuem bits que so utilizados para


indicar condies especficas, denominados flags de
mquina. Os flags, de certa forma, indicam o estado atual
do processador, e em geral refletem o ocorrido na ULA aps
a ltima operao lgica ou aritmtica executada.
Exemplo: vai-um do bit mais a esquerda de uma
operao, indicando o estouro numa operao aritmtica.
Teste do bit mais a direita de uma palavra: permite avaliar
se um nmero par ou mpar.

Teste por zero: permite avaliar se uma palavra 0 ou no,


sendo importante para loops.

52
Comparao entre duas palavras: permite avaliar se elas
so iguais ou qual a maior.
Instruo que a princpio precisa de trs endereos: dois
para os operandos e um para o endereo de desvio.
Se a mquina no permite instrues de trs endereos,
uma soluo disponibilizar dois tipos de instrues:
Instruo de comparao, que armazena alguns bits
de condio a respeito do resultado.
Instruo de desvio condicional, que consulta os bits
de condio e eventualmente faz o desvio.
Este tipo de soluo adotada pelas famlias
Motorola e Intel.
O resultado de uma comparao depende dos sinais dos
operandos. Em geral, faz-se a comparao entre dois
valores de mesmo sinal, ou precisa-se ter instrues
especficas para nmeros sem sinal e nmeros com sinal.

Sem sinal Com sinal


0 000 100 -4
1 001 101 -3
2 010 110 -2
3 011 111 -1
4 100 000 0
5 101 001 1
6 110 010 2
7 111 011 3

Outra forma de desvio condicional: pular a prxima


instruo.

Desvio Incondicional um desvio que sempre satisfeito.


Logo, necessita de um endereo somente.
53
Instrues de Chamada de Procedimentos

Procedimento ou sub-rotina ou simplesmente rotina: um


grupo de instrues que realiza uma tarefa e que pode ser
chamado de diversas partes do programa.

Um procedimento, aps ser executado, deve retornar para o


comando aps a sua chamada.
O procedimento deve receber de alguma forma o endereo
para onde ele deve retornar aps realizar a sua tarefa
(endereo de retorno).
Formas de se armazenar o endereo de retorno:
Memria:
Posio Fixa: no permite encadeamentos de sub-
rotinas.
Primeira palavra da sub-rotina: cada sub-rotina sabe
onde buscar o endereo de retorno. No permite recurso
direta ou indireta.
Registrador:
A instruo de chamada de sub-rotina armazena o
endereo de retorno num registrador, deixando a cargo
da sub-rotina armazenar o endereo num local seguro.
Pilha:
A instruo de chamada de sub-rotina armazena o
endereo de retorno na pilha. A sub-rotina, para retornar,
desempilha o endereo da pilha e o coloca no contador
do programa (logo, retorna).
Mtodo utilizado pela Intel e Motorola.

54
Controle de Loop

Um programa em geral necessita executar um grupo de


instrues um nmero fixo de vezes - loop.

O controle de loop pode ser implementado atravs das


instrues elementares, devendo:
Ter um contador, que decrementado ou incrementado de
uma constante a cada interao.
Testar o contador a cada interao, terminando o loop se
uma condio for atingida.
Tipos de loop:
Loop com teste no final
Sempre ser executado ao menos uma vez. Falha
para n igual a zero.
Loop com teste no incio
Exemplos de controles de loops:

i:=1; i:=1;
1: {primeiro comando} 1: if i > n then goto 2;
{segundo comando} {primeiro comando}
. {segundo comando}
. .
{ltimo comando} .
i := i + 1; {ltimo comando}
if i <= n then goto 1; i := i + 1;
2: {primeiro comando aps o loop} goto 1;
2: {primeiro comando aps o loop}
(a) teste no final (b) teste no incio
Cdigo equivalente em Pascal
for i := 1 to n do begin ... end

55
Algumas mquinas podem disponibilizar instrues
especiais que fazem o controle de contagem de interaes,
teste de condio e desvio numa nica instruo.
Intel:
8088/80286: Instruo LOOP, que decrementa o
registrador CX de 1 e salta para um dado rtulo se
o resultado no for 0. Se for 0, a execuo continua a
partir da prxima instruo.
80386: Idem para o registrador ECX.
Motorola:
Instruo para uma soluo mais geral:
Primeiro testa uma determinada condio, que se no
satisfeita, encerra o loop.
Decrementa um registrador D, que se resultar num valor
maior ou igual a 0, repete o loop; caso contrrio, encerra
o loop.

56
Entrada e Sada

Apresentam grande variao de mquina para mquina.

Se o espao de endereamento de entrada e sada (E/S) no


estiver mapeado em memria (ou seja, os dispositivos de
E/S tambm possuem endereos, da mesma forma que a
memria), devem existir instrues especiais (mapeamento
em E/S) que permitam:
A leitura de um dado num dispositivo de entrada.
Instruo: IN.
A escrita de um dado num dispositivo sada.
Instruo: OUT.
Intel:
Instrues especficas para E/S: IN e OUT:
Especificam o endereo da porta de E/S de forma
direta ou indireta via registrador DX.
Utilizam o registrador AX / EAX como elemento de
transferncia entre o dispositivo e a CPU.
Motorola:
Registradores dos dispositivos so endereados via
mapeamento de memria.

57
3.4. Fluxo de Controle

O Fluxo de controle corresponde seqncia na qual as


instrues so executadas.

As instrues executadas sucessivamente so buscadas de


posies de memria consecutivas.

As alteraes do fluxo normal de controle do programa


podem ocorrer atravs de:
Chamadas de Procedimentos.
Co-rotinas.
Armadilhas (Traps).
Interrupes.

58
Fluxo de Controle Seqencial e Desvios

Aps a execuo de cada instruo:


O contador de programa incrementado do nmero de
posies de memria da instruo (comprimento da
instruo).
A prxima instruo buscada na memria e executada.
Ao longo do tempo, o contador do programa
aproximadamente uma funo linear crescente em funo
do tempo (as instrues so executadas na ordem em que
aparecem numa listagem).
Se no houver desvio (a), o contador avana linearmente.
Se houver desvio (b), o contador avana linearmente por
partes, entre os desvios.

C C
O O
N N
T T
A A
D D Desvios
O O
R R

D D
O O

P P
R R
O O
G G
R R
A A
M M
Tempo Tempo
A A
(a) Sem desvios (b) Com desvios

59
Procedimentos

A utilizao de procedimentos a tcnica mais importante


para se estruturar programas.

A chamada de um procedimento altera o fluxo de controle


do programa, como ocorre com um desvio, mas permite o
retorno para a instruo seguinte instruo de chamada.

A instruo de chamada de um procedimento pode ser


entendida como uma instruo de alto nvel. O que importa
o que o procedimento faz, no como ele faz.

Procedimento recursivo: um procedimento que chama a si


mesmo.
Exemplos de problemas solucionados atravs de
procedimentos recursivos:
Torre de Hani.
Fatorial: 5! = 5 * 4! = 5 * 4 * 3! = 5 * 4 * 3 * 2! ...

60
Chamada de um procedimento B a partir de um
procedimento A:
(A) (B)
Procedimento Procedimento
que chama chamado
A chamado
pelo
programa
principal

A retorna
ao programa
principal

O procedimento B sempre comea do seu incio.

Sistema de chamada e retorno de um procedimento:


O procedimento A utiliza uma instruo de chamada de
sub-rotina (p.ex. CALL), que armazena o endereo de
retorno, por exemplo, no topo da pilha, e carrega o
contador do programa com o endereo do procedimento
B.
Para retornar, o procedimento B executa uma instruo
de retorno (p.ex. RET), que retira do topo da pilha o
endereo de retorno e o transfere para o contador do
programa.

61
Co-rotinas

Co-rotinas so procedimentos que chamam uns aos outros,


sendo que a cada nova chamada o procedimento continua
do ponto onde parou na ltima vez, ou seja, a partir do
comando seguinte ao ltimo retorno.

(A) (B)

A chamado
pelo
programa
principal

A retorna
ao programa
principal

Este esquema pode ser implementado se existir alguma


instruo que permita trocar o topo da pilha com o
contador do programa. Inicialmente necessrio a
colocao do endereo de uma das duas co-rotinas na pilha.
Uma instruo de chamada de co-rotina denominada de
resume.

62
Armadilhas (Traps)

Uma armadilha ou trap um tipo de chamada automtica


de procedimento disparada por alguma condio causada
pelo programa; em geral, uma condio importante ou
rara.

Exemplo: estouro numa operao aritmtica (overflow).


Numa operao aritmtica, ao ocorrer um resultado que
excede o maior nmero que puder ser representado,
ocorre um trap, o que significa que o fluxo de controle
ser transferido para alguma posio fixa na memria
em vez de continuar seqencialmente.
A partir desta posio fixa, existe um salto para um
procedimento denominado rotina de tratamento de trap,
que toma alguma ao apropriada (quem faz esta rotina
de tratamento do trap coloca esta instruo de desvio).
O trap pode ser considerado uma interrupo de carter
sncrono, pois ocorre sincronamente com a execuo da
instruo.

Exemplos de Traps:
Overflow e Underflow em ponto-flutuante.
Overflow em inteiro.
Violao de proteo.
Cdigo de operao indefinido.
Estouro da pilha.
Diviso por zero.

63
Interrupes

Uma interrupo ou conjunto de interrupes um


mecanismo que permite suspender temporariamente a
execuo de um programa, para tratar um evento, de
forma a possibilitar o seu posterior prosseguimento de
execuo.

As interrupes podem ser classificadas em:


Interrupes Sncronas ou Traps: so interrupes cujo
evento est diretamente sincronizado com a execuo de
uma determinada instruo.
Exemplos: overflow, diviso por zero.
Interrupes Assncronas: so interrupes relacionadas
a eventos externos.
Exemplos: o pressionar de uma tecla num
computador.
Uma interrupo pra o programa em execuo e transfere
o controle do programa para uma sub-rotina de tratamento
de interrupo, que executa alguma ao apropriada. Ao
terminar de tratar o evento, a sub-rotina de tratamento de
interrupo retorna o controle para o programa
interrompido.

As interrupes possuem duas fases distintas:


Reconhecimento da interrupo por parte da CPU.
Tratamento da interrupo (execuo da sub-rotina de
tratamento de interrupo ou rotina de servio).

64
Problemas: o programa interrompido deve voltar a ser
executado no mesmo estado em que estava antes de ocorrer
a interrupo.

As interrupes assncronas podem ser implementadas


num determinado hardware de duas formas:
Interrupes diretas por hardware: so aquelas
interrupes que vm diretamente dos dispositivos de E/S
para a CPU que sabe, a partir do sinal de interrupo em
particular, em que local da memria (fixo) buscar o
endereo da sub-rotina de tratamento da interrupo.
Interrupes vetoradas: so interrupes que fornecem,
alm do sinal de pedido de interrupo, o vetor de
interrupo (nmero inteiro que identifica o dispositivo)
pela via de dados do sistema.
Permite a canalizao de diversos pedidos de
interrupo atravs de um nico sinal.
O gerenciamento dos diversos pedidos feito
externamente por um controlador de interrupo.
`

INT
Controlador
INTA
do
Dispositivo CPU
DADOS
de
E/S Vetor de
Interrupo

Considerando a ocorrncia de uma interrupo vetorada,


existem procedimentos a serem realizados pelo hardware e
65
procedimentos a serem realizados pelo software, que em
conjunto, devem garantir o tratamento do evento e o
posterior prosseguimento do programa interrompido, como
se nada tivesse ocorrido.
Tarefas do Hardware:
1. O controlador do dispositivo gera um pedido de
interrupo (INT - Interrupt Request).
2. Quando a CPU puder atender ao pedido de interrupo
(por exemplo, ao terminar de executar a instruo
corrente), ela envia um sinal de reconhecimento de
interrupo (INTA - Interrupt Acknoledge).
3. Recebendo o reconhecimento da interrupo, o
controlador do dispositivo envia pela via de dados o seu
nmero de identificao (vetor de interrupo).
4. A CPU obtm o vetor de interrupo e o armazena
internamente.
5. A CPU salva o seu status mnimo, (PSW - Processor
Status Word), na pilha, como o Contador do Programa, o
Acumulador e os Flags de Mquina.
6. A CPU carrega o Contador do Programa com o endereo
da sub-rotina de tratamento daquela interrupo, obtido
da memria (tabela de vetores de interrupo), a partir do
vetor de interrupo recebido.
Por exemplo, se o dispositivo tem nmero n e os
endereos so de 2 bytes (portanto, o Contador do
Programa tem 2 bytes), o endereo da sub-rotina
obtido nas posies de memria [2*n] e [2*n+1].

66
Memria
0000h Endereo do vetor 0
Tabela 0002h Endereo do vetor 1
de 0004h Endereo do vetor 2
Vetores 0006h Endereo do vetor 3
de 0008h Endereo do vetor 4
000Ah Endereo do vetor 5
Interrupo
000Ch Endereo do vetor 6
000Eh Endereo do vetor 7

Tarefas do Software:
1. A sub-rotina de tratamento da interrupo salva o
contedo dos registradores da CPU que ir utilizar, por
exemplo, na pilha.
2. A sub-rotina realiza a sua tarefa propriamente dita: a
operao de E/S (por exemplo, l o cdigo da tecla
pressionada e o armazena num buffer).
3. A sub-rotina restaura o contedo dos registradores
salvos.
4. A sub-rotina executa uma instruo de retorno da
interrupo, permitindo a CPU recuperar o seu status
mnimo (PSW).
5. O programa interrompido prossegue ento como se a
interrupo no tivesse ocorrido.
Conceito relativos a interrupo:
Transparncia: uma sub-rotina de interrupo dita
transparente quando aps o retorno da sub-rotina o
programa interrompido volta para o estado exato em que
estava anteriormente a chegada da interrupo.
Mascaramento: mecanismo que permite desabilitar uma
interrupo ou um conjunto de interrupes.
67
Simultaneidade de Interrupes: se duas interrupes
ocorrem ao mesmo instante, a de maior prioridade ser
atendida.

68
Uma interrupo pode ocorrer enquanto outra est sendo
tratada pela sua sub-rotina de tratamento. Solues
possveis:
Inibio: todas as sub-rotinas de tratamento de
interrupo inibem interrupes subseqentes antes
de tomar qualquer outra atitude.
Problema: pode-se perder outras interrupes.
Prioridade: cada interrupo tem uma prioridade
diferente, definida na PSW, por exemplo. Eventos
mais prioritrios so atribudos a interrupes de
maior prioridade. Quando uma interrupo de
prioridade n estiver sendo tratada, somente eventos
mais prioritrios podem interromp-la; eventos
menos prioritrios devem aguardar.

69
Exemplo: Supor um sistema com uma impressora, um disco
e uma interface RS232, com prioridades 2, 4 e 5
respectivamente.

Interrupo RSI da RS232


da disco. termina.
Prioridade 4. Interrupo
Pendente. do disco

Interrupo
RSI do disco
da RS232.
Interrupo Prioridade 5. termina.
da
impressora. RSI da
Prioridade impressora
2. termina.

0 10 15 20 25 35 40

Tempo
Programa RSI da RSI RSI RSI da Program
do impres- da do impres- a do
usurio sora RS232 disco sora usurio
Usurio Usurio Usurio Usurio Pilha
Impressora Impressora Impressora

70
Intel

Possuem dois nveis de prioridade:


Interrupes no mascarvel: utilizadas para sinalizar
catstrofes, como erro de paridade.
Interrupes mascarveis:
Utilizam o vetor de interrupo para indexar uma
tabela de 256 entradas de 4 bytes cada, para
encontrar o endereo da rotina de servio de
interrupo.
8088: vetor comea na posio de memria 0.
80286/80386: vetor pode comear em qualquer lugar da
memria.
A prioridade fornecida por um controlador de
interrupo externo 8259A. A CPU deve indicar
quando a rotina de servio terminou, sinalizando
isso atravs de uma escrita num registrador do
8259A.

Motorola:

Possuem 256 vetores de interrupo de 4 bytes cada, a


partir do endereo 0 de memria.

Possui 3 pinos para indicar nveis de prioridade de 0 a 7. O


nvel 7 no mascarvel.

Existem trs bits no PSW que permitem definir a


prioridade.

71

Você também pode gostar