Você está na página 1de 7

UFPA / ITEC / FEEB

MICROPROCESSADORES
Professor: Daniel Cardoso

Lista de exercícios sobre SAP-2 e SAP-3

1. Escreva um programa em linguagem de montagem que carrega o acumulador com o


decimal 100, o registrador B com o decimal 150 e o registrador C com o decimal 200.
Monte manualmente esse programa a partir do endereço 2000H.

2. Escreva um programa em linguagem de montagem que armazena o decimal 50 na


posição de memória 4000H, o decimal 51 na 4001H e o decimal 52 na 4002H. Monte
manualmente esse programa a partir do endereço 2000H de memória.

3. Escreva um programa-fonte que adiciona o decimal 68 ao 34, e armazena o resultado


no endereço 5000H. Monte manualmente esse programa a partir da posição 2000H de
memória.

4. Dado o programa:

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

a) Quantas vezes (em decimal) a instrução DCR C é executada?


b) Quantas vezes o programa salta para LOOP?
c) Como pode ser alterado o programa para que o laço seja repetido 210 10 vezes?

5. Escreva um programa em assembly que multiplica o decimal 25 com o 9 e armazena o


resultado em 2000H. Use uma sub-rotina de multiplicação.

6. Analise o programa-fonte a seguir e explique o seu funcionamento.

Rótulo Instrução
IN 01H
ANI 01H
JNZ IMPAR
MVI A,50H
JMP SERIAL
IMPAR: MVI A,49H
SERIAL: MVI C,08H
REPETE: OUT 04H
RAR
DCR C
JNZ REPETE
HLT

1
7. Escreva um programa que soma os decimais 345 e 753, e coloca o resultado no par HL
de registradores. Comparar a solução usando registradores com outra usando bytes
imediatos para os dados.

8. Analise o programa-fonte a seguir e explique o seu funcionamento.

MVI A,00H
MVI B,29H
MVI C,90H
MVI D,BCH
MVI E,42H
MOV A,E
SUB C
MOV L,A
MOV A,D
SBB B
MOV H,A
HLT

9. Suponha que 1 KByte de dados estão armazenados nas posições de memória entre
4000H e 43FFH. Escreva um programa que copia esses dados para a faixa de endereços
entre B000H e B3FFH.

10. Explique em que consiste a técnica de handshaking para interfaceamento de uma


UCP com periféricos.

11. Quais as vantagens da disponibilidade de um maior número de registradores em uma


UCP?

12. Cite duas instruções de desvio condicional do assembly Intel e explique como
funcionam.

13. Sendo (DE) = 4D37H e (SP) = FFF0H, explique passo a passo o que faz a instrução
PUSH D, e mostre como fica a memória após a sua execução.

14. Sendo (A) = 0DH e (E) = 18H, qual o valor contido no acumulador após a execução da
instrução SUB E? Qual o valor do flag CY nesse momento?

15. Analise o programa abaixo e explique detalhadamente o seu funcionamento. Qual o


efeito da execução deste programa?

Rótulo Instrução
LXI H,6000H
LOOP: MOV B,M
MOV A,H
ADI 50H
MOV H,A
MOV M,B
SUI 50H
MOV H,A
INX H
MOV A,H
CPI 64H

2
JNZ LOOP
HLT

16. Quais as vantagens das instruções que usam endereçamento por registrador sobre as
instruções de endereçamento direto?

17. Explique como são realizadas a chamada e o retorno de uma sub-rotina (por meio
das instruções CALL e RET), em um programa em linguagem de montagem.

18. Sendo (A) = C7H, (F) = 34H e (SP) = FFF0H, explique passo a passo o que faz a
instrução PUSH PSW, e mostre como fica a memória após a sua execução.

19. O que é a área de pilha na memória de um microcomputador, e quais as suas


finalidades? Como ela é acessada?

20. Analise o programa abaixo e explique detalhadamente o seu funcionamento. Qual o


efeito da execução deste programa?
MVI A,00H
MVI B,02H
MVI C,BCH
MVI D,01H
MVI E,F4H
ADD C
SUB E
MOV L,A
MOV A,B
SBB D
MOV H,A
HLT

Respostas
1.
Endereço Conteúdo
MVI A,64H 2000H 3EH
MVI B,96H 2001H 64H
MVI C,C8H 2002H 06H
HLT 2003H 96H
2004H 0EH
2005H C8H
2006H 76H

