Você está na página 1de 33

CONTEDO DO CAPTULO 12 (SAP- 3)

12.0

Introduo .......................................................................................... 03

12.1

Modelo de Programao.................................................................... 03

12.2

MOV e MVI........................................................................................... 03

12.3

Instrues Aritmticas........................................................................04

12.4

Flag de Transporte, 05
Instrues para o Flag de Transporte, 05
Instrues ADD, 05
Instrues ADC, 06
Instrues SUB, 08
Instrues SBB, 09

Incrementos, Decrementos e Rotaes............................................11

Incremento, 11
Decremento, 11
Rotacionar todos para Esquerda, 12
Rotacionar todos para Direita, 12
Rotacionar para a Esquerda com o Transporte, 13
Rotacionar para a Direita com o Transporte, 13
Multiplicar e Dividir por 2, 13

12.5

Instrues Lgicas..............................................................................14

12.6

Imediatas Aritmticas e Lgicas........................................................15

12.7

Instrues de Salto.............................................................................16

12.8

Instrues de Registrador com Extenso.........................................19

12.9

JP, 16
JC e JNC, 17
JPE e JPO, 17

Carregamento Imediato com Extenso, 19


Instrues DAD, 20
INX e DCX, 20

Instrues Indiretas............................................................................21

Visualizando o Apontador HL, 21


Endereamento Indireto, 22
Leitura Indireta, 22
Escrita Indireta, 23
Instrues Imediato-Indiretas, 24
Outras Instrues com apontador, 24

12.10 Instrues de Pilha.............................................................................26

A Pilha, 26
Apontador de Pilha, 26
Instrues PUSH, 27

Instrues POP, 28
CALL e RET, 29
Chamadas e Retornos Condicionais de Sub-rotinas , 31

Glossrio..........................................................................................................32
Exerccios de Fixao.....................................................................................32
Problemas........................................................................................................33

INTRODUO
SAP-3 um microcomputador de 8 bits que , no sentido ascendente, compatvel com o
microprocessador 8085. Neste captulo, a nfase ser no repertrio de instrues do SAP-3. Alm
das instrues do SAP-2, novas instrues sero acrescentadas.
O Apndice 5 mostra os cdigos de operaes, os estados T, os flags e outras infomaes
relacionadas com o SAP-3. No restante deste captulo, refira-se ao Apndice 5 na medida do
necessrio.
12.1 MODELO DE PROGRAMAO
Tudo o que voc precisa saber sobre o hardware do SAP-3 est no modelo de programao da
Fig. 12-1, que mostra os registradores da UCP necessrios ao programador.
Alguns dos registradores j so conhecidos do SAP-2. Por exemplo, o contador de programa
(PC) um registrador de 16 bits que pode contar de 0000H a FFFFH (0 a 65.535 em decimal). Como
voc sabe, o contador de programa contm o endereo da prxima instruo que dever ser
buscada. Este endereo passado ao REM (Registrador Endereador de Memria).
Os registradores A, B e C da UCP so os mesmos do SAP-2. Eles so usados em operaes
lgicas e aritmticas. Como o acumulador tem a largura de apenas 8 bits, o intervalo dos nmeros
sem sinal de 0 a 255 e o intervalo dos nmeros em complemento de 2 de -128 a + 127.
Para um processamento mais eficiente, o SAP-3 conta ainda com alguns registradores de UCP
adicionais (D, E, H e L). Estes registradores de 8 bits podero ser acessados pelas instrues MOV
e MVI como se fazia com os registradores A, B e C. Observe tambm a presena do registrador F,
que contm os flags S, Z e outros.
Finalmente, ainda h o apontador de pilha (SP do ingls stack pointer), um registrador de 16 bits.
Este registrador controla uma parte da memria chamada de pilha. O registrador apontador de pilha
e a pilha sero discutidos posteriormente.
O modelo de programao de que necessitamos para compreender o conjunto de instrues do
SAP-3 est mostrado na Fig. 12-1 onde se v todos os registradores da UCP. Assim, ns poderemos
analisar as instrues do SAP-3,que ascendentemente compatvel como 8080/8085. No final deste
captulo, voc estar compreendendo quase todas as instrues da 8080/8085.
12-2 MOV E MVI
As instrues MOV e MVI funcionam como no SAP-2. A nica diferena est no maior nmero de
registradores que podemos escolher. O formato de qualquer instruo de movimentao de dados
MOV reg1, reg2
onde reg1 = A,B,C,D,E,H ou L
reg2 = A,B,C,D,E,H ou L

Fig. 12-1 Modelo de programao para o SAP-3.

As instrues MOV enviam os dados do reg2 para o reg1. Simbolicamente,


reg1 reg2
onde a seta indica que o dado do registrador 2 copiado de forma no destrutiva no reg1. No final da
execuo
reg1 = reg2
Por exemplo,
MOV L,A
copia A em L de tal forma que:
L=A
Da mesma forma,
MOV E,H
d
E=H
As movimentaes imediatas tm o formato
MVI reg,byte
onde reg = A, B, C, D, E, H ou L. Assim, a execuo de
MVI D,0EH
resultar em
D = OEH
Da mesma forma,
MVI L,FFH
produz
L= FFH
Qual a vantagem de se dispor de mais registradores? Como voc se recorda, as instrues MOV e
MVI usam menos estados T do que as instrues que fazem referncia memria (IRM). Os
registradores extras na UCP significam que voc pode usar mais instrues MOV e MVI e menos
IRMs. Por isso, os programas do SAP-3 podem rodar mais rapidamente do que os do SAP-2. Alm
disto, a escrita dos programas se torna mais simples por se dispor de mais registradores.
12-3 INSTRUES ARITMTICAS
Como o acumulador tem apenas 8 bits de largura, ele pode representar nmeros, sem sinal, de 0
at 255 e, em complemento de 2, de -128 at + 127. Em qualquer dos casos, o programador precisa
controlar os excessos ou estouros que resultam de somas ou subtraes cujos resultados saem do
intervalo normal do acumulador. aqui que surge o flag de transporte vai-um ou vem-um
dependendo da operao).

Flag de Transporte
Como se mostra na Fig. 6-7, um somador-subtrator de 4 bits produz uma soma S3S2S1S0 e um bit
de transporte. No SAP-1, dois 74LS83 (equivalentes a oito somadores totais) produzem uma soma
de 8 bits e um transporte. Naquele computador simples, o transporte foi desconsiderado. Entretanto,
no SAP-3, o flag de transporte considerado.
A Fig. 12-2a mostra o circuito lgico usado no SAP-3 para realizar somas e subtraes.Quando
SUB est baixo, o circuito soma A com B. Se um transporte final gerado, CARRY fica alto e CY
tambm. Se no h transporte final, CY fica baixo.
Por outro lado, quando SUB est alto, o circuito forma o complemento de 2 de B que, ento,
adicionado a A. Em virtude do XOR final, um CARRY alto que sai do ltimo somador total produz um
CY baixo. Se no ocorrer nenhum transporte, o CY fica alto.
Em resumo

