Anda di halaman 1dari 38

CONTEDO DO CAPTULO 11 (SAP-2)

11.0 Introduo .......................................................................................... 03

11.1 Registradores Bidirecionais.............................................................. 03

11.2 Arquitetura ......................................................................................... 03


Portas de Entrada,03
Contador de Programa,03
REM e Memria,04
Registrador de Dados de Memria,04
Registrador de Instruo,04
Controlador-sequencializador,05
Acumulador,05
ULA e Flags,06
Registradores TMP,B e C,06
Portas de Sada,06

11.3 Instrues com Referncia Memria..............................................06


LDA eSTA,06
MVI,07
Cdigos de Operao,07

11.4 Instrues de registradores...............................................................09


MOV,09
ADD e SUB,10
INR e DCR,10

11.5 Instrues JUMP e CALL....................................................................12


JMP,12
JM,12
JZ,13
JNZ,13
CALL e RET,14
Mais sobre Flags,15

11.6 Instrues Lgicas..............................................................................20


CMA,20
ANA,20
ORA,21
XRA,21
ANI,21
ORI,21
XRI,22

11.7 Outras Instrues................................................................................22


NOP,22
HLT,22
OUT,22
RAL,23
RAR ,23

1
11.8 Resumo do SAP-2...............................................................................25
Estados T,25
Flags(Bandeiras),26
Saltos Condicionais,26
Modos de Endereamento,27
Bytes,28

Glossrio..........................................................................................................36

Exerccios de Fixao.....................................................................................36

Problemas........................................................................................................37

2
SAP-2

O SAP-1 um computador porque ele, primeiramente, armazena um programa e os dados antes


de comear os clculos e, ento, executa automaticamente as instrues do programa sem a
interveno humana. E, tambm, o SAP-1 uma mquina primitiva. Ele se compara com o
computador moderno da mesma forma que o homem das cavernas de compara com o homem
moderno.Algo est ausente nele, algo que pode ser encontrado em qualquer computador moderno.
O SAP-2 o prximo passo da evoluo em direo ao computador moderno porque inclui
instrues de salto. Estas novas instrues obrigam o computador a repetir ou omitir partes de um
programa. Como voc ver, as instrues de salto abrem as portas para toda uma nova capacidade
computacional.

11-1 REGISTRADORES BIDlRECIONAlS

Para reduzir a capacitncia da fiao do SAP-2, usaremos apenas um conjunto de fios entre
cada registrador e o barramento. A Fig. 11-1a mostra a idia. Os pinos de entrada e sada so
ligados entre si; apenas um grupo de fios conectado ao barramento.
Esta sobreposio de pinos causa problemas? No. Durante o funcionamento do computador,
tanto LOAD como HABILITA podem estar ativos, mas nunca ao mesmo tempo. Um LOAD ativo
significa que uma palavra binria flui do barramento para a entrada do registrador; durante uma
operao de carga, as linhas de sada esto flutuando. Por outro lado, um HABILITA ativo significa
que os dados esto fluindo do registrador para o barramento e, neste caso, as linhas de entrada
esto flutuando.
O fabricante do CI pode ligar internamente os pinos de entrada e de sada de um registrador de
trs estados. Alm de diminuir a capacitncia de fiao, isto diminui o nmero de pinos de E/S. Por
exemplo, a Fig. 11-1b mostra quatro pinos de E/S em vez de oito.
A Fig. 11.1c o smbolo de um registrador de trs estados com os pinos de entrada e sada
interconectados internamente. As setas duplas lembram-nos que o caminho bidirecional;os dados
movem-se nos dois sentidos.

11-2 ARQUITETURA

A Fig. 11-2 mostra a arquitetura do SAP-2. Todos os registradores ligados ao barramento W so


de trs estados; os demais so de dois estados. Como antes, o controlador-sequencidor envia sinais
de controle (no ilustrados) para cada registrador. Estes sinais de controle carregam, habilitam ou de
alguma outra forma preparam o registrador para a prxima borda positiva do sinal de relgio. A
seguir, dar-se- uma breve descrio de cada caixa.

Portas de Entrada

O SAP-2 tem duas portas de entrada, numeradas com 1 e 2. Um codificador hexadecimal de


teclado est ligado porta 1. Ele nos permite dar entrada a dados e instrues hexadecimais atravs
da porta 1. Observe que o codificador do teclado envia um sinal de READY (pronto) para o bit 0 da
porta 2, Este sinal indica quando o dado da porta 1 est vlido.
Observe tambm o sinal SERlAL IN indo para o pino 7 da porta 2. Um exemplo posterior
mostrar como converter dados seriados de entrada em dados paralelos.

Contador de Programa

Desta vez o contador de programa tem 16 bits. Portanto, ele pode contar de

PC = 0000 0000 0000 0000


At

PC = 1111 1111 1111 1111

3
Isto equivale a contar de 0000H a FFFFH ou em decimal de O a 65.535.
Um sinal baixo CLR zera o PC (contador de programa) antes do computador comear a
executar um programa; assim, a primeira instruo a ser executada a armazenada na posio
0000H memria.

REM e Memria

Durante o ciclo de busca, o REM (registrador de endereo de memria) recebe endereos de 16


bits do contador de programa. Ento, a sada de dois estados do REM indica a posio desejada de
memria. A memria tem uma ROM de 2K com endereos de 0000H a 07FFH. Esta ROM contm
um programa, o monitor, que inicializa o computador ao ser ligado; interpreta as entradas do teclado
e assim por diante. O restante da memria uma RAM de 62K com endereos de 0800H a FFFFH.

Registrador de Dados de Memria

O registrador de dados de memria (DMR) um registrador buffer de 8 bits. A sua da sada


alimenta a RAM, O registrador de dados de memria recebe dados do barramento antes de uma
operao de escrita e envia dados para o barramento depois de uma operao de leitura.

Registrador de Instruo

Como o SAP-2 tem mais instrues que o SAP-1, usaremos 8 bits em vez de 4, para o cdigo de
operao. Um cdigo de operao de 8 bits pode acomodar 256 instrues. Como o SAP-2 tem
apenas 42 instrues, no haver problemas com a codificao das instrues. O uso de um cdigo
de operao de 8 bits tambm permitir posterior compatibilizao com o conjunto de instrues do
8080/8085 que se baseia tambm em 8 bits. Como foi mencionado anteriormente, todas as
instrues SAP so idnticas s instrues do 8080/8085.

Fig. 11-1 Registrador bidirecional.

4
Controlador-Sequencializador

O controlador-sequencializador produz as palavras de controle ou microinstrues que


coordenam e dirigem o restante do computador. Como o SAP-2 tem um repertrio de instrues
maior, o controlador-sequencializador tem mais hardware. Apesar da palavra CON ser maior, a idia
a mesma: a palavra de controle ou microinstruo determina como os registradores devem reagir
prxima borda positiva de relgio.

Acumulador

Enquanto a sada de dois estados do acumulador vai para a ULA, a sada de trs estados vai
para o barramento W. Assim, a palavra de 8 bits do acumulador alimenta continuamente a ULA.
Entretanto, esta mesma palavra aparece no barramento apenas quando E A est ativo.

Fig. 11-1 Registrador bidirecional.

5
ULA e Flags

As ULAs esto comercialmente disponveis como circuitos integrados. Elas tm 4 ou mais bits de
controle que determinam a operao lgica ou aritmtica a ser executada com as palavras A e B. A
ULA usada no SAP-2 inclui operaes lgicas e aritmticas.
Neste livro, um flag (bandeira) um flip-flop que informa sobre uma condio varivel durante a
execuo de um programa. O SAP-2 tem 2 flags. O flag de sinal setado quando o contedo do
acumulador torna-se negativo durante a execuo de algumas instrues. O flag de zero setado
quando o contedo do acumulador toma-se zero.

Registradores TMP , B e C

Em vez de usar o registrador B para guardar o dado que est sendo adicionado ou subtrado do
acumulador, usa-se um registrador temporrio (TMP). Isto nos traz maior liberdade ao usar o
registrador B. Alm dos registradores TMP e B, o SAP-2 tem tambm um registrador C. Isto nos d
maior flexibilidade ao mover dados durante uma "rodada" de computador.