2. Endereço Conteúdo
2000H 3EH
2001H 32H
MVI A,32H 2002H 32H

3
STA 4000H 2003H 00H
INR A 2004H 40H
STA 4001H 2005H 3CH
INR A 2006H 32H
STA 4002H 2007H 01H
HLT 2008H 40H
2009H 3CH
200AH 32H
200BH 02H
200CH 40H
200DH 76H

3. Endereço Conteúdo
2000H 3EH
2001H 44H
MVI A,44H 2002H 06H
MVI B,22H 2003H 22H
ADD B 2004H 80H
STA 5000H 2005H 32H
HLT 2006H 00H
2007H 50H
2008H 76H

4. a) 120 b) 119 c) Trocando a primeira instrução por MVI C,D2H

5.
MVI A,00H
MVI B,19H MULT: ADD B
MVI C,09H DCR C
CALL MULT JNZ MULT
STA 2000H RET
HLT

6. Este é um programa para a arquitetura do SAP-2 que recebe um byte pela porta 1 e
determina se o número decimal equivalente é par ou ímpar. Para isso, ele isola o bit A0
do acumulador por meio de uma operação AND com 01H. Se A0 = 1, então o byte é
ímpar, e o programa envia um ‘I’ (ASCII 49H) pela saída serial. Se A0 = 0, então o byte é
par, e o programa envia um ‘P’ (ASCII 50H) para a saída serial.

O envio do conteúdo do acumulador pela porta serial (LSB primeiro) é feito com as
instruções OUT 04H e RAR, em um laço executado 8 vezes.

7. Solução com endr. por registrador Solução com endr. imediato


MVI A,00H MVI A,59H
MVI B,01H ADI F1H
MVI C,59H MOV L,A
MVI D,02H MVI A,01H
MVI E,F1H ACI 02H
ADD C MOV H,A
ADD E HLT
MOV L,A

4
MOV A,B
ADC D
MOV H,A
HLT

8. Este programa faz a operação BC42H – 2990H, isto é, ele subtrai 1064010 de 4819410, e
guarda o resultado no par de registradores H e L. Foram utilizados os registradores do
SAP-3 para armazenar as parcelas.

9. Solução com pré-incremento:


Rótulo Instrução Solução com pós-incremento:
LXI H,3FFFH Rótulo Instrução
LOOP: INX H LXI H,4000H
MOV B,M LOOP: MOV B,M
MOV A,H MOV A,H
ADI 70H ADI 70H
MOV H,A MOV H,A
MOV M,B MOV M,B
SUI 70H SUI 70H
MOV H,A MOV H,A
CPI 43H INX H
JNZ LOOP MOV A,H
MOV A,L CPI 44H
CPI FFH JNZ LOOP
JNZ LOOP HLT
HLT

10. Handshaking é uma troca de sinalização assíncrona entre um periférico e uma UCP,
na qual o dispositivo periférico envia um sinal de prontidão (READY) ativo, para informar
que está pronto para receber ou enviar um dado de/para a UCP, esta transfere o dado e
então responde com um sinal de reconhecimento (ACKNOWLEDGE) ativo, fazendo o
periférico desativar o sinal READY.

11. O aumento do número de registradores em uma UCP viabiliza maior capacidade de


armazenamento de dados dentro da UCP, com a consequente redução da necessidade
de acessar a memória, que é lenta. Isso já acelera o processamento de dados. Além
disso, essa UCP terá um maior número de instruções de transferência de dados entre
registradores, as quais são menores (consistem somente de um op-code, não precisando
de operando) e executam em menos estados T do que as instruções que acessam a
memória. Os programas podem usar mais dessas instruções e assim ficam mais simples,
menores e mais rápidos.

12.
JNZ endereço: desvia a execução para “endereço” se o flag Z for igual a zero.
JPE endereço: desvia a execução para “endereço” se o flag P for igual a um, isto é, se
o resultado da ULA tem um número par de 1’s.

13. A instrução PUSH D faz o seguinte:


a) Decrementa o SP para FFEFH;
b) Armazena o conteúdo do registrador D no endereço apontado por SP: (FFEFH) = 4DH;
c) Decrementa o SP para FFEEH;
d) Armazena o conteúdo do registrador E no endereço apontado por SP: (FFEEH) = 37H;
5
Endereço Conteúdo
FFEEH 37H
FFEFH 4DH
FFF0H ...

14. SUB E executa (A) ← (A) – (E). Após a execução, (A) = F5H e CY = 1.