Durante uma operao de adio, CY chamado de vai-um e, durante uma operao de subtrao,
CY chamado de vem-um ou pede-emprestado.
A soma de 8 bits S7S6S5S4S3S2S1S0 armazenada no acumulador da Fig. 12-2b. O transporte
(vai-um ou vem-um} armazenado num flip-flop especial chamado flag de transporte designado CY
na Fig. 12-2b. Este flag funciona como se fosse um bit superior adicinal do acumulador. Isto ,
CY = As
Instrues para o Flag de Transporte
H duas instrues que podemos usar para controlar o flag de transporte. A instruo STC seta o
flag CY se ele j no estiver setado. (STC significa setar transporte, do ingles "set carry"). Assim, se
CY = 0
a execuo de uma STC produz
CY = 1
A outra instruo que controla o transporte a CMC, que significa complementar o transporte, do
ingls "complement the carry.
Quando executada, uma CMC complementa ou inverte o valor de CY. Se CY =1 , ento uma
CMC produz CY = 0. Por outro lado,se CY = 0, ento uma CMC produz CY = 1.
Se voc deseja zerar o flag de transporte e desconhece seu valor atual, deve set-lo e, ento,
complement-lo. Isto , a execuo de
STC
CMC
garante que o valor final de CY ser 0 mesmo que se desconhea o valor inicial de CY.
Instrues ADD
O formato da instruo ADD
ADD reg
onde reg = A, B, C, D, E, H ou L. Esta instruo soma o contedo do registrador designado ao
contedo do registrador acumulador. A soma armazenada no acumulador e o flag de transporte
setado ou zerado dependendo se h um transporte final ou no .

Por exemplo, suponha que


A= 1111 0001 e E= 0000 1000
A instruo
ADD E
produz a soma binria

No h transporte final; portanto, no final do ciclo completo de instruo, teremos


CY = 0 e A= 1111 1001
Como segundo exemplo, suponha que
A= 1111 1111 e L= 0000 0001
Ento, a execuo de ADD L produzir

No final do ciclo de instruo,


CY = 1

A= 0000 0000

Instrues ADC
A instruo ADC (somar com transporte, "carry" em ingls) formatada como:
ADC reg
onde reg = A, B, C, D, E, H ou L. Esta instruo soma os contedos do flag de transporte e do
registrador especificado ao contedo do acumulador. Como o flag CY est includo, a instruo ADC
torna possvel a soma de nmeros sem sinal fora do intervalo de 0 a 255 ou, com sinal, de -128 a
+127.

Fig. 12-2 (a)Somador-subtratordo SAP-3;(b)acumulador e flag de transporte.

A ttulo de exemplo, suponha


A= 1000 0011

E= 0001 0010
e
CY=1
A execuo de ADC
ADCE
produz a seguinte adio:

Logo, os novos contedos sero


CY = 0

A= 1001 0110

Instroes SUB
A instruo SUB formatada como
SUB reg
onde reg = A, B, C, D, E, H ou L. Esta instruo subtrai o contedo do registrador especificado do
contedo do acumulador; o resultado armazenado no acumulador. Se ocorrer um vem-um ou
pede-emprestado final, o flag de transporte CY setado. Se no houver vem- um, o flag CY
zerado. Portanto, durante uma subtrao o flag de transporte CY funciona como um flag de pedeemprestado.
Por exemplo, se
A= 0000 1111

C= 0000 0001

Ento
SUB C
produz

Observe que no h pede-emprestado final. Em termos de adio em complemento de 2,


equivalente subtrao, a operao anterior aparece como:

O CARRY final 1 mas este complementado durante a subtrao para produzir um CY (Fig.
12-2a). Esta a razo pela qual a execuo de SUB C produz.
e

CY = 0 e A= 0000 1110

Aqui est um outro exemplo. Se


e

A= 0000 1100 e C= 0001 0010

ento, uma SUB C produz

Observe o pede-emprestado final. Este transporte ocorre porque o contedo do registrador C


(decimal 18) maior do que o contedo do acumulador (decimal 12). Em termos de aritmtica em
complemento de 2, a operao anterior pode ser vista como

Neste caso, CARR Y 0 e CY 1. Os contedos finais do registrador e do flag CY so


CY = 1 e A= 1111 1010
Instrues SBB
SBB significa subtrair com o pede-emprestado (subtract with borrow ). Esta instruo vai mais
alm do que a SUB. Ela subtrai os contedos de um registrador especificado e do flag CY do
contedo do acumulador. Se
A= 1111 1111
E= 0000 0010
a instruo SBB E comea combinando E e CY para obter 0000 0011 e, ento, subtrai este
resultado parcial do acumulador como:

Os contedos finais so
CY = 0

A= 1111 1100

EXEMPLO 12-1
Na aritmtica dos nmeros sem sinal, 8 bits podem representar 0 a 255, enquanto 16 bits podem
representar 0 a 65.535. Escreva um programa do SAP-3 que adiciona 700 com 900 e coloca a
resposta nos registradores H e L.
SOLUO
Bytes duplos podem representar os decimais 700 e 900 da seguinte forma:
70010 = 02BCH = 0000 0010 1011 11002
90010 = 0384H = 0000 0011 1000 01002
Aqui est um programa para somar 700 com 900:
Rtulo

Instruo

Comentrio

MVI A,00H
MVI B,02H
MVI C,BCH
MVI D ,03H
MVI E,84H
ADD C
ADD E
MOV L,A
MVI A,00H
ADC B
ADD D
MOV H,A
HL T

;Zerar o acumulador
;Carregar o byte superior (BS) de 700
;Carregar o byte inferior (BI) de 700
;Carregar o BS de 900
Carregar o BI de 900
;Somar o BI de 700
;Somar o BI de 900
;Carregar a sorna parcial
;Zerar o acumulador
;Somar o BS de 700 com o transporte
;Somar o BS de 900
;Carregar a soma parcial
;Parar

As primeiras cinco instrues inicializam os registradores A, B, C, D e E. As instrues ADD C e


ADD E somam os bytes inferiores BCH e 84H setando o flag de tranporte porque

