Resumo primeiro exercício de Microprocessador 2013
Por: Rafael Mesquita • 31/8/2017 • Trabalho acadêmico • 9.108 Palavras (37 Páginas) • 311 Visualizações
1) Considere o programa abaixo, em mnemônico, e responda as questões a seguir, sabendo que a sub-rotina delay provoca um retardo de 1ms e afeta o registrador E.
.define
dados1 4000h
dados2 4100h
.data 4000h
dados1 db 10h, 35h, 22h, 16h, 33h, 25h, 27h, 6Ah, FFh, 12h
.data 4100h
dados2 db 26h, F2h, E4h, 34h, 87h, 54h, 90h, 33h, BFh, 20h
ORG 0
Inicio: | 3 | LXI SP, 4050h | 0000h; carrega o apontador de pilha com valor 4050h, inicia dados. | ||
3 | LXI H, dados1 | 0003h; carrega HL com dados1. | |||
3 | LXI D, dados2 | 0006h; carrega DE com dados2. | |||
2 | MVI C, 0Ah | 0009h; carrega registrador com valor 0Ah, contador = 10d. | |||
1 | MOV A, M | 000Bh; carrega acumulador com dados apontado por HL. | |||
1 | MOV B, A | 000Ch; carrega registrador B com acumulador. | |||
1 | XCHG | 000Dh; permuta D ↔ H e E ↔ L. | |||
1 | MOV A, M | 000Eh | |||
1 | MOV M, B | 000Fh | |||
1 | XCHG | 0010h; permuta D ↔ H e E ↔ L. | |||
1 | MOV M, A | 0011h | |||
1 | INX H | 0012h; incrementa H, para o próximo dado armazenado no par HL. | |||
1 | INX D | 0013h; incrementa D, para o próximo dado armazenado no par DE. | |||
1 | DCR C | 0014h, atualiza contador | |||
3 | CALL Delay | 0015h, carrega a sub-rotina Delay | |||
3 | JNZ volta | 0018h, se não fez 10 vezes repete. | |||
1 | HLT | 001Bh | |||
1 | INR r/M/A | Incrementa 1 ao: registrador /Conteúdo da posição HL / Acumulador | |||
3 | LDA | ||||
1 | ANI | ||||
3 | OUT 01h | Envia valor de A para a Porta de saída 01h |
(a) O que o programa acima faz? Explique.
O programa permuta os dados1 ↔ dados2 através do XCHG que permuta os dados D ↔ H e E ↔ L. A permutação ocorre dado por dado. Os dados finais ficarão:
dados1 26h, F2h, E4h, 34h, 87h, 54h, 90h, 33h, BFh, 20h
dados2 10h, 35h, 22h, 16h, 33h, 25h, 27h, 6Ah, FFh, 12h
(b) Desenhe uma tabela mostrando os endereços e o conteúdo da pilha após a execução da instrução CALL 0200h.
O acumulador CALL antes de executar a sua sub-rotina envia para a pilha o próximo endereço:
404Eh | 18h | SP[pic 1] |
404Fh | 00h | |
4050h | ||
(c) Após a execução qual o maior valor a partir da posição 4000? E a partir de 4100?
Posição 4000h: F2h e Posição 4100h: FFh
(d) Mostre o que deve ser feito para garantir o correto uso das chamadas de sub-rotinas a garantir a corretude do programa.
Para o uso correto das chamadas de sub-rotina deve guardar, antes da execução da sub-rotina o endereço que segue na pilha, para depois, na volta da sub-rotina este endereço seja retirado da pilha para execução, e ainda, para retornar ao programa principal é necessária a instrução RET no final da sub-rotina de instrução CALL. Os dados normalmente armazenados são endereços de chamadas/retornos de sub-rotina e endereços de retorno de interrupções, que automaticamente armazenados pelo 8085 e ainda outros dados que podem ser armazenados pelo programador usando a instrução PUSH. Posteriormente esses dados são retirados da pilha usando a instrução POP. -1-
...