Portas de Sada

O SAP-2 tem duas portas de sada, numeradas 3 e 4. O contedo do acumulador pode ser
carregado na porta 3 que alimenta um display hexadecimal. Isto nos permite ver os dados
processados.
O contedo do acumulador tambm pode ser enviado para a porta 4. Observe que o pino 7 da
porta 4 envia um sinal de ACKNOWLEDGE (reconhecimento) para o codificador hexadecimal. Este
sinal de ACKNOWLEDGE e o sinal de READY fazem parte de um conceito chamado handshaking
("aperto de mos") a ser discutido posteriormente.
Observe tambm o sinal de SERIAL OUT (sada em srie) que sai do pino 0 da porta 4. Um dos
exemplos nos mostrar como converter os dados paralelos do acumulador em dados seriados de
sada.

11-3 INSTRUES COM REFERNCIA MEMRIA

O ciclo de busca do SAP-2 o mesmo de antes. T1 o estado de endereo, T2 o estado de


incremento e T3 o estado de memria: Portanto, todas as instrues do SAP-2 usam memria
durante o ciclo de busca porque toda instruo de programa transferida da memria para o
registrador de instruo.
Durante o ciclo de execuo, entretanto, a memria pode ou no ser usada dependendo do tipo
de instruo que foi buscada. Uma instruo com referncia memria (IRM) aqueIa que usa a
memria durante o ciclo de execuo.
O conjunto de instrues do SAP-2 apresenta 42 instrues, O que se expe a seguir uma
descrio das instrues com referncia memria.

LDA e STA

LDA (load accumulator) tem o mesmo significado de antes: carregar o acumulado com o dado
endereado na memria. A nica diferena que mais posies de memria podem ser acessadas
no SAP-2 porque os endereos vo de 0000H at FFFFH. Por exemplo, LDA 2000H significa
carregar o acumulador com o contedo da posio 2000H na memria.
Para se distinguir as diferenas de uma instruo,o mnemnico e chamado algumas vezes de
cdigo de operao e o restante da instruo conhecido como operando. Em LDA 2000H, LDA o
cdigo de operao e 2000H o operando Assim, "cdigo de operao" pode significar duas coisas
na rea de rnicrocomputadores: pode significar o mnemnico ou o cdigo binrio utilizado para
representar o mnemnico. O significado pretendido torna-se claro a partir do contexto.
STA (store accumulator) um mnemnico para armazenar o acumulador. Todas as instrues
STA necessitam de um endereo. STA 7FFFH significa armazenar o contedo do acumulador na
posio 7FFFH da memria. Se

6
A= 8AH

a execuo de STA 7FFFH armazena 8AH no endereo 7FFFH.

MVI

MVI (move immediate) o mnemnico para mova imediato. Esta instruo diz para o computador
carregar um registrador indicado com o byte que sucede imediatamente o cdigo de operao. Por
exemplo,

MVI A,37H

diz para o computador carregar o acumulador com 37H. Depois da execuo desta instruo, o
contedo do acumulador ser

A= 0011 0111

Voc pode usar a instruo MVI com os registradores A, B e C. Os formatos destas instrues
so

MVI A,byte
MVI-B,byte
MVI C,byte

Cdigos de Operao

A Tabela 11-1 mostra os cdigos de operao do conjunto de instrues do SAP-2. Estes so


cdigos de operao do 8080/8085. Como voc pode ver, 3A o cdigo de operao para LDA, 32
o cdigo de operao para STA etc. Refira-se a esta tabela no restante deste captulo.

EXEMPLO 11-1

Mostre os mnemnicos de um programa que carrega o acumulador com 49H, o registrador B


com 4H e o registrador C com 4BH. A seguir o programa armazena o contedo do acumulador na
posio 6285H da memria.

SOLUO

Aqui est um programa que funcionar:

Mnemnicos

MVI A,49H
MVI B,4AH
MVI C,4BH
STA 6285H
HLT

As trs primeiras instrues carregam 49H, 4AH e 4BH nos registradores A, B e C. STA 6285H
armazena o contedo do acumulador em 6285H.
Observe o uso de HLT neste programa. Ele tem o mesmo significado de antes: parar o
processamento dos dados.

7
EXEMPLO 11-2

Converta o programa anterior para a linguagem de mquina do 8080/8085 usando os cdigos de


operao da Tabela 11-1 .Comece no endereo 2000H.
SOLUO

H duas novas idias neste programa em linguagem de mquina. Com a instruo

MVI A,49H

observe que o cdigo de operao vai no primeiro endereo e o byte vai no segundo endereo.Isto
vlido para todas as instrues de dois bytes: o cdigo de operao na primeira posio disponvel
de memria e o byte na seguinte.
A instruo

STA 6285H

uma instruo de trs bytes (1 byte para o cdigo de operao e 2 bytes para o endereo). O
cdigo de operao de STA 32H. Este byte vai na primeira posio disponvel de memria, que
2006H. O endereo 6285H tem dois bytes. O byte inferior 85H vai na prxima posio de memria e
o byte superior 62H na seguinte.
Por que o endereo programado com o byte inferior primeiro e o byte superior depois?
Isto uma peculiaridade do projeto original do 8080. Para manter a compatibilidade, o 8085 e outros
microprocessadores seguiram esta mesma disposio dos bytes de endereo na memria de
programa.
A ltima instruo HLT tem um cdigo de operao de 76H armazenado na posio 2009H da
memria.
Em resumo, as instrues MVI so de 2 bytes, a STA uma instruo de 3 bytes e a HLT de 1
byte.

8
TABELA 11-1. CDIGOS DE OPERAO DO SAP-2

11-4 INSTRUES DE REGISTRADORES .

As instrues com referncia memria so relativamente lentas porque necessitam de mais de


um acesso memria durante o ciclo de instruo. Alm disso, seguidamente queremos transferir
dados de um registrador para outro sem ter de passar pela memria. A seguir veremos algumas das
instrues de registradores do SAP-2 que foram projetadas para mover dados de um registrador
para outro no menor tempo possvel.

MOV

MOV (move) o mnemnico de mova. Esta instruo diz para o computador mover dados de um
registrador para outro. Por exemplo,

MOV A,B

diz para o computador mover o contedo do registrador B para o acumulador. O contedo de B


copiado sem ser destrudo. Por exemplo, se

A= 34H e B = 9DH

ento a execuo de MOV A,B resulta em

A= 9DH
B = 9DH

9
Voc pode mover dados entre os registradores A, B e C. Os formatos de todas as instrues
MOV so

MOV A,B
MOV A,C
MOV B ,A
MOV B.C
MOV C,A
MOV C,B
Estas instrues so as mais rpidas do conjunto de instrues do SAP-2 porque exigem apenas um
ciclo de mquina.

ADD e SUB

ADD (add) significa adicionar o contedo do registrador designado ao acumulador. Por exemplo,

ADD B

significa adicionar o contedo do registrador B ao acumulador. Se

A= 04H e B = 02H

ento a execuo de ADD B resulta em

A=06H

De maneira parecida, a instruo SUB significa subtrair o contedo do registrador designado do


acumulador. SUB C ir subtrair o contedo do registrador C do acumulador.
Os formatos das instrues ADD e SUB so

ADD B
ADD C
SUB B
SUB C

INR e DCR

Muitas vezes desejamos incrementar ou decrementar o contedo de um dos registradores.INR


o mnemnico para incrementar que manda o computador incrementar o registrador designado. DCR
o mnemnico de decrementar que manda o computador decrementar o registrador designado. Os
formatos destas instrues so

INR A
INR B
INR C
DCR A
DCR B
DCR C

A ttulo de exemplo, se

B = 56H e C= 8AH

ento, a execuo de INR B resulta em

10
B = 57H

e a execuo de DCR C produz

C= 89H

EXEMPLO 11-3

Mostre os mnemnicos necessrios para somar os nmeros decimais 23 e 45. A resposta deve
ser armazenada na posio 5600H de memria. Alm disto, a resposta incrementada de uma
unidade deve ser armazenada no registrador C.

SOLUO

Os nmeros decimais 23 e 45 so equivalentes a 17H e 2DH. Aqui est um programa capaz de


realizar esta tarefa:

EXEMPLO 11-4 .

Montar manualmente um programa significa traduzir um programa fonte num programa de


mquina mo em vez de usar uma mquina. Monte manualmente o programa do exemplo
precedente no endereo 2000H.

SOLUO

Observe que as instrues ADD, INR, MOV e HLT so de 1 byte; as instrues MVI so de 2 bytes e
a instruo STA, de 3 bytes.

11
11-5 INSTRUES JUMP E CALL.

O SAP-2 tem trs instrues de saltar(jump) que podem alterar a seqncia de instrues dentro
de um programa.Em outras palavras, em vez de buscar a prxima instruo da maneira usual, o
computador pode saltar ou desviar para uma outra parte do programa.

JMP

Para comear , JMP o mnemnico para saltar (jump) que manda o computador buscar a
prxima instruo da posio designada da memria. Toda instruo JMP inclui um endereo que
carregado no contador de programa. Por exemplo,

JMP 3000H

diz ao computador para buscar a prxima instruo na posio 3000H de memria.

Fig. 11.3 (a) Salto incondicional; (b) salto condicional

Aqui est o que acontece. Suponha que JMP 3000H est armazenado na posio 2005H como
ilustrado na Fig. 11-3a. No final do ciclo de busca, o contador de programa contm

PC = 2006H

Durante o ciclo de execuo, a JMP 3000H carrega o contador de programa com o endereo
designado:

PC = 3000H

Quando o prximo ciclo de busca comear, a prxima instruo vir de 3000H e no de 2006H (ver
Fig. 11-3a).

JM

O SAP-2 tem dois flags: o de sinal e o de zero. Durante a execuo de algumas instrues, estes
flags sero setados ou zerados dependendo do que acontece com o contedo do acumulador. Se o

12
contedo do acumulador se tornar negativo, o flag de sinal ser setado, se no, ser zerado.
Simbolicamente

onde S significa flag de sinal. O flag de sinal permanecer setado ou zerado at que uma nova
operao o afete.
JM um mnemnico para saltar se menos (jump if minus). O computador saltar para o
endereo designado somente se o flag de sinal estiver setado. Por exemplo, suponha que uma JM
3000H esteja armazenada em 2005H. Depois da busca desta instruo,

PC = 2006H

Se S = 1 , a execuo da JM 3000H carregar o contador de programa com

PC = 3000H

Como o contador de programa contm agora o valor 3000H, a prxima instruo vir de 3000H.
Se a condio de saltar no for verdadeira (S = O), o contador de programa permanecer
inalterado durante o ciclo de execuo. Assim, durante o prximo ciclo de busca, a instruo ser
buscada de 2006H.
A Fig. 11-3b simboliza as duas possibilidades para uma instruo JM. Se a condio de menos
for satisfeita, o computador saltar para 3000H. Caso contrrio, o programa seguir normalmente
como se nada tivesse acontecido.

JZ

O outro flag afetado pelas operaes de acumulador o de zero. Durante a execuo de


algumas instrues, o acumulador se tornar zero. Para registrar este evento, o flag de zero ser
setado. Se o contedo do, acumulador no se tornar zero, o flag de zero ser zerado.
Simbolicamente

JZ o mnemnico para saltar se zero (jump if zero) que manda o computador saltar para o
endereo designado apenas se o flag de zero estiver setado. Suponha que uma JZ 3000H esteja
armazenada em 2005H. Se Z = 1 durante a execuo da JZ 3000H, ento a prxima instruo ser
buscada em 3000H. Caso contrrio, Z = 0, a prxima instruo vir de 2006H.

JNZ

JNZ significa saltar se no zero (jump if not zero ). Ela manda o computador saltar para o
endereo designado apenas quando o flag de zero estiver zerado. Quando o flag de zero estiver
setado, no haver salto. Suponha que uma JNZ 7800H esteja em 2100H. Se Z = 0, a prxima
instruo vir de 7800H; entretanto, se Z = 1, o programa passar por cima indo para a instruo
armazenada em 2101H.
JM, JZ e JNZ so instrues de salto condicional, porque o saldo no programa ocorre apenas
quando certas condies esto satisfeitas. Por outro lado, JMP incondicional, porque depois que a
instruo for buscada, o ciclo de execuo sempre far o programa pular para o endereo
especificado.

13
CALL e RET

Uma sub-rorina um programa armazenado na memria para um possvel uso num outro
programa. Muitos microcomputadores tm sub-rotinas para o clculo de senos, co-senos, tangentes.
logaritmos, razes quadradas etc. Estas sub-rotinas fazem parte do software fornecido com o
microcomputador.
CALL (chamar) um mnemnico para chamar sub-rotina. Toda instruo CALL deve incluir o
endereo inicial da sub-rotina desejada. Por exemplo, se uma sub-rotina para raiz quadrada comear
no endereo 5000H e uma de logaritmo comear no endereo 6000H, a execuo de

CALL 5000H
ir fazer um salto para a sub-rotina de raiz quadrada. Por outro lado, uma

CALL 6000H

produzir um salto para a sub-rotina de logaritmo.


RET significa retornar. Ela usada no fim de todas as sub-rotinas para mandar o computador
retomar ao programa original. Uma instruo RET est para uma sub-rotina assim como uma
instruo HLT est para um programa. Ambas dizem ao computador que algo est terminado. Se
voc esquecer de colocar RET no fim de uma sub-rotina, o computador no poder voltar ao
programa original e voc acabar obtendo entulho de computador.
Quando uma CALL executada no SAP-2, o contedo do contador de programa
automaticamente resguardado nas posies de memria FFFEH e FFFFH (as duas ltimas posies
da memria). Ento, o endereo que acompanha a CALL carregado no contador de programa para
que a execuo possa comear no primeiro endereo da sub-rotina. Quando a sub-rotina termina, a
instruo RET faz com que o endereo depositado nas posies FFFEH e FFFFH seja carregado de
volta no contador de programa. Isto devolve o controle ao programa original.
A Fig. 11-4 mostra o fluxo de programa durante uma sub-rotina. A instruo CALL 5000H envia o
computador para a sub-rotina localizada na posio 5000H. Quando esta sub-rotina estiver
encerrada, a instruo RET enviar o computador de volta para a instruo que sucede a CALL no
programa principal.

Fig. 11-4 A instruo CALL

Assim como a JMP , a CALL incondicional. Logo que uma CALL for buscada do registrador de
instruo, o computador saltar para o endereo inicial da sub-rotina.

14
Mais sobre os Flags

Os flags de zero e de sinal podero ser setados ou zerados durante a execuo de certas
instrues. A Tabela 11-2 lista as instrues do SAP-2 que afetam os flags. Todas estas instrues
usam o acumulador durante o ciclo de execuo. Se o acumulador se tornar zero ou negativo
enquanto uma destas instrues estiver sendo executada, o flag de zero ou de sinal ser setado.
Por exemplo, suponha que a instruo que est sendo executada seja ADD C. O contedo do
registrador C adicionado ao contedo do acumulador. Se o contedo do acumulador se tornar zero
ou negativo no processo, o flag de zero ou de sinal ser setado.
Uma palavra ainda sobre as instrues INR e DCR. Como estas instrues usam o acumulador
para incrementar ou decrementar 1 do registrador designado, elas tambm afetam os flags.Por
exemplo, para executar uma DCR C, o contedo do registrador C enviado para o acumulador,
subtrado de 1 e devolvido ao registrador C. Se o acumulador se tornar negativo, o flag de sinal ser
setado e, se o acumulador se tornar zero, o flag de zero ser setado.

TABELA 11-2. INSTRUES QUE AFETAM OS FLAGS

EXEMPLO 11.5

Faa a montagem manual do seguinte programa que inicia no endereo 2000H:

MVI C,O3H
DCR C
JZ 0009H
JMP 0002H
HLT
SOLUO

15
EXEMPLO 11-6

No programa anterior, quantas vezes a instruo DCR executada?

SOLUO

A Fig. 11-5 ilustra o fluxo de programa. Aqui est o que acontece. A instruo MVI C,03H carrega
o registrador C com 03H. A DCR reduz o contedo para 02H. O contedo superior a zero; portanto,
o flag de zero zerado e a instruo JZ 2009H ignorada. A JMP 2002H faz o computador voltar
instruo DCR C.