A soma est armazenada no registrador L e o bit final de transporte est no flag CY.
A seguir, o acumulador zerado. A ADC B adiciona o byte superior com o flag transporte para se
obter

Ento, a ADD D produz

10

A MOV H,A armazena esta soma superior no registrador H.


Assim, o programa se encerra com a resposta armazenada nos registradores H e I seguinte
forma:
H= 06H = 0000 01102
L= 40H = 0100 00002

A resposta completa 0640H que equivalente ao decimal 1.600.


12-4 INCREMENTOS, DECREMENTOS E ROTAES
Esta seco sobre as instrues de incrementos, decrementos e rotaes. As intrues de
incrementos e decrementos so semelhantes s do SAP-2, mas as de rotaes so diferetes
porque incluem o flag de transporte.
Incremento
A instruo de incremento aparece como
INR reg
onde reg = A, B, C, D, E, H ou L. Ela funciona como foi descrito anteriormente. Portanto, se
L= 0000 1111
a execuo de INR L produz
L= 0001 0000
A instruo INR no tem efeito sobre o flag de transporte, mas, como antes, ela afeta os flags de
sinal e de zero. Por exemplo, se
B = 1111 1111
e se os flags iniciais forem
S=1

Z=0

CY= 0

ento, a INR B produzir


B = 0000 0000
S = 0 Z = 1 CY = 0
Como voc pode ver, o flag de transporte permanece inalterado mesmo que ocorra um excesso ou
estouro no registrador B. Ao mesmo tempo o flag de zero setado e o de sinal zerado.
Decremento
O decremento semelhante. O seu formato
DCR reg
onde reg = A, B, C, D, E, H ou L. Se
E= 0111 0110.

11

ento, uma DCR E produz


E= 0111 0101
A DCR afeta os flags de sinal e de zero mas no altera o flag de transporte. Ento, se
E= 0000 0000
S = 0 Z = 1 CY = 0
A execuo de uma DCR E resulta em
E= 1111 1111
S = 1 Z = 0 CY = 0

Fig. 12-3 (a) RAL ; (b) RAR.

Rotacionar todos Esquerda


A Fig. 12-3a ilustra a instruo RAL que significa rotacionar todos para a esquerda (rotate all left)
e que usada no SAP-3. Nesta instruo, todos os bits incluindo o flag de transporte so
deslocados para a esquerda.
Se os valores iniciais forem
CY = 1

A= 0111 0100

ento, a execuo de uma RAL resultar em


CY = 0

A= 1110 1001

Como voc observa, o CY original vai para a posio do bit menos significativo no acumulador o bit
mais significativo do acumulador vai para o flag CY.
Rotacionar todos Direita
A instruo rotacionar todos para a direita (RAR = rotate all right) significa rotacionar todos os
bits incluindo o flag CY para a direita como se ilustra na Fig. 12-3b. Se
CY = 1

A= 0111 0100

CY = 0

A= 1011 1010

uma RAR resultar em

Desta vez, o CY original vai para a posio mais significativa e o bit menos significativo original
vai para o flag CY.

12

Fig. 12-4 (a) RLC ; (b) RRC.

Rotacionar para a Esquerda com o Transporte


Algumas vezes, voc no quer tratar o flag CY como uma extenso do acumulador. Em outras
palavras, voc no quer rotacionar todos os bits. A Fig. 12-4a ilustra a instruo RLC (rotate left
with carry). Os bits do acumulador so rotacionados esquerda e o bit mais significativo (MSB)
guardado no flag CY. Por exemplo, se
CY = 1

A= 0111 0100

a execuo de uma RLC resulta em


CY = 0 A= 1110 1000
Rotacionar para a Direita com o Transporte
A Fig. 12-4b mostra como a instruo RRC rotaciona os bits. Neste caso os bits do acumulador
so rotacionados para a direita e o bit menos significativo (LSB) guardado no flag CY. Assim, se
CY = 1

A= 0111 0100

CY = 0

A= 0011 1010

uma RRC resulta em

Multiplicar e Dividir por 2


O Exemplo 11-14 mostrou um programa onde a instruo RAR foi usada para converter dados
da forma paralela para a forma serial. A converso paralelo-serial, e vice-versa, um dos principais
usos das instrues de rotao.
H um outro uso para as instrues de rotao. A rotao tem o efeito de uma multiplicao ou
diviso por 2 sobre o contedo do acumulador. Especificadamente, com o flag de transporte
zerado, uma RAL tem o efeito de uma multiplicao por 2, enquanto uma RAR divide por 2. Isto
pode ser provado algebricamente. mas muito mais fcil examinar alguns exemplos especficos
para ver o que acontece.
Suponha
CY = 0

A= 0000 0111

CY = 0

A= 0000 1110

Ento, uma RAL produz

O contedo do acumulador passou do valor decimal 7 para 14. A RAL executou uma multiplicao
por 2.

13

De maneira semelhante. Se
CY = 0

A= 0010 0001

CY = 0

A= 0100 0010

ento, uma RAL resulta em

Neste caso, o acumulador A mudou de 33 para o decimal 66.


As instrues RAR tm o efeito oposto; elas dividem por 2. Se
CY = 0

A= 0001 1000

CY = 0

A= 0000 1100

uma RAR d

O contedo decimal do acumulador mudou de 24 para 12.


Recorde-se da idia bsica. As instrues RAL tm o efeito de multiplicar por 2 as instrues
RAR dividem por 2.
12--5 INSTRUES LGICAS
As instrues lgicas do SAP-3 so quase as mesmas do SAP-2. Por exemplo, trs das
instrues lgicas so
ANA reg
ORA reg
XRA reg
onde reg = A, H, C, D, E, H ou L. Estas instrues iro operar logicamente com o contedo do
registrador especificado e com o contedo do acumulador numa base de bit-a-bit.
A nica instruo nova a CMP formatada como
CMP reg
onde reg = A, H, C, O, E, H ou L. A CMP compara o contedo de um registrador especificado com
o contedo do acumulador. O flag de zero indica o resultado desta comparao da seguinte forma:

Uma CMP executada pelo SAP-3 como se mostra a seguir. O contedo do acumulador
copiado num registrador temporrio. Ento, o contedo do registrador especificado subtrado do
contedo do registrador temporrio. Como a ULA executa a subtrao, o flag de zero afetado. Se
os dois bytes em comparao so iguais, o flag de zero setado. Se os bytes no so iguais, o
flag de zero zerado. Como se usa o registrador temporrio, o contedo do acumulador no
afetado por uma instruo CMP .
Por exemplo, se

A = F8H
D = F8H
Z=0

14

a execuo de CMP D resulta em


A= F8H
D = F8H
Z=1

