Académique Documents
Professionnel Documents
Culture Documents
14
Criado em 21/03/2011 10:08:00 Paulo Sergio da Silva
Atualizado em 21/03/2011 10:37:00 Impresso em 21/03/2011
10:37:00
1. Objetivos
2. Equipamento necessário
3. Teoria
ANTES DE INICIAR A PARTE PRÁTICA, LEIA ATENTAMENTE A TEORIA EXPOSTA NESTE ITEM E
NOS CAPÍTULOS 5 E 6 DO GAONKAR
Como já sabemos, o MC-1 possui um programa monitor que prover as funções necessárias para a utilização
de periféricos, tais como o teclado e o display hexadecimal. Esse programa monitor reside numa EPROM de
2Kbytes, cujos endereços estão compreendidos entre 0000H e 07FF. As rotinas que atendem cada um dos
periféricos são independentes entre si e, portanto, esses dispositivos não podem ser ativados
simultaneamente. Além dessa EPROM de 2Kbytes, o MC-1 também possui uma área de 256 bytes de RAM,
onde podemos escrever os nossos programas. Os endereços dessa área de RAM estão compreendidos
entre 2000H e 20FFH. No entanto, nem todas as posições da RAM estão disponíveis para o usuário. O
programa monitor também precisa de alguns bytes na RAM, onde ele possa escrever alguns dados
temporários, necessários a sua execução. A tabela abaixo mostra as áreas reservadas na memória RAM
para o uso do programa monitor.
Tabela 1 - Áreas reservadas na memória RAM para o Monitor e para a Expansão de EPROM.
Endereços Conteúdo
20B0-20C1 Rotinas da expansão de EPROM
20C2-20C4 Disponível para o usuário definir uma instrução JMP para a rotina de serviço da RST5
20C5-20C7 JMP para a rotina de serviço da RST 6
20C8-20CA JMP para a rotina de serviço da RST 6.5 (conectada à uma interrupção do usuário)
20CB-20CD JMP para a rotina de serviço da RST 7
20CE-20D0 JMP para a rotina de serviço da RST 7.5
20D1-20E8 Área usada pelo programa monitor para armazenamento de dados temporários
20E9 Imagem do Registrador E
20EA Imagem do Registrador D
20EB Imagem do Registrador C
20EC Imagem do Registrador B
20ED Imagem do Registrador de Flags
20EE Imagem do Registrador A
20EF Imagem do Registrador L
20F0 Imagem do Registrador H
20F1 Imagem do Registrador I (Máscaras de Interrupção)
20F2 Imagem do Registrador PC - LSByte
20F3 Imagem do Registrador PC - MSByte
20F4 Imagem do Registrador SP - LSByte
20F5 Imagem do Registrador SP - MSByte
20F6-20F7 Contém o endereço que está sendo mostrado no display de endereços
20F8 Contém o dado que está sendo mostrado no display de dados
20F9-20FC Buffer de saída e de endereços temporários
20FD Registrador Ponteiro
20FE Buffer de entrada do teclado
20FF Imagem do registrador de Comando/Status do 8155
14
Mclab03(2011) Pág. 15
Criado em 21/03/2011 10:08:00 Paulo Sergio da Silva
Atualizado em 21/03/2011 10:37:00 Impresso em 21/03/2011
10:37:00
4. Experimentos
42 x 425,532 ns 17,87 s
15
Mclab03(2011) Pág. 16
Criado em 21/03/2011 10:08:00 Paulo Sergio da Silva
Atualizado em 21/03/2011 10:37:00 Impresso em 21/03/2011
10:37:00
4.2. Os registradores H e L
O microprocessador 8085 usa os registros H e L para endereçar a memória. Na verdade, este é o principal
uso destes registradores, daí a letra H para “a parte alta do endereço” (high) e L para a “parte baixa do
endereço” (low).
Reescreva o programa complemento de um do experimento 4.1 na forma indicada na Tabela 4.
Tabela 4 - Registradores H e L
ENDEREÇO DADOS ASSEMBLY COMENTÁRIOS
2000 21 LXI H, 2030 Carrega H e L com 2030
2001 30
2002 20
2003 7E MOV A,M Carrega A com o conteúdo do endereço 2030
2004 2F CMA Complementa o conteúdo do registrador A
2005 23 INX H Incrementa (HL). (HL) = 2031
2006 77 MOV M,A Armazena o resultado
2007 CF RST 1 Volta ao Monitor
A instrução LXI H, 2030 carrega o par de registradores H, L com o endereço 2030. O resultado é H = 20 e L
= 30.
A instrução MOV A,M carrega o acumulador com o conteúdo do endereço de memória indicada pelos
registradores H e L. O resultado neste caso é que o acumulador é carregado com o conteúdo da posição de
memória 2030.
A instrução INX H (incrementa o par de registradores H, L) soma 1 ao número de 16 bits contido nos
registradores H e L. O resultado é H = 20 e L = 31. Observe que INX H incrementa na realidade o registrador
L e somente afetará o registrador H se o incremento de L ultrapassar o valor FF.
A instrução MOV M,A armazena o conteúdo do acumulador na posição de memória endereçada pelo par H
e L. No nosso caso, o conteúdo do acumulador será armazenado no endereço 2031.
Entre e execute o programa da Tabela 4 para os dados fornecidos na Tabela 5.
16
Mclab03(2011) Pág. 17
Criado em 21/03/2011 10:08:00 Paulo Sergio da Silva
Atualizado em 21/03/2011 10:37:00 Impresso em 21/03/2011
10:37:00
A instrução ADD M soma um byte de dados contido na memória com o conteúdo do acumulador. O
resultado é armazenado no acumulador.
Entre e execute o programa para os dados fornecidos na Tabela 7. Complete esta tabela.
17
Mclab03(2011) Pág. 18
Criado em 21/03/2011 10:08:00 Paulo Sergio da Silva
Atualizado em 21/03/2011 10:37:00 Impresso em 21/03/2011
10:37:00
Execute o programa da Tabela 9. O endereço 2005 contém um ponto de parada (instrução RST 1). Quando
o programa parar, você pode examinar a memória ou registradores.
Observe em qual endereço o programa para pela primeira vez. Para isso verifique o conteúdo dos
registradores PCH = ________ e PCL =___________
O registrador A foi carregado com zero, depois incrementado de 1 em 1 e comparado a 3. Verifique o
conteúdo do registrador A. A exibição deve ser:
A 01
Esta exibição indica que o conteúdo do acumulador é 01H.
Verifique o conteúdo do registrador de flags (F). O vídeo mostrará:
F A1
A1H corresponde ao binário 10100001, ou seja, a instrução CPI posicionou o bit 6 (Flag de Zero) em 0,
indicando que o resultado da comparação não é igual a zero, ou seja, que conteúdo do acumulador é
diferente de 3.
Obs.:
Registrador de Flags: S Z X AC X P X CY
Para retomar a execução do programa a partir do ponto em que ele está pressione a seqüência de teclas
EXECUTE/GO/EXECUTE. O primeiro EXECUTE finaliza o comando de visualização dos registradores e o
par GO/EXECUTE recoloca o programa em execução.
Lembre-se que o contador de programa (PC) estava apontando para o endereço da próxima instrução, ou
seja, 2006. A instrução em 2006 é JZ (Salte se o resultado for zero, ou seja, se Z = 1). Como a flag de Zero
é 0 (Z = 0) o programa continuará no endereço 2009, que repete o programa (JMP AGAIN). É claro que
esse trecho (JZ END e JMP AGAIN) poderia ser simplificado para simplesmente JNZ AGAIN.
Repita a execução do programa até que o conteúdo do registrador A seja igual a 3. Neste caso, o conteúdo
do acumulador será armazenado na posição de memória de endereço 2015.
Pressione EXECUTE/GO/EXECUTE e verifique novamente PCH=_____ e PCL=_____. O ponto de parada
correspondente deverá ser o endereço 2010.
Verifique também o registrador de F=_____ e a posição de memória 2015=_____.
18
Mclab03(2011) Pág. 19
Criado em 21/03/2011 10:08:00 Paulo Sergio da Silva
Atualizado em 21/03/2011 10:37:00 Impresso em 21/03/2011
10:37:00
MOV A,B
STA 2061
A instrução LDA 2060 transfere o conteúdo da posição de memória 2060 para o acumulador.
MOV B,A transfere um byte de dados de A para B.
A instrução seguinte, LDA 2061, toma o segundo byte e o transfere para o acumulador.
CMP B compara o byte armazenado em B com o conteúdo de A e indica o resultado alterando o valor dos
flags de carry (C) e de zero (Z). Os valores comparados não são alterados por esta operação.
Se o flag de carry for igual a 0, então A é maior ou igual a B; se o flag de carry é igual a 1, então A é menor
que B.
O programa testa a flag de carry (C) utilizando a instrução JC. Se o flag de carry for igual a 1, a execução do
programa continua no endereço especificado na instrução JC END. Se o flag de carry é 0, a execução
continua com a instrução seguinte a instrução JC (STA 2060).
As três instruções seguintes a JC END ordenam os bytes de dados em ordem decrescente.
Note que o programa contém uma instrução NOP.
Esta instrução pode ser substituída por RST 1 para que você possa examinar os registradores, caso seja
necessário.
Entre e execute o programa da Tabela 10 para os dados da Tabela 11. Complete a Tabela 11.
19
Mclab03(2011) Pág. 20
Criado em 21/03/2011 10:08:00 Paulo Sergio da Silva
Atualizado em 21/03/2011 10:37:00 Impresso em 21/03/2011
10:37:00
2060 B9
2061 01
PROCESSANDO
CONJUNTOS DE DADOS
PROCESSAMENTO DE UM
ELEMENTO ESPECÍFICO
ARMAZENADO EM M
HL = HL + 1
CONDIÇÃO FINAL
No
ALCANÇADA ?
Yes
FIM
20
Mclab03(2011) Pág. 21
Criado em 21/03/2011 10:08:00 Paulo Sergio da Silva
Atualizado em 21/03/2011 10:37:00 Impresso em 21/03/2011
10:37:00
Portanto, pode-se processar um conjunto de dados com o microcomputador MC-1, seguindo os seguintes
passos:
1. Usando a instrução LXI (Load HL immediate) ou LHLD (Load HL direct) defina o endereço inicial do
conjunto de dados nos registradores HL, que serão usados como ponteiros para a memória.
2. Refira-se a um elemento particular endereçado por HL como M.
3. Acesse o próximo elemento do conjunto mediante a instrução INX H (increment H, L) ou
4. Acesse um elemento arbitrário do conjunto carregando o deslocamento em outro par de registradores e
utilizando a instrução DAD (double register add).
O programa da Tabela 12 encontra a soma de todos os elementos de um conjunto de dados. A Figura 2
mostra o fluxograma correspondente.
A instrução CMP B compara o conteúdo dos registradores A e B e indica o resultado desta comparação
setando (ou não) os flags de transporte e de zero. A instrução SUB A zera o acumulador. A.
A próxima instrução, JZ END, testa o estado do flag de zero. Se este flag estiver setado (Z=1), a execução
do programa termina. Se este flag estiver resetado (Z=0) a execução do programa continua na próxima
instrução (LDA). A essa altura, o programa recupera o valor da soma, incrementa o contador e volta à
instrução ADD M a fim de somar o próximo dado.
SOMA
INDICADOR = INDICADOR +1
CONTADOR = CONTADOR + 1
No CONTADOR = 0 ?
Yes
FIM
21
Mclab03(2011) Pág. 22
Criado em 21/03/2011 10:08:00 Paulo Sergio da Silva
Atualizado em 21/03/2011 10:37:00 Impresso em 21/03/2011
10:37:00
O programa Tabela 14 encontra o maior e o menor número de uma lista de 10 elementos. Ele transfere para
o endereço 2040 o maior número da lista e para o endereço 2041 o menor número da lista. A lista começa
no endereço 2030.
22
Mclab03(2011) Pág. 23
Criado em 21/03/2011 10:08:00 Paulo Sergio da Silva
Atualizado em 21/03/2011 10:37:00 Impresso em 21/03/2011
10:37:00
MOV M,D
LXI H,2041 Guarda menor valor no endereço 2041
MOV M,E
RST 1 Volta ao Monitor
23
Mclab03(2011) Pág. 24
Criado em 21/03/2011 10:08:00 Paulo Sergio da Silva
Atualizado em 21/03/2011 10:37:00 Impresso em 21/03/2011
10:37:00
5. Questões
1. Descreva as seguintes instruções ORA M; MVI r,data; INR r; CPI data; JZ addr; JMP addr.
2. Os programas das Tabela 9 e Tabela 12 não são as melhores implementações para as tarefas
sugeridas. Utilizando as instruções XRA A e JNZ reescreva esses programas de uma forma mais
otimizada em termos de tempo de execução e espaço de memória.
3. Escreva um programa que some três bytes?
4. Qual seria o tempo gasto para executar o programa da Tabela 4? Compare esse tempo com o tempo
gasto para executar o programa da Tabela 2.
5. Escreva um programa para ordenar um conjunto “genérico” de números armazenados em memória. A
quantidade dada a serem ordenados deve ser guardada em um registrador antes do programa ser
executado.
24