Fig. 11-5 Lao de operaes repetidas.

Na segunda vez que a DCR C executada, o contedo desce para 01H e o flag de zero ainda
continua zerado.JZ 2009H novamente ignorada e a JMP 2002H faz o computador voltar para DCR
C.
Na terceira DCR C, o contedo vai a zero. Desta vez, o flag de zero setado e, ento, a JZ
2009H faz o programa pular para a instruo HLT.
Um lao uma parte de um programa que repetida. Neste exemplo, ns passamos trs vezes
atravs do lao (DCR C e JZ 2009H), como ilustrado na Fig. 11-5. Note que o nmero de vezes que
se passou pelo lao igual ao nmero inicialmente presente no registrador C. Se mudarmos a
primeira instruo para
MVI C,07H

o computador far 7 passagens pelo lao. Da mesma forma, se desejarmos passar.200 (C8H) vezes
pelo lao; a primeira instruo seria
MVI C,C8H

O registrador C age como um contador decrementador pr-ajustvel. Esta a razo pela qual o
registrador C algumas vezes conhecido como um contador.
O ponto a ser lembrado o seguinte. Podemos montar um lao usando MVI, DCR, .JZ e JMP
num programa. O nmero carregado no registrador designado (o contador) determina o nmero de
passagens pelo lao. Se colocarmos mais instrues dentro do lao, estas instrues adicionais
sero executadas X vezes, onde X o nmero colocado inicialmente no contador.

EXEMPLO 11-7

Quando voc compra um microcomputador, voc adquire junto normalmente software par realizar
diferentes tarefas. Um dos programas que voc pode adquirir um assembler. O assembler lhe
permite escrever programas na forma de mnemnicos. Ento, o assembler converte estes
mnemnicos em linguagem de mquina. Em outras palavras, quando voc tem um assembler, no

16
precisa mais fazer montagem manual de seus programas; o computador far isto por voc.Mostre a
verso em linguagem assembler do programa do Exemplo 11-5. Inclua rtulos e comentrios.

SOLUO

Quando voc escreve um programa, ajuda muito colocar os seus prprios comentrios sobre o
que cada instruo deve supostamente fazer. Estes comentrios ativaro sua prpria memria
quando voc voltar a ler o programa meses depois. O primeiro comentrio nos lembra que estamos
inicializando o contador com o decimal 3; o segundo comentrio nos lembra que estamos
decrementando o contador; o terceiro comentrio nos diz que vamos testar o zero antes de saltar e,
finalmente, o quarto comentrio nos diz que o programa vai repetir o lao.
Quando o assembler converte o seu programa fonte em programa objeto, ele ignora tudo o que
est aps o ponto e vrgula. Por qu? Porque o assembler foi escrito assim. O ponto e vrgula uma
maneira codificada de lembrar o computador de que comentrios pessoais se seguiro. (Lembre-se
do ,cdigo ASCII. 3BH o ASCII para o ponto e vrgula. Quando assembler encontra 3BH ele sabe
que comentrios se seguiro.)
O uso de rtulos um outro auxlio usado com saltos e chamadas de sub-rotinas. Ao se escrever
um programa em assembler, normalmente no se tem nenhuma idia dos endereos que devem
acompanhar as instrues de salto e de chamada de sub-rotina. Ao usar um rtulo no lugar de um
endereo, poderemos escrever programas que nos faro sentido. O assembler atribuir corretamente
endereos aos nossos rtulos. Esta uma notvel caracterstica de um assembler, porque nos
proporciona uma grande economia de esforos.
Por exemplo, quando o assembler converte o programa anterior para a linguagem de mquina,
ele substitui JZ por CA (Tabela 11-1 de cdigos de operao) e END pelo e endereo da instruo
HLT. Da mesma forma, ele substituir JMP por C3 (cdigo de operao) REPEAT pelo endereo da
instruo DCR C. O assembler determina os endereos das instrues HLT e JMP contando o
nmero de bytes necessrios a todas as instrues e determinando onde as instrues HLT e DCR
C ficaro no programa final montado.
Tudo o que voc precisa se lembrar de que voc pode usar quaisquer rtulos que desejar para
as instrues de salto e de chamada de sub-rotina. O mesmo rtulo seguido de dois pontos
colocado na frente da instruo para onde voc est tentando saltar. Quando o assembler estiver
convertendo o seu programa para linguagem de mquina, os dois pontos indicaro que um rtulo
est presente.
Mais um comentrio sobre os rtulos. No SAP-2, os rtulos podem ter de um a seis caracteres,
onde o primeiro sempre uma letra. Os rtulos so normalmente palavras ou abreviaes, mas
nmeros podem ser includos. A seguir temos exemplos de rtulos vlidos:

REPEAT
DELAY
RDKBD
A34
B12C3

Os dois primeiros so palavras; o terceiro uma abreviao e os dois ltimos incluem nmeros.As
restries quanto ao comprimento (no mais de seis caracteres) e quanto ao caracter inicial ( deve
ser uma letra) so tpicas dos assemblers comerciais.

17
EXEMPLO 11-8

Mostre um programa para multiplicar os decimais 12 e 8;

SOLUO

Os equivalentes hexadecimais de 12 e 8 so 0CH e 08H. Vamos montar um lao que adiciona 12 ao


acumulador em cada passagem. Se o computador repetir o lao 8 vezes, o contedo do acumulador
atingir 96 (decimal) no final.

Aqui est um programa em assembler que far a tarefa:

Os comentrios contam quase toda a histria. Primeiro, ns zeramos o acumulador, A seguir,


colocamos o decimal 12 no registrador B. Ento, o contador inicializado com o decimal 8. Estas
trs instrues constituem parte da inicializao que precede a entrada no lao.
A instruo ADD B comea o lao adicionando o decimal 12 ao acumulador. A DCR C diminui o
contador para 7. Como o flag de zero est zerado, a JZ DONE ignorada na primeira vez que se
passa pelo lao de repetio, e o programa retoma para a instruo ADD B.
Voc deve ser capaz de saber o que ocorrer a seguir. A ADD B dentro do lao ser executada 8
vezes. Depois de 8 passagens pelo lao, o flag de zero ser setado; ento, a JZ DONE (DONE em
ingls significa feito) levar o programa para fora do lao na instruo HLT.
Como 12 adicionado 8 vezes,

12 + 12 + 12 + 12 + 12 + 12 + 12 + 12 = 96

(Como o decimal 96 equivalente ao hexadecimal 60, o acumulador conter 0110 0000.) Adies
repetidas como as acima so equivalentes a uma multiplicao. Em outras palavras, adicionar 12 oito
vezes o mesmo que 12 x 8. A maioria dos microprocessadores no dispe de hardware para
multiplicao, se limitando a um somador-subtrator como o do SAP-2. Assim, nos
microprocessadores comuns, voc deve usar alguma forma de multiplicao programada como uma
adio repetida, por exemplo.

EXEMPLO 11-9

Modifique o programa de multiplicao anterior usando uma JNZ em vez de uma JZ.

SOLUO

Veja isto:

18
Isto mais simples. Uma instruo JMP e um rtulo so eliminados. Enquanto o contador for maior
do que zero, a JNZ obrigar o computador a voltar para REPEAT. Quando o contador atingir zero, o
programa passar por JNZ caindo em HLT.

EXEMPLO 11-10
Faa uma montagem manual do programa anterior comeando no endereo 2000H.

SOLUO

As trs primeiras instrues fazem a inicializao que precede a multiplicao. Se mudssemos


estes valores iniciais, poderamos realizar multiplicaes com outros nmeros.

EXEMPLO 11-11

Substitua a parte de multiplicao do programa anterior por uma sub-rotina que inicie no
endereo F006H.

SOLUO

19
Eis o que aconteceu. As instrues de inicializao dependem dos nmeros que sero multiplicados.
Assim, eles no devem ser includos na sub-rotina. Ela dever conter apenas a parte de
multiplicao do programa.
Ao relocar o programa, ns mapeamos (convertemos) os endereos 2006H-200BH em F006H-
F00BH. Alm disto, a HLT foi transformada numa RET para podermos voltar ao programa original.