A CMP no tem efeito nenhum sobre A e D; apenas o flag se altera para indicar que A e D so
iguais. (Se eles fossem diferentes, Z seria 0.)
CMP uma instruo poderosa porque nos permitir comparar o contedo do acumulador com
um dado num registrador especfico. Usando uma CMP juntamente com uma instruo de salto
condicional, poderemos controlar laos de uma nova maneira. Isto ser ilustrado em programas
posteriores.
12-6 IMEDIATAS ARITMTICAS E LGICAS
At agora, ns apresentamos as seguintes instrues aritmticas e lgicas: ADD, ADC, SUB,
SBB, ANA, ORA, XRA e CMP .Nestas instrues o acumulador aparece como um registrador
implcito e o registrador de onde provm dados explicitamente especificado (A, B, C, D, E, H ou
L).
As instrues imediatas do SAP-2 que aparecem tambm no SAP-3 so ANI, ORI e XRI que tm
formatos
ANI byte
ORl byte
XRI byte
onde o byte imediato submetido a uma operao lgica AND, OR ou XOR com o byte do
acumulador .
Alm destas, o SAP-3 tem ainda as seguintes instrues imediatas:
ADI byte
ACI byte
SUl byte
SBI byte
CPI byte
A instruo ADI adiciona o byte imediato ao byte do acumulador. A instruo ACI adiciona o byte
imediato e o flag de CY ao byte do acumulador. A SUl subtrai o byte Imediato do byte do
acumulador. A SBI subtrai o byte imediato e o flag CY do byte do acumulador. A CPI compara o
byte imediato com o byte do acumulador setando o flag de zero se eles forem iguais ou zerando o
flag de zero se eles forem diferentes.
EXEMPLO 12-2
Escreva um programa que subtraia 700 de 900 e armazene a resposta nos registradores H e L.
SOLUO
Ns precisamos de bytes duplos para representar 700 e 900 da seguinte forma:
90010= 0384H = 0000 0011 1000 01002
70010= 02BCH = 0000 0010 1011 11002

15

Aqui esta o programa para subtrair 700 de 900:


Rtulo

Instruo
MOV A,84H
SUI BCH
MOV L,A
MVI A, 03H
SBI 02H
MOV H,A

Comentrio
;Carregar o BI de 900
; Subtrai o BI de 700
; Guardar o BI da resposta
;Carrega o BS de 900
; Subtrai o BS de 700 com o emprestado
;Guardar o BS da resposta

As duas primeiras instrues subtraem os bytes inferiores assim:

Neste ponto
CY = 1

A = C8H

O CY alto indica um pede-emprestado.


Depois de guardar C8H no registrador L, o programa carrega o byte superior de 900 no
acumulador. Devido ao bit de pede-emprestado que ocorreu durante a subtrao dos bytes, usa-se
uma SBI ao invs de SUl. A execuo da SBI d

Esta parte da resposta armazenada no registrador H de forma que os contedos finais so


H= 00H = 0000 00002
L= C8H = 1100 10002
12-7 INSTRUOES DE SALTO
Aqui esto as instrues de salto do SAP-2 que aparecem tambm no SAP-3:
JMP endereo
JM endereo
JZ endereo
JNZ endereo

(Salto incondicional)
(Saltar se menos)
(Saltar se zero)
(Saltar se no zero)

Temos a seguir mais algumas instrues de salto do SAP-3.


JP
JM significa saltar se menos. Quando o programa encontra uma instruo JM e endereo, ele
salta para o endereo especificado se o flag de sinal estiver setado.
A instruo JP tem o efeito oposto. JP significa saltar se positivo (incluindo zero). Isto significa
que

16

JP endereo
produz um salto para o endereo especificado se o flag de sinal estiver zerado.
JC e JNC
A instruo
JC endereo
significa saltar para o endereo especificado se o flag de transporte (carry) estiver setado. Em
poucas palavras, JC significa saltar se transporte ( jump if carry). De forma semelhante,
JNC endereo
significa saltar para o endereo especificado se o flag de transporte (carry) no estiver setado. Isto
, saltar se no transporte (jump if no carry ).
Aqui est um programa que ilustra JC e JNC :
Rtulo
REPEAT:

ESCAPE:

Instruo
MVI A,FEH
ADI 01H
JNC REPEA T
MVI A,C4H
JC ESCAPE
.
.
.
MOVL,A

Comentrio

A MVI carrega o acumulador com FEH. A ADI adiciona 1 para totalizar FFH. Como no houve
transporte, a JNC leva o programa de volta para o ponto REPEA T (repetir) onde uma segunda
ADI executada. Desta vez o acumulador estoura, resultando um contedo de 00H com um bit de
transporte (carry) setado. Como o flag CY est setado, o programa passa pela JNC. O acumulador
carregado com C4H e, ento, a JC produz um salto para o ponto ESCAPE (escapar) onde o C4H
carregado no registrador L.
JPE e JPO
Alm dos flags de sinal, zero e transporte, o SAP-3 tem um flag de paridade chamado P. Durante
a execuo de certas instrues (como ADD, INR etc.) o resultado da ULA vrificado quanto
paridade. Se o resultado tiver um nmero par de 1s, o flag de paridade ser setado; se tiver um
nmero mpar, o flag ser zerado.
A instruo
JPE endereo
produz um salto para o endereo especificado quando o flag de paridade est setado (paridade
par). Por outro lado,

17

JPO endereo
resulta num salto quando o flag de paridade est zerado (paridade mpar). Por exemplo, dados os
seguintes flags,
S = 1 Z =0 CY = 0

P=1

o programa saltaria se encontrasse uma instruo JPE mas no o faria se tratasse de uma
instruo JPO.
A propsito, acabamos de discutir todos os flags do SAP-3. Para uma compatibilidade
ascendente com o microprocessador 8085, estes flags so armazenados no registrador F, como se
mostra na Fig.12-5. Por exemplo, se o contedo do registrador F
F= 0100 0101
ento, ns sabemos que os flags so
S=0
S

Z=1

P=1

CY = 1

CY

Fig. 12.5 O registrador F armazena flags.

EXEMPLO 12-3
Que faz o seguinte segmento de programa?
SOLUO
Rtulo
LOOP:

Instruo
MVI E,00H
INR E
MOV A,E
CPI FFH
JNZ LOOP

Comentrio
;Inicializar contador
;Incrementar contador
;Carregar A com E
;Comparar com 255
;Retomar se no for 255