15. O efeito global da execução desse programa é copiar todo o conteúdo da memória na
faixa de endereços de 6000H a 63FFH, para a faixa de endereços de B000H a B3FFH.
Primeiro, o par HL é inicializado com 6000H. O restante do programa é um laço que será
executado até que (H) = 64H. Nesse laço, o conteúdo do endereço de memória apontado
por HL será copiado no registrador B, em seguida somente o H será adicionado a 50H (o
que converte a faixa de 60H a 63H para B0H a B3H), e o valor do registrador B é copiado
para esse endereço da nova faixa de B0H a B3H. Depois H é subtraído de 50H (o que
volta da faixa de B0H a B3H para a faixa de 60H a 63H). O par HL é incrementado, para
apontar para o endereço seguinte na faixa original. Após essa incrementação, H é
copiado em A para seu valor ser comparado a 64H; enquanto não houver igualdade, Z = 0
e o laço recomeça.
Dessa forma, o programa duplica 1 KB de dados, que estavam na faixa de endereços de
6000H a 63FFH, copiando-os para a faixa de endereços de B000H a B3FFH.

16. As instruções de endereçamento por registrador são menores (1 byte de tamanho) do


que as instruções de endereçamento direto (3 bytes de tamanho). Por essa razão, as
instruções de endereçamento por registrador são buscadas em um único acesso à
memória, contra três acessos para as instruções de endereçamento direto. Além disso, as
instruções de endereçamento por registrador executam bem mais rápido porque não
acessam a memória, ao contrário das instruções de endereçamento direto, cuja execução
envolve a leitura do dado da memória.
Portanto, as instruções de endereçamento por registrador fazem o programa ficar menor e
mais rápido do que as instruções de endereçamento direto.

17. A instrução CALL traz como operando o endereço de início da sub-rotina na memória.
A execução de CALL faz com que o endereço da próxima instrução depois dela seja
guardado na área de pilha da memória (definida pelo apontador SP), e em seguida o
endereço fornecido com a CALL é carregado no PC, para que a execução do programa
seja desviada para ele, iniciando assim a execução da sub-rotina.
A sub-rotina deve terminar com a instrução RET, cuja execução provoca o
desempilhamento do endereço da instrução seguinte à CALL e seu carregamento no PC,
para que a execução do programa seja retomada a partir da instrução seguinte ao CALL.
Resumidamente, CALL provoca o empilhamento do endereço da próxima instrução e o
carregamento forçado do PC com o endereço inicial da sub-rotina; RET desempilha o
endereço de retorno e o devolve ao PC.

18. A instrução PUSH PSW faz o seguinte neste exemplo:


a) Decrementa o SP para FFEFH;
b) Armazena o conteúdo do acumulador no endereço apontado por SP: (FFEFH) = C7H;
c) Decrementa o SP para FFEEH;
d) Armazena o conteúdo do registrador de flags no endereço apontado por SP: (FFEEH)
= 34H.

6
Endereço Conteúdo
FFEEH 34H
FFEFH C7H
FFF0H ...

19. A área de pilha é uma parte da memória do microcomputador que é reservada, por
programa, para guardar endereços de retorno de sub-rotinas. Ela é definida por programa,
isto é, seu endereço de início e seu tamanho são definidos pelo programa, por meio da
inicialização e atualização do registrador SP (Stack Pointer ou apontador de pilha). A cada
vez que uma sub-rotina é chamada, seu endereço de retorno é automaticamente salvo no
topo da pilha, e o SP é decrementado. Por isso, a área de pilha “cresce” no sentido
decrescente dos endereços.
Os conteúdos dos registradores da UCP também podem ser armazenados na pilha por
meio das instruções PUSH, e depois restaurados por meio das instruções POP.
O acesso às informações armazenadas em uma pilha de memória é feito no modo LIFO
(Last In, First Out), que significa que o último dado armazenado na pilha é o primeiro que
será lido.

20. Este programa faz a operação 02BCH – 01F4H, isto é, ele subtrai 50010 de 70010, e
guarda o resultado no par de registradores H e L. Inicialmente, o programa zera o
acumulador e carrega os bytes que formam as duas parcelas nos registradores do SAP-3.
Então, BCH é carregado em A e dele é subtraído F4H. O resultado é carregado em L. Em
seguida, 02H é carregado em A e dele é subtraído 01H e o “pede-emprestado” da conta
anterior. O resultado é carregado em H, e então o programa é encerrado.

Você também pode gostar