EXEMPLO 11.12

A sub-rotina de multiplicao do exemplo anterior usada no seguinte programa. Que faz ele?

MVI A, 00H
MVI B, 10H
MVI C,0EH
CALL FO06H
HLT
SOLUO

O hexadecimal 10H equivalente ao decimal 16 e o 0EH, ao 14. As trs primeiras instrues zeram
o acumulador, carregam o decimal 16 no registrador B e inicializam o contador com decimal 14. A
CALL envia o computador para a sub-rotina do exemplo anterior. Quando a RET executada, o
contedo do acumulador E0H, equivalente a 224 decimal.
A propsito, um parmetro um tipo de dado que deve ser convenientemente tratado por uma
sub-rotina. A sub-rotina de multiplicao localizada em F006H precisa de trs parmetros para
funcionar corretamente (A, B e C). Ns passamos estes parmetros sub-rotina de multiplicao
zerando o acumulador, colocando o multiplicando em B e o multiplicador e C. Em outras palavras,
ns fazemos A = 00H, B = 10H e C= 0EH. A passagem de dados para uma sub-rotina na forma
apresentada chamada de passagem de parmetros por registrador.

11-6 INSTRUES LGICAS

Um microprocessador pode fazer lgica tanto como aritmtica. A seguir, temos as instrues
lgicas do SAP-2, que constituem um subconjunto das instrues do 8080/8085.

CMA

CMA significa complementar o acumulador. A execuo de uma CMA inverte ou nega cada um
dos bits do acumulador produzindo o complemento de 1.

ANA

ANA significa fazer a operao lgica AND no acumulador (AND Accumulator) juntamente com o
contedo do registrador designado junto com a instruo. O resultado armazenado no acumulador.
Por exemplo,

ANAB

significa o AND do contedo do acumulador com o contedo do registrador B. Esta operao feita
bit a bit. Por exemplo, suponha que os dois registradores contenham

A= 1100 1100 (11-1)


e
B = 1111 0001 (11-2)

A execuo de ANA resulta em

20
A= 1100 0000

Observe que a operao lgica AND feita sobre pares de bits como se mostra na Fig.11-6. A7
com B7, A6 com B6. A5 com B5 e assim por diante. O resultado armazenado no acumulador .
No SAP-2, temos disponveis duas instrues ANA: ANA B e ANA C. A Tabela 11-1 mostra os
cdigos de operao.

Fig. 11-6 As instrues lgicas so feitas sobre pares de bit5.

ORA

ORA o mnemnico de fazer a operao lgica OR no acumulador (OR Accumulator)


juntamente com o registrador designado. As duas instrues ORA do SAP-2 so ORA B e ORA C.
Por exemplo, se os contedos dos registradores A e B forem os dados pelas equaes 11-1 e 11-2,
ento a execuo de ORA B dar

A= 1111 1101

XRA

XRA significa fazer a operao lgica XOR no acumulador(XOR Accumulator) juntamente com o
registrador designado. O SAP-2 apresenta as instrues XRA B e XRA C em seu conjunto de
instrues. Para os contedos dados pelas equaes 11-1 e 11-2, a execuo de XRA B fornece

A= 0011 1101

ANI

O SAP-2 tambm apresenta instrues lgicas imediatas. ANI significa AND imdiato (AND
Immediate). Ela manda o computador fazer a operao AND entre o contedo do acumulador e o
byte que sucede imediatamente o cdigo de operao. Por exemplo, se

A= 0101 1110

a execuo de ANI C7H far o AND de

0101 1110 com 1100 0111

para produzir o novo contedo do acumulador


A= 0100 0110

ORI

ORI o mnemnico para OR imediato (OR Immediate). O computador faz um OR entre o


contedo do acumulador e o byte que sucede o cdigo de operao da instruo. Se

A= 0011 1000

a execuo de ORI 5AH far o OR de

21
0011 1000 com 0101 1010

produzindo um novo contedo no acumulador de

A= 0111 1010

XRI

XRl significa XOR imediato (XOR Immediate). Se

0001 1100

a execuo de XRl D4H far o exclusive OR de

0001 1100 com 1101 0100


para produzir

A= 1100 1000

11-7 OUTRAS INSTRUES

Esta seco mostra as instrues restantes do conjunto de instrues do SAP-2. Como estas
instrues no se encaixam em nenhum grupo em particular, elas foram reunidas aqui formando um
grupo parte.

NOP

NOP significa no operar. Durante a execuo de uma NOP, todos os estados T no fazem
nada. Portanto, no ocorre nenhuma alterao nos registradores durante uma NOP.
A instruo NOP usada para perder tempo. Precisa-se de quatro estados T para buscar e
executar a instruo NOP. Repetindo um NOP um certo nmero de vezes, poderemos tardar o
processamento; isto til em operaes de temporizao. Por exemplo, se colocarmos uma NOP
dentro de um lao que ser executado 100 vezes, ns criaremos um retardo de tempo de 400
estados T.

HLT

Ns j usamos esta instruo. HLT significa parar (halt). Ela encerra o processamento dos dados.
IN o mnemnico para entrar (input). Ela manda o computador transferir dados de uma porta
designada para o acumulador. Como h duas portas, voc ter de indicar qual est sendo usada. O
formato da instruo para dar entrada a dados

IN byte

Por exemplo,

IN 02H

significa transferir dados da porta 2 para o acumulador.

OUT

OUT significa sair (output). Quando esta instruo usada, o contedo do acumulador
carregado na porta de sada indicada. O seu formato

22
OUT byte

Por exemplo, como h duas portas numeradas 3 e 4 (Fig. 11-2), voc ter de especificar qual est
sendo usada. Seja

OUT 03H

Esta instruo ir transferir o contedo do acumulador para a porta 3.

RAL

RAL o mnemnico para rotacionar o acumulador para a esquerda (rotate the accumulator to
left). Esta instruo deslocar todos os bits do acumulador para a esquerda alm de mover o bit mais
significativo (MSB) para a posio do bit menos significativo (LSB). Ver a Fig. 11- 7a. A ttulo de
exemplo, suponha que o contedo do acumulador seja

A= 1011 0100

A execuo de RAL dar


A= 0110 1001

Como voc pode ver, todos os bits se deslocaram para a esquerda e o mais significativo foi para a
posio menos significativa.

(a) (b)

Fig. 11-7 Instrues de rotao: (a) RAL;(b) RAR.

RAR

RAR significa rotacionar o acumulador para a direita (rotate accumulator right). Desta vez, os bits
do acumulador se deslocam para a direita e o bit menos significativo (LSB) vai para a posio do bit
mais significativo (MSB). Ver Fig. 11.7b. Se
A= 1011 0100

a execuo de uma RAR dar


A= 0101 1010

EXEMPLO 11-13

Os bits de um byte so numerados de 7 a 0 (MSB a LSB). Mostre um programa que d entrada a


um byte atravs da porta 2 e determine se o bit 0 um 1 ou um 0. Se for 1, o programa carrega no
acumulador um Y (yes = sim) em cdigo ASCll. Caso contrrio, o programa carrega um N(no)
ASCll no acumulador. A resposta sim ou no deve ser enviada para a porta 3 de sada.

SOLUO

23
A IN 02H transfere o contedo da porta 2 para o acumulador dando

A= A7A6A5A4A3A2A1

O byte imediato da ANI 01H

0000 0001

Este byte chamado de mscara porque seus 0s iro mascarar ou eliminar os bits em 1
correspondentes no acumulador. Em outras palavras, depois da execuo de ANI 01H teremos

A= 0000 000A0

Se A0 for 1, a JNZ YES produzir um salto para a MVI A,59H. Isto deposita um 59H (o ASCII de
Y) no acumulador. Se A0 for 0, o programa seguir direto para a MVI A, 4EH que carregar o ASCII
de N no acumulador .
A OUT 03H carrega a resposta (Y ou N em ASCII) na porta 3. O display hexadecimal exibir,
portanto, a resposta: 59H ou 4EH.

EXEMPLO 11-14

Ao invs de uma sada paralela na porta 3, ns queremos uma sada serial na porta 4. Modifique
o programa anterior para que ele converta a resposta (59H ou 4EH) numa sada serial no bit 0 da
porta 4.