O registrador E est sendo usado como um contador. Ele comea em 0. Na primeira vez em que
INR e MOV so executadas
A= 01H
Depois da execuo da CPI, o flag de zero 0 porque 01H e FFH no so iguais. A JNZ fora,
ento, o programa a voltar ao ponto LOOP (lao).
O lao continua at que a INR e a MOV tenham sido executadas 255 vezes, quando, ento,
A= FFH
Desta vez, a CPI seta o flag de zero porque os bytes do acumulador e o imediato so iguais. Com
o flag de zero setado, o programa passa pela instruo JNZ.
Voc percebe o ponto que estamos discutindo? O computador executar o lao 255 vezes antes
que ele passe pela JNZ. Um uso para este segmento de programa gerar um retardo de tempo.
Um outro uso inserir instrues adicionais dentro do lao, como a seguir:

18

Rtulo

Instruo
MVI E,00H
.
.
.
INR E
MOV A,E
CPI FFH
JNZ LOOP

LOOP:

Comentrio

As instrues do incio do lao (simbolizadas por pontos) sero executadas 255 vezes. Se voc
desejar alterar o nmero de repeties do lao, modifique a instruo CPI de modo adequado.
12-8 INSTRUES DE REGISTRADOR COM EXTENSO
Algumas instrues do SAP-3 usam pares de registradores da UCP para processar dados de 16
bits. Em outras palavras, durante a execuo de certas instrues, a UCP tem seus registradores
encadeados aos pares como se mostra na Fig. 12-6. Esta encadeamento sempre feito como se
mostra: B com C, D com E, e H com L. A seguir, veremos as instrues do SAP-3 que usam pares
de registradores. Nestas instrues, voc notar a letra X, que significa registrador com extenso,
um lembrete de que pares de registradores esto envolvidos.
B

Fig. 12-6 Pares de registradores.

Carregar Imediato com Extenso


Como h trs pares de registradores (BC, DE e HL), a instruo LXI (Load extended immediate)
pode aparecer como
LXI B, duplo
LXI D, duplo
LXI H, duplo
onde B significa BC
D significa DE
H significa H L
duplo significa duplo byte.
A instruo LXI manda carregar o par especificado de registradores com o duplo byte. Por
exemplo, se executamos
LXI B,90FFH
os registradores B e C so carregados com os bytes superior e inferior para se obter

19

B = 90H
C= FFH
Enxergando B e C encadeados como na Fig. 12-6, podemos escrever
BC = 90FFH
Instrues DAD
DAD significa dupla-adio. Esta instruo tem as formas:
DAD B
DAD D
DAD C
Onde B significa BC
D significa DE
H significa H L
A instruo DAD adiciona o contedo do par especificado de registradores ao contedo do par HL
de registradores depositando o resultado no par HL de registradores. Por exemplo, se
BC = F521H
HL = 0003H
a execuo de uma DAD B produz
HL = F524H
Como voc v, F521H e 0003H so adicionados para dar F524H, que depositado no par HL de
registradores.
A instruo DAD afeta o flag de transporte CY (carry). Se h um transporte do par HL de
registradores, o flag CY setado; se no, ele zerado. Por exemplo, se
DE = 0001H
HL = FFFFH
uma DAD D dar
HL = 0000H
CY = 1
A propsito, uma DAD H tem o efeito de produzir uma adio do contedo de HL a ele mesmo. Em
outras palavras, uma DAD H duplica o valor de HL. Se
HL = 1234H
uma DAD H dar
HL = 2468H
INX e DCX
INX significa incrementar o registrador com extenso e DCX significa decrementar o registrador
com extenso. As instrues de incremento so

20

INXB
INXD
INXH
onde B significa BC
D significa DE
H significa HL
As instrues DCX tm um formato similar: DCX 8, DCX D e DCX H.
As instrues INX e DCX no tm efeito nenhum sobre os flags. Por exemplo, se
BC = FFFFH
S=1
Z=0
P=1
CY = 0
a execuo de uma INX B resulta em
BC = 0000H
S=1
Z=0
P=1
CY = 0
Observe que todos os flags permanecem inalterados.
Em resumo, as instrues de registrador com extenso so: LXI, DAD, INX e DCX . Dos trs
pares de registradores, o par HL especial, conforme veremos na prxima seco.
12--9 INSTRUES INDIRETAS
Como foi discutido no Captulo 10, o contador de programa um apontador de instruo, porque
ele aponta a posio de memria onde a prxima instruo est armazenada.
O par HL de registradores diferente; ele aponta as posies de memria onde os dados esto
armazenados. Em outras palavras, o SAP-3 tem diversas instrues onde o par HL atua como um
apontador de dados. As discusses seguintes iro explicar melhor a idia.
Visualizando o Apontador HL
A Fig. 12.7a mostra uma memria de 64K que tem 65.636 registradores ou posies de memria
onde os dados so armazenados. A primeira posio de memria M0000H, a seguinte M0001H e
assim por diante. A posio de memria com endereo HL MHL.

21

Fig. 12-7 (a) Apontador HL; (b) Apontador para 2050H.

Com algumas instrues do SAP-3, o par de registradores HL usado como endereo de dado
da memria. Isto , o contedo do par HL de registradores enviado para o registrador de
endereo de memria (REM) e, ento, uma leitura ou escrita de memria executada. como se
o par HL de registradores estivesse apontando para a posio desejada de memria como se
mostra na Fig.12.7a.
Por exemplo, suponha que
HL = 2050H
Se H L estiver atuando como apontador, o seu contedo (2050H) ser enviado para o REM
durante um estado T. Durante o prximo estado T, a posio de memria cujo endereo 2050H
sofrer uma leitura ou escrita. Como se mostra na Fig. 12.7 b , o par HL de registradores aponta
para a posio desejada de memria.
Endereamento Indireto
Com endereamento direto como em LDA 5000H e STA 6000H, o programador conhece o
endereo da posio de memria porque a prpria instruo d diretamente o endereo, Com
instrues que usam o apontador HL, entretanto, o programador desconhece o endereo; tudo o
que ele sabe que o endereo est armazenado no par HL de registradores. Sempre que uma
instruo usa o apontador HL, o seu modo de endereamento chamado de endereamento
indireto.
Leitura Indireta
Uma das instrues indiretas M
MOV reg,M
onde reg = A,B,C,D,E,H ou L
M = MHL
Esta instruo manda carregar o registrador especificado com o contedo da posio e memria
endereada por HL. Depois da execuo desta instruo, o registrador especificado conter MHL.

22

Por exemplo, se
HL = 3000H

a execuo de

M3000H = 87H

MOV C,M
produz
C= 87H
A Fig. 12.8a mostra como visualizar a MOV C,M. O apontador HL aponta para 87H que o dado a
ser lido da memria e posto em C.
Como outro exemplo, se
HL = 9850H