SOLUO

Ao converter da forma paralela para a forma serial, o programa envia primeiro o bit A0 , depois o A1 ,
em seguida o A2 e assim por diante.

24
EXEMPLO 11-15

Handshaking (aperto de mo) uma tcnica de interao entre uma UCP e um dispositivo
perifrico e que ocorre durante uma transferncia E/S de dados.
No SAP-2, o handshaking ocorre da seguinte forma. Depois de voc dar entrada a dois dgitos (1
byte) no codificador hexadecimal da Fig. 11-2, o dado carregado na porta 1 e, ao mesmo tempo,
um bit alto de READY (pronto) enviado porta 2.
Antes de dar entrada a dados, a UCP testa o bit de READY na porta 2. Se READY estiver baixo,
a UCP esperar. Se READY estiver alto, a UCP carregar o dado na porta 1. Quando a transferncia
de dados estiver encerrada, a UCP enviar um sinal de ACKNOWLEDGE para o codificador
hexadecimal de teclado fazendo READY baixar de nvel.
Quando voc teclar um novo byte, o ciclo recomear com um novo dado indo para a porta 1 e
um novo READY em nvel alto indo para a porta 2.
A sequncia de handshaking no SAP-2

1. READY (bit 0, porta 2) vai para o nvel alto.


2. Dar entrada ao dado da porta 1 transferindo-o UCP.
3. O bit ACKNOWLEDGE (bit 7, porta 4) vai para o nvel alto zerando o bit READY.
4. Zerar o bit ACKNOWLEDGE.

Usando a tcnica de handshaking, escreva um programa que d entrada a um byte de dados da


porta 1. Armazene o byte no registrador B.

SOLUO

Se o bit READY estiver baixo, a ANI 01H ir zerar o contedo do acumulador. A JZ S STATUS,
ento, far o programa retroceder a IN 02H. Este lao continuar at que o READY fique e alto
indicando que h dados vlidos na porta 1.
Quando READY estiver alto, o programa passar pela JZ STATUS indo para a IN 01H. Isto far
a transferncia de um byte da porta 1 para o acumulador. A MOV enviar o byte para o registrador B.
A MVI A,80H setar o bit ACKNOWLEDGE (bit 7). A OUT 04H enviar este ACKNOWLEDGE, para
o codificador hexadecimal, onde o hardware interno zerar bit READY. Ento, o bit
ACKNOWLEDGE ser zerado em preparao para o prximo ciclo de entrada de dados.

11-8 RESUMO DO SAP-2

Esta seco resume os estados T, os flags e os modos de endereamento do SAP-2.

Estados T
O controlador-sequencializador do SAP-2 microprogramado com um ciclo varivel de mquina.
Isto significa que algumas instrues sero mais demoradas do que outras para serem executadas.

25
Como voc se lembra, a idia da microprogramao armazenar as rotinas de controle numa ROM
e acess-las na medida do necessrio.
A Tabela 11-3 mostra cada instruo e o nmero de estados T necessrios sua execuo.Por
exemplo, so necessrios quatro estados T para executar a instruo ADD B, sete para executar a
ANI byte, dezoito para executar a CALL e assim por diante. Em aplicaes que envolvem
temporizaes, importante o conhecimento dos estados T.
Observe que a instruo JM precisa de 10/7 estados T para ser executada. Isto indica 10 estados
T quando ocorre efetivamente o salto e apenas 7 quando o salto no chega a se realizar .A mesma
idia se aplica a outros tipos de saltos.

Flags (Bandeiras)

Como voc Sabe, algumas instrues tornam o acumulador negativo ou zero durante a sua
execuo. Isto afeta os flags de sinal e de zero. A Fig. 11.8 mostra os circuito usados no SAP-2 para
setar os flags.
Quando o contedo do acumulador negativo, o seu bit A um 1. Este bit de sinal alimenta a
porta AND inferior. Quando o contedo do acumulador zero, todos os bits so zero e a sada da
porta XOR 1. Esta sada alimenta o AND superior. Quando o sinal de chaveamento LF for alto, os
flags sero atualizados para refletir as condies de zero e de sinal do acumulador. Isto significa que
Zflag ser alto quando o contedo do acumulador for zero e Sflag ser alto quando o contedo do
acumulador for negativo.
Nem todas as instrues alteram os flags. Como se mostra na Tabela 11.3, as instrues que
atualizam os flags so ADD, ANA, ANI, DCR, ORA, ORI, SUB, XRA e XRI. Por que estas instrues
apenas? Porque o sinal LF da Fig.11-8 est alto apenas quando estas instrues so executadas.
Obtm-se isto rnicroprogramando um bit LF para cada instruo. Dito de outra forma, na ROM de
controle ns colocamos um bit alto para LF no caso das instrues citadas e um bit baixo em LF no
caso das demais instrues.

Fig. 11-8 Setando os flags.


Saltos Condicionais

Como foi mencionado anteriormente, as instrues de salto condicional necessitam de 10


estados T quando o salto ocorre efetivamente e apenas sete no caso contrrio. Em poucas palavras
isto conseguido da forma que se explica a seguir. Durante o ciclo de execuo, o computador
levado ao endereo inicial da microrrotina de salto condicional. A microinstruo inicial analisa os
flags e julga se o salto deve ser executado ou no. Em caso afirmativo, a microrrotina prossegue e,
no caso negativo, a microrrotina abortada e o computador comea um novo cicIo de busca.

26
Modos de Endereamento

As instrues do SAP-2 acessam os dados de diversas formas. O operando especifica de que


forma o dado deve ser acessado. Por exemplo, as primeiras instrues discutidas foram

LDA endereo
STA endereo

Estas instrues exemplificam o endereamento direto porque o operando especifica onde o dado
pode ser encontrado.
O endereamento imediato diferente. Ao invs de fornecer o endereo do dado, ns damos o
prprio dado. Por exemplo,
MVI A,byte

acessa o dado que deve ser carregado no acumulador usando o byte que sucede imediatamente o
cdigo de operao na memria, A Tabela 11-3 mostra outras instrues imediatas.
Uma instruo como
MOV A,B

ilustra o uso de endereamento de registrador. Em vez de usar a memria, o dado a ser acessado
armazenado num registrador da UCP. O endereamento de registrador tem a vantagem da rapidez
porque menos estados T so necessrios para este tipo de instruo.
O endereamento implcito significa que a localizao do dado est contida no prprio cdigo de
operao da instruo. Por exemplo,
RAL

nos diz para rotacionar os bits do acumulador para a esquerda. O dado est no acumulador. Por
esta razo, nenhum operando necessrio no endereamento implcito.

TABELA 11-3. CONJUNTO DE INSTRUES DO SAP-2

27
Bytes

Cada instruo ocupa um certo nmero de bytes na memria. No caso do SAP-2, as suas
instrues podem ter 1,2 ou 3 bytes de comprimento. A Tabela 11-3 mostra o comprimento de cada
instruo. Como voc pode observar, as instrues ADD tm 1 byte, as instrues ANI tm 2 bytes,
as CALL tm 3 bytes e assim por diante.

EXEMPLO 11-16

O SAP-2 tem uma freqncia de relgio de 1 MHz. Isto significa que cada estado T dura
1s.Quanto tempo necessrio para se executar a seguinte sub-rotina?

28
SOLUO

A instruo MVI executada uma vez para inicializar a contagem. A DCR executada 70
vezes.A JNZ retrocede 69 vezes e no salta uma vez. Com o nmero de estados T dados pela
Tabela 11-3, pode-se calcular o tempo total de execuo da seguinte forma:

Como voc v, o tempo aproximado de execuo da sub-rotina 1 ms.


Sempre que a rotina acima for chamada, ela produzir um retardo de tempo de 1ms. H muitas
aplicaes onde os retardos de tempo so necessrios.
De acordo com a Tabela 11-3, as instrues da sub-rotina acima tm os seguintes comprimentos
em bytes:

O comprimento total da sub-rotina 8. Como parte do software do SAP-2, a sub-rotina pode ser
montada e relocada nos endereos F010H a F017H. Daqui para frente, a execuo uma CALL
F010H produzir sempre um retardo de tempo de 1ms.

EXEMPLO 11-17