M9850H = CEH

uma MOV A,M resulta em


A= CEH
A Fig. 12.8b ilustra a MOV A,M. O apontador HL aponta para CEH que o dado a ser depositado
no registrador A.
Escrita Indireta
Aqui est uma outra instruo MOV indireta:
MOV M,reg
onde M = MHL
reg = A, B, C, D, E, H ou L
Esta instruo manda carregar a posio de memria endereada por HL com o contedo do
registrador especificado. Depois da execuo desta instruo,
MHL = reg
Como exemplo, se
HL = E300H
B = F2H
a execuo de uma MOV M, B produz
ME300H = F2H

23

Fig. 12-8 Exemplos de endereamento indireto.

Instrues imediato-indiretas
Algumas vezes desejamos escrever dados imediatos na posio de memria endereada pelo
apontador HL. A instruo a ser usada neste caso
MVI M,byte
Aqui est um exemplo. Se HL = 3000H, a execuo de uma
MVI M,87H
Produz
M3000H = 87H
Outras Instrues com Apontador
Aqui esto mais algumas instrues que usam o apontador HL:
ADD M
ADC M
SUB M
SBB M
INR M
DCR M
ANA M
ORA M
XRA M
CMP M

24

Em cada uma delas, M a posio de memria endereada por HL. Pense como se M fosse um
outro registrador onde o dado est armazenado. Cada uma das instrues acima opera sobre este
dado como foi descrito antenriomente.
EXEMPLOl2-4
Suponha que 256 bytes de dados esto armazenados na memria entre as posies 2000H e
20FFH. Escreva um programa que copia estes 256 bytes nos endereos 3000H e 30FFH.
SOLUO
Rtulo
LOOP:

Instruo
LXI H, 1FFFH
INX H
MOV B,M
MOV A,H
ADI 10H
MOV H,A
MOV M,B
SUI 10H
MOV H,A
MOV A,L
CPI FFH
JNZ LOOP
HLT

Comentrio
;Inicializar apontador
;Incrementar apontador
;Ler um byte
;Carregar 20H no acumulador
; Adicionar a diferena para obter 30H
;Restaura H para prxima leitura
;Escrever o byte na nova posio
;Subtrair diferena
;Restaurar H para a prxima leitura
;Preparar a comparao
;Testar se 255
;Se no, obter prximo byte
;Parar

Este programa em lao transfere cada byte sucessivo da rea 2000H-20FFH da memria para a
rea 3000H-30FFH. Aqui esto os detalhes.
A LXI inicializa o apontador com o endereo 1FFFH. Na primeira vez que o lao executado, a
INX incrementar o apontador HL para 2000H. Ento, a MOV B,M l o primeiro byte transferindo-o
para o registrador B. As trs instrues seguintes
MOV A,H
ADI 1OH
MOV H,A
fazem o apontador sofrer um incremento para 3000H. Ento, a MOV M,B escreve o primeiro byte
na posio 3000H. As duas instrues seguintes, SUl e MOV, restauram o valor do apontador HL
com 2000H. A MOV A,L coloca 00H no acumulador. Como a CPI FFH zera o flag de zero, a JNZ
faz o programa voltar ao ponto de entrada no LOOP (lao ).
Na segunda vez, o computador ler o byte em 2001H e armazenar este byte em 3001H. O lao
continuar com bytes sucessivos sendo movidos de 2001H-20FFH para 3000H-30FFH. Como o
primeiro byte lido de 2000H, o byte 256 ser lido de 20FFH. Depois deste byte ter sido
armazenado em 30FFH, o apontador ser atualizado com o valor 20FFH. A MOV A,L ento
carrega o acumulador com
A= FFH
Desta vez, a CPI FFH ir setar o flag de zero e, portanto, o programa passar pela JNZ chegando
HLT.

25

12-10 INSTRUES DE PILHA