Qual o retardo de tempo produzido pela seguinte sub-rotina do SAP-2?

SOLUO

Esta sub-rotina tem dois laos, um dentro do outro. O lao interno consiste em DCR C e JNZ
LOOP2. Este lao interno produz um retardo de tempo de

29
Quando o contador chega a zero, o programa passa por cima da JNZ LOOP2 (LOOP o LAO em
portugus). O contador B decrementado e a JNZ LOOP1 manda o programa de volta a MVI C,47H.
Assim, pela segunda vez estamos em LOOP2. Como LOOP2 est dentro de LOOP1, LOOP2 ser
executado 10 vezes e o retardo total de tempo ser de 10 ms.
Aqui est o clculo completo do retardo obtido pela sub-rotina:

Esta sub-rotina do SAP-2 tem um comprimento em bytes de

2 + 2 + 1+ 3 + 1+ 3 + 1 = 13

Ela pode ser montada e armazenada nos endereos F020H a F02CH. De agora em diante, sempre
que uma CALL F020H for executada, um retardo de aproximadamente 10 ms ser produzido.
Trocando a sua primeira instruo por

MVI B,64H

O contador B ser inicializado com o decimal 100. Neste caso, o tempo escoado com o lao interno
de aproximadamente 100 ms. Esta sub-rotina de 100 ms poder ser armazenada nos endereos
F030H a F03CH.

EXEMPLO 11-18

Aqui est uma sub-rotina com trs laos encaixados um dentro do outro. Qual o retardo
produzido por ela?

30
SOLUO

O lao LOOP3 ainda leva aproximadamente 1 ms para ser executado. O lao LOOP2 executa
100 passagens pelo lao LOOP3, o que leva aproximadamente 100 ms para ser executado. O lao
LOOP1 executa 10 passagens pelo lao LOOP2. Portanto, leva aproximadamente 1s para que se
execute a sub-rotina inteira.
Que temos ns? Uma sub-rotina de 1s. Ela ser armazenada nos endereos F040H a F052H.
Para conseguir um retardo de 1s, ns usaramos uma CALL F040H.
Alterando a instruo inicial para

MVI A,64H

o lao LOOP1 far 100 passagens pelo lao LOOP2, que, por sua vez, executar 100 passagens
pelo lao LOOP3. A sub-rotina resultante poder ser armazenada em F060H a F072H e produzir
um retardo de 10 s.
A Tabela 11-4 resume os retardos programados em sub-rotina no SAP-2. Com elas poderemos
produzir retardos de 1ms at 10 s.

TABELA 11-4. SUB-ROTINAS DO SAP-2

EXEMPLO 11-19
Um semforo numa estrada mostra o verde durante 50 s, o amarelo durante 6 s e o vermelho
durante 30 s. Os bits 1, 2 e 3 da porta 4 so os sinais de acionamento do equipamento perifrico que
liga as lmpadas do semforo. Escreva um programa que produza os retardos de tempos de 50, 6 e
30s para o semforo.

SOLUO

31
Como as partes amarela, verde e vermelha so iguais, ns analisaremos apenas a parte verde
do programa. Ela comea com uma MVI A,32H, que coloca o decimal 50 no acumulador. A STA
SAVE guardar este valor na posio de memria chamada SAVE. A luz verde . ligada quando a
MVI A,02H executada e seguida de uma OUT 04H, que transfere o bit setado no acumulador para
a porta 4. Como esta porta comanda o semforo, a luz verde acende.
A CALL D1SEC produz um retardo de 1s. A LDA SAVE carrega o acumulado com o decimal 50.
Este valor decrementado para 49 quando a DCR A executada. Este valor guardado de volta na
posio SAVE. Ento a JNZ LOOPGR leva o programa de volta para CALL D1SEC para um novo
retardo de 1 s.
A CALL D1SEC executada 50 vezes mantendo, portanto, a luz verde ligada por 50 s. Ento o
programa passa pela JNZ LOOPGR chegando MVI A,06H. A parte amarela do programa
executada mantendo a luz amarela acesa durante 6 s. Finalmente, a parte vermelha o programa
executada mantendo a luz vermelha acesa durante 30 s. A JMP AGAIN repete todo o processo
novamente. Desta forma, o programa est controlando a temporizao das luzes verde, amarela e
vermelha.

EXEMPLO 11-20

O d mdio do teclado do piano tem uma frequncia de 261,63 Hz. O bit 5 da porta 4
conectado a um amplificador que aciona um alto-falante. Escreva um programa que envia um d
mdio para o alto-falante.

SOLUO

Para comear, o perodo do d mdio

32
1 1
T= = = 3.822 s
f 261,63 Hz
O que faremos enviar um sinal como o da Fig. 11-9 atravs da porta 4. Esta onda quadrada estar
em nvel alto durante 1.911 s, e em nvel baixo durante 1.911 s. O perodo total 3.822 s e a
freqncia 261,63 Hz. Como a onda quadrada e no senoidal, ela soar distorcida mas ser
reconhecida como um d mdio de fato.
Aqui est um programa que envia um d mdio para o alto-falante.

Fig. 11-9 Gerando uma nota d mdio.

A OUT 04H envia um bit (alto ou baixo, no importa) para o alto.falante. A MVI inicializa o contador
com o decimal 134. Ento vem o lao LOOP2, a DCR e a JNZ, que produzem um retardo de
1.866s . Ento o programa passa para a CMA que complementa todos os bits do acumulador. As
duas NOPs acrescentam 8 s ao retardo. A JMP LOOP1 faz o programa voltar ao incio. Quando a
OUT 04H executada, o bit 5 (agora complementado) enviado ao alto-falante, que passa ao
estado oposto. O tempo total para cada ciclo de 3.824 s, o que est ,bem prximo do d mdio.

Aqui est o clculo do tempo total:

Este o tempo de um semiperodo. O ciclo total de 3.824 s

EXEMPLO 11.21

Os dados seriados so chamados algumas vezes de fluxo de dados seriais, porque os bits fluem
um atrs do outro. Na Fig. 11.10, um fluxo de dados seriais est chegando ao bit 7 da porta 2

33
numa velocidade de aproximadamente 600 bits por segundo. Escreva um programa que d
entrada a um caracter de 8 bits a partir de um fluxo de dados seriais e o armazena na posio
2100H.

SOLUO

Como chegam 600 bits por segundo, o perodo de cada um

1
= 1.667 s
600 Hz

A idia receber um bit da porta 2, rotacionar o acumulador para a direita, esperar 1.600 s,
receber o prximo bit, rotacionar o acumulador para a direita e assim por diante at que todos os
bits tenham chegado .
Aqui est um programa que executar a tarefa:

34
Fig. 11-10

A primeira instruo zera o registrador B. A segunda instruo carrega o decimal 7 no contador


C. A IN 02H traz o dado da porta 2. A ANI com a sua mscara isola o bit 7 porque este o bit
SERIAL IN da porta 2. A instruo ORA B no faz nada desta vez porque B est cheio de 0s.A
RAR move os bits do acumulador para a direita. A MOV B,A guarda o contedo do acumulador no
registrador B.
A MVI A,73H inicializa o acumulador com o decimal 115. A seguir tem-se um lao de espera,
DCR A e JNZ BIT verifica se C zero. A seguir, o programa volta para a IN 02H, para obter o
prximo bit do fluxo serial de dados. A ANI com sua mscara isola o bit 7 ,que por sua vez passa
por uma operao lgica OR com o contedo do registrador B. Esta operao combina o bit
anterior com o recm-chegado. Depois de uma nova RAR, os dois bits so armazenados no
registrador B. Ento, vem um novo retardo de 1.600 s.
O programa continua a se repetir dentro do lao e, em cada vez, um novo bit obtido do fluxo
serial de dados. Depois de 7 bits terem sido recebidos, o programa passar pela instruo JNZ BIT
sem efetuar o salto.
As quatro ltimas instrues fazem o seguinte. A IN 02H l o oitavo bit. A ANI isola o bit 7. A
ORA combina este bit com os outros sete presentes no registrador B. Neste momento, todos os
bits recebidos esto no acumulador. A STA 2100H armazena, ento, o byte na posio 2100H.
Um exemplo concreto ajudar. Suponha que o caracter que est sendo recebido seja o W, cujo
cdigo em ASCII igual a 57H. O LSB (bit menos significativo) chega primeiro e o MSB (bit mais
significativo), por ltimo. A seguir, temos os contedos do registrador B depois de cada execuo
da ORA B:

35
A= 1000 0000 (Primeira passagem pelo lao )
A= 1100 0000 (Segunda passagem)
A= 1110 0000 (Terceira passagem)
A= 0111 0000 (Quarta passagem)
A= 1011 1000 (Quinta passagem)
A= 0101 1100 (Sexta passagem)
A= 1010 1110 (Stima passagem)
A= 0101 0111 (Contedo final)

A propsito, o cdigo ASCII necessita de apenas 7 bits;o oitavo bit (A7) poder ser zerado ou
usado como um bit de paridade.

GLOSSRIO

Comentrio: Notas pessoais num programa em linguagem de montagem que no s montadas.


Elas ajudam o programador a se lembrar do que faz o programa numa data posterior.
Endereamento de registrador: Endereamento no qual o dado est armazenado num dos
registradores a UCP.
Endereamento direto: Endereamento no qual a instruo contm o endereo do dado com o
qual se vai operar.
Endereamento imediato: Endereamento no qual o dado com o qual se vai operar o byte que
segue o cdigo de operao na instruo.
Endereamento implcito: Endereamento no qual a posio do dado est contida no
mnemnico.
Flag (bandeira): Um flip-flop que armazena uma condio varivel durante uma execuo de
programa .
Handashaking (aperto de mo ): Interao entre uma UCP e um dispositivo perifrico durante uma
operao de E/S. No SAP-2, ela envolve os sinais READY e ACKNOWLEDGE.
Mscara: Um byte usado numa instruo ANI para descartar certos bits.
Montador : Um programa que converte um programa fonte num programa em linguagem de
mquina.
Montagem manual: Traduo manual de um programa fonte num programa em linguagem de
mquina o invs de se usar um computador .
Relocar: Deslocar um programa de uma parte da memria para outra. Ao se fazer isto, os
endereos das instrues de salto devem ser convertidos para novos endereos.
Rtulo: Nome dado a uma instruo num programa em linguagem de mquina. Para saltar para
esta instruo, voc pode usar o seu nome ao invs do seu endereo. O montador calcular o
endereo correto desta instruo (rtulo) e o usar no programa em linguagem de mquina.
Salto condicional: Um salto que ocorrer somente se certas condies estiverem satisfeitas.
Sub-rotina: Um programa armazenado nos endereos superiores da memria que pode ser usado
diversas vezes como parte de um programa principal.

EXERCICIOS DE FIXAO

Leia ccada um dos itens seguintes e preencha os claros com a palavra correta. As respostas
aparecem comeo da questo seguinte.

1. O controlador-sequencializador produz palavras de ______________ou microinstrues.


2. ( controle) Um flag um ______________ que armazena o valor de uma condio varivel
durante uma execuo de programa. O flag de sinal setado quando o contedo do acumulador
se torna negativo. O flag de ______________ setado quando o contedo do acumulador se torna
zero.

36
3. (flip-flop, zero) Quando se codifica a instruo LDA endereo e a instruo STA endereo o
byte do endereo armazenado num endereo inferior da memria e o byte ______________ num
endereo superior.
4. ( menos significativo, mais significativo) A instruo JMP altera a seqncia do programa
saltando para uma outra parte do programa.Com a instruo JM, o salto ser executado somente
se o flag de sinal estiver ______________. Com a instruo JNZ, o salto executado somente se
o flag de zero estiver ______________ .
5. (setado, zerado) Todas as sub-rotinas devem terminar com uma instruo ______________.
Isto leva o computador instruo que se segue CALL no programa principal .A instruo CALL
incondicional; ela envia o computador para o endereo inicial de uma ______________.
6. (RET, sub-rotina) Um montador lhe permite escrever programas na forma mnemnica.Ento,
o montador converte estes mnemnicos na forma de linguagem de ______________. O montador
ignora os ______________ que se seguem ao ponto e vrgula e atribui endereos aos rtulos. Os
rtulos so constitudos de at seis caracteres onde o primeiro deve ser uma ______________.
7. (mquina, comentrios, letra) A adio repetida uma maneira de se fazer ____________. A
multiplicao programada usada na maioria dos microprocessadores porque as suas ULAS
executam apenas adies e subtraes.
8. (multiplicao) Um parmetro um dado que passado para uma ______________.Quando
se chama uma sub-rotina, deve-se passar ______________ para que ela funcione
adequadamente.
9. (sub-rotina, parmetro) Uma ______________ usada para isolar um bit. Isto acontece
porque a ANI zera todos os outros bits.
10. (mscara) Handshaking uma interao entre uma ______________ e um dispositivo
perifrico. No SAP-2, o bit ______________ indica UCP se o dado de entrada vlido ou no.
Depois que o dado foi transferido para o computador, a UCP enviar um bit ______________ para
o dispositivo perifrico.
11. (UCP, READY, ACKNOWLEDGE) O computador SAP-2 microprogramado com um cicIo
de mquina ______________. Isto significa que algumas instrues demoraro mais do que outras
para serem executadas.
12. (varivel) Os tipos de endereamento vistos at agora so: direto, imediato, registrador e
implcito.

PROBLEMAS

11.1 Escreva um programa fonte que carrega o acumulador com o decimal 100, o
registrador B com o decimal 150 e o registrador C com o decimal 200.
11.2 Monte manualmente o programa fonte da questo anterior a partir do endereo
2000H.
11.3 Escreva um programa que armazena o decimal 50 de memria 4000H o
decimal 51 na 4001H e o decimal 52 na 4002H.
11.4 Monte manualmente o programa do problema anterior a partir da posio
2000H.
11.5 Escreva um programa fonte que adiciona o decimal 68 ao 34. A resposta deve
ser armazenada na posio 5000H.
11.6 Monte manualmente o programa anterior a partir da posio 2000H.
11.7 Aqui est um programa:

Rtulo Mnemnico
LOOP: MVI C,78H
DCR C
JNZ LOOP
HLT

37
a. Quantas vezes (decimal) a DCR C executada?
b. Quantas vezes o programa salta para LOOP?
c. Como pode ser alterado o programa para que o lao seja repetido 210 vezes?

11.8 Quais entre os seguintes so rtulos vlidos?

a. G1OO
h. UPDATE
c.. 5TIMES
d. 678RED
e. T
f. REPEAT

11.9 Escreva um programa que multiplique o decimal 25 com o 7 e armazena a


resposta em 2000H.(Use a sub-rotina de multiplicao localizada em F006H.)
11.10 Escreva um programa que d entrada a um byte atravs da porta 1 e
determina se o decimal equivalente par ou impar . Se o byte for par, o programa
dever enviar um ASCII P para porta 3; se for impar , um ASCII I.
11.11 Modifique o programa anterior para que ele envie a resposta na forma serial
para o bit 0 da porta 4.
11.12 Escreva um programa que d entrada a um byte atravs da porta 1 usando
handshaking. Armazene o byte no endereo 4000H.
11.13 Monte manualmente o programa anterior a partir do endereo 2000H.
11.14 Escreva uma sub-rotina que produza um retardo de 500 s, aproximadamente.
11.15 Monte manualmente o programa anterior a partir do endereo 2000H.
11.16 Escreva uma sub-rotina que produza um retardo de aproximadamente 35 ms
usando uma sub-rotina do SAP-2. Monte manualmente esta sub-rotina e localize-a
no endereo inicial E000H.
11.17 Escreva uma sub-rotina que produza um retardo de 50 ms. (Use uma sub-
rotina do do SAP-2.) Monte manualmente o programa a partir do endereo inicial
E100H.

11.18 Escreva uma sub-rotina que produza um retardo de 1 min. (Use CALL F060H.)
11.19 Monte manualmente a sub-rotina precedente a partir do endereo inicial
F080H.
11.20 O d em uma oitava superior ao d mdio tem uma frequncia de 523,25Hz.
Escreva um programa que envia esta nota ao bit 4 da porta 4.
11.21 Monte manualmente o programa anterior a partir do endereo 2000H.

38