O SAP-2 tem uma instruo CALL (chamar sub-rotina) que envia o programa para uma subrotina. Como voc se lembra, antes que o salto ocorra, o contador de programa incrementado e o
seu endereo guardado nos endereos FFFEH e FFFFH. Estes endereos so especialmente
reservados para guardar o endereo de retorno. No final de uma sub-rotina, a instruo RET
carrega o contador de programa com o endereo de retorno que permite ao computador voltar para
o programa principal.
A Pilha
Uma pilha uma poro da memria reservada primariamente para guardar endereos de
retorno. O SAP-2 tem uma pequena pilha porque os endereos FFFEH e FFFFH so usados
exclusivamente para guardar um endereo de retomo de sub-rotina. A Fig. 12-9a mostra como
visualizar a pilha do SAP-2.
O SAP-3 diferente. Para comear, o programador decide onde colocar a pilha dentro da
memria e de que tamanho ela deve ser. A ttulo de exemplo, a Fig. 12-9b mostra uma pilha entre
os endereos 20E0H e 20FFH. Esta pilha contm 32 posies de memria para guardar endereos
de retomo. Os programadores podem colocar a pilha em qualquer lugar na memria, mas, no
momento em que eles especificam uma pilha, eles no podem mais usar aquela poro de
memria para programas e dados. Ao contrrio, a pilha torna-se um espao especial na memria
usado para armazenar os endereos de retorno das sub-rotinas chamadas.
Apontador de Pilha
As instrues que usam a pilha so chamadas instrues de pilha como PUSH, POP, CALL e
outras a serem discutidas. As instrues de pilha usam endereamento indireto porque um
registrador de 16 bits chamado de apontador de pilha (SP de stack pointer") contm o endereo
da posio desejada de memria. Como se mostra na Fig. 12-9c, o apontador de pilha
semelhante ao apontador HL, porque o contedo do apontador de pilha indica que posio de
memria deve ser acessada. Por exemplo, se
SP = 20FFH
o apontador de pilha indica a posio de memria M20FFH (ver Fig. 12-9d). Dependendo da
instruo, um byte lido ou escrito nesta posico de memria.

Fig. 12-9 (a) A pilha do SAP-2;(b) exemplo de uma pilha; (c) apontador de pilha endereando a pilha; (d) SP aponta para
20FFH.

26

Para inicializar o apontador de pilha, usamos a instruo de carga imediata


LXI SP ,duplo
Por exemplo, se executarmos
LXI SP ,20FFH
O apontador de pilha ser carregado com 20FFH.
Instrues PUSH
Os contedos reunidos do acumulador e do registrador de flags so conhecidos como palavra de
status de programa (PSW de programa status word). O seu formato
PSW = AF
onde A = contedo do acumulador
F = contedo do registrador de flags
O contedo do acumulador corresponde ao byte superior e o contedo do registrador de flags
corresponde ao byte inferior da PSW. Quando se chama uma sub-rotina, usualmente guardamos a
palavra de status de programa para que o programa principal possa reassumir de forma correta
depois que a sub-rotina estiver executada. Ns talvez tenhamos de guardar os contedos dos
demais registradores.
As instrues PUSH (empilhar) nos permitem guardar dados numa pilha. Aqui esto as quatro
instrues PUSH:
PUSH B
PUSH D
PUSH H
PUSH PSW
onde B significa BC
D significa DE
H significa HL
PSW significa palavra de status de programa
Quando uma instruo PUSH executada, as seguintes coisas acontecem:
1. O apontador de pilha decrementado para SP - 1 .
2. O byte superior do par de registradores especificado guardado em MSP -1 .
3. O apontador de pilha novamente decrementado para SP -2.
4. O byte inferior do pai de registradores especificado guardado em MSP -2.
Aqui est um exemplo. Suponha que
BC = 5612H
SP = 2100H
Quando uma PUSH executada,
1. O apontador de pilha decrementado para 20FFH.
2. O byte superior 56H guardado em 20FFH (Fig. 12-10a).
3. O apontador de pilha novamente decrementado indo para 20FEH.
4. O byte inferior 12H guardado em 20FEH(Fig.12-10b).

27

Fig. 12-10 Operao de empilhar;(a) primeiro,o byte superior ;(b) a seguir, o byte inferior ;(c) 6 bytes empilhados na pilha
;(d) desempilhando um byte da pilha; (e) Incrementando o apontador de pilha.

Aqui est mais um exemplo. Suponha que


SP = 2100H
AF = 1234H
DE = 5678H
HL = 9A25H
ento, a execuo de
PUSH PSW
PUSH D
PUSH H
carrega a pilha como se mostra na Fig. 12.10c. A primeira PUSH armazena 12H em 20FFH e 34H
em 20FEH. A prxima PUSH armazena 56H em 20FDH e 78H em 20FCH. A ltima PUSH
armazena 9AH em 20FBH e 25H em 20FAH. Observe como a pilha trabalhada. Cada nova
PUSH lana dados na pilha.

Instroes POP
Aqui esto quatro instrues pop (desempilhar)
POPB

28

POPD
POPH
POP PSW
onde B significa BC
D significa DE
H significa HL
PSW significa palavra de status de programa.
Quando uma POP (desempilhar) executada, acontece o seguinte:
1. O byte inferior lido da posio de memria endereada pelo apontador de pilha. Este byte
armazenado na parte inferior do par especificado de registradores.
2. O apontador de pilha incrementado.
3. O byte superior lido e armazenado na parte superior do par especificado de registradores.
4. O apontador de pilha incrementado.
Aqui est um exemplo. Suponha que a pilha esteja carregada como na Fig. 12-10c com o
apontador de pilha 20FAH. Ento, a execuo de uma POP B faz o seguinte:
1. O byte 25H lido de 20FAH (Fig. 12-10c) e armazenado no registrador C.
2. O apontador de pilha incrementado para 20FBH. O byte 9AH lido de 20FBH (Fig. 12-10d) e
armazenado no registrador B. O par BC de registradores contm agora
BC = 9A25H
3. O apontador de pilha incrementado para 20FCH (Fig. 12-10e).
Cada vez que executamos uma POP, 2 bytes so desempilhados. Se executssemos uma POP
PSW e uma POP H na Fig. 12-10e, o contedo final de cada registrador seria
AF = 5678H
H L = 1234H
e o apontador de pilha conteria
SP = 2100H

CALL e RET
A finalidade principal da pilha do SAP-3 guardar endereos de retomo quando se usa CALLs
Quando uma
CALL endereo
executada, o contedo do contador de programa empilhado. Ento, o endereo inicial da subrotina colocado no contador de programa. Desta forma, a prxima instruo buscada a primeira
instruo da sub.rotina. Quando a sub-rotina termina, uma instruo RET desempilha o endereo
de retomo colocando-o no contador de programa.
Aqui est um exemplo:

29

Endereo
2000H
2001H
2002H
2003H
2004H
2005H
2006H
.
.
.
20FFH
.
.
.
8050H
.
.
8059H

Instruo
LXI SP,2100H
CALL 8050H
MVI A,0EH
.
.
.
HLT

.
.
.
RET

Para comear, quando montadas, as instrues LXI e CALL ocupam 3 bytes cada uma: um byte
para o cdigo de operao e 2 para os dados. Assim sendo, a LXI ocupa as posies 2000H a
2002H e a CALL ocupa as posies 2003H a 2005H.
A LXI carrega o apontador de pilha com 2100H. Durante a execuo de CALL 8050H, o
endereo da prxima instruo (2006H) guardado na pilha da forma usual; o apontador de pilha
decrementado e o byte superior 20H armazenado; a seguir, o apontador de pilha
decrementado novamente e o byte inferior 06H armazenado (ver Figo 12-11a). Ento, o contador
de programa carregado com 8050H, que o endereo inicial da sub-rotina.
Quando a sub-rotina estiver terminada, a instruo RET levar o computador de volta ao
programa principal. Em primeiro lugar, o byte inferior desempilhado e posto na poro inferior do
contador de programa; ento, o byte superior desempilhado e posto na poro superior do
contador de programa. Depois do segundo incremento, o apontador de pilha est novamente com
valor 2100H, como se mostra na Fig. 12-11b.

Fig. 12-11 (a) Guardando um endereo de retorno durante uma chamada de sub-rotina; (b) desempilhando o endereo de
retorno durante uma RET .

30

Durante a execuo das instrues CALL e RET, a operao com a pilha automaticamente
realizada pelo computador. Tudo o que precisamos fazer inicializar o apontador e pilha usando
especialmente a instruo LXI SP ,duplo. Ela ajusta limite superior da pilha. Ento, uma instruo
CALL automaticamente empilhar o endereo de retorno e uma RET o desempilhar.
Chamadas e Retornos Condicionais de Sub-rotinas
Aqui est uma lista das chamadas condicionais de sub-rotinas do SAP-3:
CNZ endereo
CZ endereo
CNC endereo
CC endereo
CPO endereo
CPE endereo
CP endereo
CM endereo
Elas so semelhantes aos saltos condicionais discutidos anteriormente. A CNZ saltar uma subrotina apenas se o flag de zero estiver zerado, a CZ saltar apenas se o flag de zero estiver
setado, a CNC saltar apenas se o flag de transporte estiver zerado e assim por diante.
O retomo de uma sub-rotina tambm pode ser condicional. Aqui est uma a dos retornos
condicionais
RNZ
RZ
RNC
RC
RPO
RPE
RP
RM
A RNZ ir retomar apenas se o flag de zero estiver zerado, a RZ retomar apenas o flag de zero
estiver setado, a RNC retomar apenas se o flag de transporte estiver zerado assim por diante.
EXEMPLO 12-5
O SAP-3 tem a mesma frequencia de 1MHz do SAP-2. Escreva um programa que era um retardo
de tempo de 80 ms aproximadamente.
SOLUO
Rtulo
LOOP:

Mnemnico
LXI SP,E000H
MVI E,08H
CALL F020H
DCR E
JNZ LOOP
HLT

Comentrio
;lnicializar o apontador de pilha
;lnicializar o contador
;Retardo de 10 ms
;Decrementar
;Testar se j se deram 8 passagens

Quase sempre se usa sub-rotinas em programas de porte. Isto significa que se usa pilha para
guardar os endereos de retorno. Por esta razo, uma das primeiras instrues de qualquer
programa uma LXI SP usada para inicializar o apontador de pilha.

31

O programa para o retardo de 80 ms comea com uma instruo LXI SP,E000H .Isto significa
que a pilha cresce a partir do endereo DFFFH em direo aos endereos inferiores da memria.
Em outras palavras, o apontador de pilha decrementado antes da primeira operao de empilhar
significando, portanto, que a pilha comea em DFFFH.
O restante do programa trivial. O registrador E usado como contador. O programa chama 8
vezes a sub-rotina de 10 ms de retardo. Portanto, o retardo total de tempo 80ms
aproximadamente.

GLOSSRIO
Apontador de dados: Outro nome dado ao par HL de registradores quando algumas instrues
usam para enderear a memria.
Apontador de pilha (SP): Um registrador de 16 bits que enderea a pilha. Antes de se chamar
qualquer sub-rotina, o apontador de pilha deve ser inicializado por uma instruo LXI.
Desempilhar (POP): Ler dados da pilha.
Empilhar (PUSH): Guardar dados na pilha.
Endereamento indireto: Forma de endereamento onde o endereo do dado est contido no par
de registradores HL.
Excesso ou estouro: Uma condio que indica que uma soma ou diferena caiu fora do intervalo
normal de trabalho do acumulador.
Pilha: Uma poro da memria reservada para dados e endereos de retomo.
Registrador com extenso: Um par de registradores de UCP que, em algumas instrues, atua
como um registrador de 16 bits.

EXERCClOS DE FIXAO
Leia cada um dos itens seguintes e preencha os claros com a palavra correta. As resposta
aparecem no comeo da questo seguinte.
1. Uma condio de ______________ ocorre com uma soma ou diferena que cai fora do
intervalo normal de trabalho do acumulador. Uma maneira de detectar um estouro ou
excesso com o flag de ______________ .
2. (excesso ou estouro, transporte) Para zerar o flag CY de transporte, voc pode usar
uma ______________ seguida por uma CMC. STC significa o flag de
______________ transporte.
3. (STC, setar) A instruo ADC adiciona o flag de ______________ e o contedo do
registrador especificado ao contedo do ______________. SBB significa subtrair com
______________.
4. (transporte, acumulador, pede-emprestado) A RAL rotaciona todos os bits para a
______________ com o CY indo para a posio de bit menos significativo (LSB). A
RRC rotaciona os bits do acumulador para a direita com o bit menos significativo indo
para o flag CY de transporte.
5. (esquerda) A instruo CMP compara o contedo do registrador especificado com o
contedo do acumulador. Se os dois forem iguais, o flag de zero ser
______________.
A CPI compara um byte imediato com o contedo do
______________ .
6. (setado, acumulador) JM significa saltar se______________. O programa saltar para
um novo endereo se o flag de ______________ estiver setado. JNZ significa saltar se
diferente de zero.Com esta instruo, o programa salta apenas se o flag de
______________ estiver zerado.
7. (menos, sinal, zero) A instruo LXI usada para carregar pares de registradores. B
faz par com C, D com E e H com ______________. Com algumas instrues, o par HL

32

de registradores funciona como um apontador de ______________. Este tipo de


endereamento chamado ______________.
8. (L, dados, indireto) A pilha uma poro da memria reservada primariamente para
guardar endereos de retorno de sub-rotinas. O apontador de pilha um registrador de
16 bits que enderea a pilha. Antes de se chamar uma sub-rotina qualquer, deve-se
inicializar o apontador de pilha.
PROBLEMAS
12.1
Escreva um programa que soma os decimais 345 com 753. (Usar bytes
imediatos para os dados.)
12.2
Escreva um programa que subtrai o decimal 456 de 983. (Usar dados
imediatos.)
12.3
Suponha que 1.024 bytes de dados esto armazenados entre 5000H e 53FFH.
Escrever um programa que copia estes dados nos endereos 9000H a 93FFH.
12.4
Escrever um programa que gera um retardo de tempo de 35 ms. Se voc usar
as sub-rotinas do SAP-2 dadas no Captulo 11, voc deve comear o seu
programa com LXI SP,E000H.
12.5
Escrever um programa que envia 1, 2, 3, ..., 255 para a porta 22 com um
intervalo de 1 ms entre as instrues OUT 22. (Usar uma LXI SP,E000H e uma
CALL F010H.)
12.6
Bytes esto chegando porta 21 numa taxa de aproximadamente 1 por
milissegundo. Escrever um programa que d entrada a 256 bytes e os armazena
nos endereos 8000H a 80FFH. (Usar CALL F010H.)
12.7
Suponha que 512 bytes de dados estejam armazenados de 6000H a 61FFH.
Escrever um programa que d sada a estes bytes atravs da porta 22H numa taxa
de aproximadamente 100 bits por segundo. (Usar CALL F020H.)
12.8
Um dispositivo perifrico est enviando dados seriais atravs do bit 7 da porta
21H numa velocidade de 1.000 bits por segundo. Escrever um programa que
converte quaisquer 8 bits do fluxo serial de bits para uma palavra de 8 bits
paralelos. Esta palavra , ento, enviada para a porta 22H. (Usar CALL F010H.)
12.9
Suponha que 256 bits esto armazenados nos endereos 5000H a 50FFH.
Escrever um programa que converte cada um destes bytes num fluxo serial de
dados que enviado atravs do bit 0 da porta 22H. D sada aos dados numa
velocidade de aproximadamente 1.000 bits por segundo. (Usar CALL F010H.)

33

Você também pode gostar