Goiânia, 08 de junho de 2005.
Prof. José Wilson Lima Nerys
MICROPROCESSADORES E MICROCOMPUTADORES
AVALIAÇÃO 1
Aluno 1: ____________________________________________________ Matrícula: _______________Turma:____
Aluno 2: ____________________________________________________ Matrícula: _______________Turma:____
1.
Os alunos de microprocessadores turma 2005 decidiram fazer um pequeno projeto usando o microprocessador
8085 e, para isso, dividiram-se em grupos de 2 alunos. O projeto tem como ferramenta principal o ABACUS e é
explicado a seguir.
Parte 1: Programa gerador de código: o programa deve utilizar as matrículas dos dois alunos para gerar um código que
será mostrado no display de endereços. Cada matrícula representa um número hexadecimal de 6 dígitos. A
forma de geração desse código é:
Valor: 2,0
Matrícula 1
Matrícula 2
Número aleatório
Pré-Código
Resultado de Adição
+
+
+
1
Byte 2
x
x
y
y
a
a
?
?
0
0
Byte 0 do pré-código
Byte 1 do pré-código
Byte 2 do pré-código
Código
+
+
?
Byte 0
Byte 1
Byte 2
?
?
Byte 1
x
x
y
y
a
a
?
?
0
0
Byte 0
x
x
y
y
a
a
?
?
0
0
Obs.: A matrícula 1 e a matrícula 2 devem ser manualmente armazenadas a partir das posições de memória 2090h e
2095h, respectivamente. O número aleatório deve ser digitado através do teclado e armazenado a partir da
posição de memória 209Ah. A pilha deve ser colocada no endereço 2100 h.
Faça o fluxograma e o programa gerador do código.
Parte 2: O programa (continuação do anterior) deve comparar o código resultante com os valores hexadecimais 100 h
e 200 h. Se o código for maior ou igual a 200 h, uma contagem decimal crescente ininterrupta, de 5 em 5,
deve ser mostrada no display de dados. Caso o código seja menor que 100 h uma contagem decimal
decrescente ininterrupta, de 5 em 5, deve ser mostrada no display de dados. Para valores de código dentro do
intervalo de 100 h a 200 h, um novo número aleatório é solicitado.
Valor: 2,0
Faça o fluxograma e o programa da segunda parte do projeto.
2.
Analisando a arquitetura e o princípio de funcionamento do 8085, fale sobre possíveis maneiras de aumentar o
desempenho desse processador.
Valor: 1,0
Nota 1 = Prova 1 (50%) + Tarefa 1 (20%) + Exercícios Cap. 4 (20%) + Relatórios Lab. 2 e 3 (10%)
Questão extra opcional (valor: 0,5 – do livro: O livro de ouro de quebra-cabeças – organizado por Paulo Cezar Tovar):
Seis homens sentaram-se numa mesa redonda para jogar pôquer. Um deles era irmão de Paulo. Descubra onde eles se
sentaram, sabendo os seguintes fatos: (a) Pedro, que era parente de Paulo, sentou junto de Jorge; (b) o homem que
sentou junto ao homem, que sentou do lado oposto de Paulo, sentou do lado oposto do irmão de Paulo; (c) Antônio
sentou do lado oposto de Pedro, que sentou junto ao homem que sentou junto ao homem, que sentou do lado oposto de
Paulo; (d) Ernani sentou do lado oposto do homem, que sentou junto ao homem, que sentou junto ao homem, que
sentou do lado oposto do irmão de Paulo.
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 08 de junho de 2005.
Prof. José Wilson Lima Nerys
SOLUÇÃO DO ITEM 1 (Partes 1 e 2)
Observações:
(a) Os bytes 2, 1 e 0 do número de matrícula 1(X) ocupam respectivamente as posições de memória: 20C0h,
20C1h e 20C2h.
(b) Os bytes 2, 1 e 0 do número de matrícula 2(Y) ocupam respectivamente as posições de memória: 20C5h,
20C6h e 20C7h.
(c) O número aleatório, que é digitado através do teclado, é armazenado nas posições de memória: 20CAh,
20CBh e 20CCh, começando com o byte mais significativo em 20CAh.
(d) Inicialmente faz-se a adição X + Y e armazena-se o resultado nas posições de memória: 20D0h, 20D1h e
20D2h.
(e) A seguir faz-se a adição do resultado do item anterior com o número aleatório (X + Y + A) e armazena-se o
resultado nas posições de memória: 20D5h, 20D6 e 20D7h.
(f) Encontra-se o complementar de 2 da soma total (X + Y + A) e armazena-se nas posições de memória: 20DAh,
20DBh e 20DCh.
(g) A adição dos bytes 0, 1 e 2 do resultado anterior resulta no código desejado, que é armazenado em DE.
(h) Na comparação do código com os valores 100h e 200h, basta comparar o conteúdo de D com 0 e 1. Se for
zero, contagem decrescente; se for 1, pede outro código; caso contrário (≥2), contagem crescente.
INÍCIO
1
Lê número aleatório de
3 bytes (6 dígitos)
Guarda número aleatório
na memória
Adiciona-se X + Y, a partir
do byte 0, e considerando o
carry a partir do byte 1
Adiciona-se byte 0 + byte 1 + byte 2 do
resultado de X + Y + A, usando o par
HL como acumulador
Guarda resultado em DE e mostra
no display de endereços
D = 00?
Guarda resultado de X + Y
na memória
N
S
Adiciona-se X + Y + A, a partir
do byte 0, e considerando o carry
a partir do byte 1
S
D = 01?
Contagem Decrescente
de 5 em 5
N
Contagem crescente de
5 em 5
Guarda resultado de X + Y + A
na memória
Encontra-se o complementar de 2
do resultado de X + Y + A, a
partir do byte 0
Guarda complemento de 2 de
X + Y + A na memória
1
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 08 de junho de 2005.
Endereço
(hexa)
2000
2003
2006
2008
200B
200C
200D
200E
2011
2012
2015
2018
2019
201C
201D
201E
2021
2022
2025
2026
2027
202A
202B
202E
202F
2032
2035
2036
2039
203A
203B
203C
203D
2040
2041
2044
2045
2046
2047
2048
204B
204C
204F
2050
2051
2052
2053
2055
2058
2059
205B
205E
205F
2061
2064
Mnemônico
Prof. José Wilson Lima Nerys
Comentário
LXI SP,2100h
LXI H,20CAh
MVI C,03h
CALL 20B0h
MOV M,A
INX H
DCR C
JNZ 2008
Aponta para a posição onde será guardado o byte 2 do número aleatório
Contador para ler os 3 bytes do número aleatório
Chama subrotina para leitura de 1 byte
Armazena o conteúdo do acumulador (byte do número digitado) na memória
Incrementa par HL para apontar para a próxima posição
Decrementa contador para verificar se já foram digitados 3 bytes
Se o contador não for zero, volta para ler o próximo byte do n. aleatório
LXI H,20C7h
LDA 20C2h
ADD M
STA 20D2h
Depois de ler e guardar o número aleatório, aponta para byte 0 da matrícula 2
Carrega no acumulador o byte 0 da matrícula 1
Adiciona em A os bytes 0 das matrículas 1 e 2
Guarda em 20D2h byte 0 do resultado
DCX H
LDA 20C1h
ADC M
STA 20D1h
Decrementa HL para buscar o byte 1 da matrícula 2
Carrega no acumulador o byte 1 da matrícula 1
Adiciona com carry os bytes 1 das matrículas 1 e 2
Guarda em 20D1h byte 1 do resultado
DCX H
LDA 20C0h
ADC M
STA 20D0h
Decrementa HL para buscar o byte 2 da matrícula 2
Carrega no acumulador o byte 2 da matrícula 1
Adiciona com carry os bytes 2 das matrículas 1 e 2
Guarda em 20D0h byte 2 do resultado
LXI H,20D2h
LDA 20CCh
ADD M
STA 20D7h
CMA
MOV C,A
Aponta para o byte 0 do resultado de M1 + M2
Carrega no acumulador o byte 0 do número aleatório
Adiciona em A os bytes 0 do resultado M1 + M2 + número aleatório
Guarda em 20D7h byte 0 de M1 + M2 + aleatório
Complementa byte menos significativo e guarda temporariamente no registrador C
DCX H
LDA 20CBh
ADC M
STA 20D6h
CMA
MOV B,A
Decrementa HL para buscar o byte 1 resultado de M1 + M2
Carrega no acumulador o byte 1 do número aleatório
Adiciona com carry os bytes 1 do resultado M1 + M2 + número aleatório
Guarda em 20D6h byte 1 de M1 + M2 + aleatório
Complementa byte intermediário e guarda temporariamente no registrador B
DCX H
LDA 20CAh
ADC M
STA 20D5h
CMA
MOV E,A
Decrementa HL para buscar o byte 2 resultado de M1 + M2
Carrega no acumulador o byte 2 do número aleatório
Adiciona com carry os bytes 2 do resultado M1 + M2 + número aleatório
Guarda em 20D5h byte 2 de M1 + M2 + aleatório
Complementa byte mais significativo e guarda temporariamente no registrador E
MOV A,C
ADI 01h
STA 20DCh
MOV A,B
ACI 00h
STA 20DBh
MOV A,E
ACI 00h
STA 20DAh
O complemento do resultado de M1 + M2 + número aleatório está guardado em E B
C.
Assim, o complemento de 2 do número final, ou seja, o pré-código é encontrado
adicionando 1 ao número de 6 dígitos guardado em E B C.
O resultado desse ajuste é o pré-código, que é guardado nos endereços:
20DAh – byte mais significativo
20DBh – byte intermediário
20DCh – byte menos significativo
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Goiânia, 08 de junho de 2005.
Endereço
(hexa)
2065
2067
2069
206B
206E
206F
2072
2073
2074
2077
2078
2079
207A
207B
207E
207F
2080
2082
2085
2087
208A
208C
208D
2090
2092
2095
2096
2098
2099
209C
209E
209F
20A2
20A5
20A7
20A8
20AA
20AB
Prof. José Wilson Lima Nerys
Mnemônico
MVI B,00h
MVI D,00h
MVI H,00h
LDA 20DAh
MOV L,A
LDA 20DBh
MOV C,A
DAD B
LDA 20DCh
MOV E,A
DAD D
XCHG
PUSH D
CALL 0363h
POP D
MOV A,D
CPI 00h
JZ 209C
CPI 01h
JZ 2003h
MVI A,00h
PUSH PSW
CALL 036Eh
MVI D,03h
CALL 05F1h
POP PSW
ADI 05h
DAA
JMP 208Ch
MVI A,95h
PUSH PSW
CALL 036Eh
MVI D,03h
CALL 05F1h
POP PSW
ADI 95H
DAA
JMP 209Eh
Comentário
Adiciona os três bytes do pré código usando o registrador par HL como acumulador. O
final está em HL. Em seguida o resultado é transferido para DE.
Inverte os conteúdos de HL e DE. Portanto, o código final está em DE
Mostra código final no display de endereços
Carrega em A o conteúdo de D (dígito mais significativo do código) e compara com 00h.
Se A = 00h, significa que o código é menor que 100h. Assim, há um desvio para a
contagem decrescente, em 209Ch
Compara D com 01. Se D = 1 volta para o início do programa. Caso contrário, significa que
D ≥ 2 e o programa segue, entrando numa contagem crescente
Contagem decimal crescente ininterrupta mostrada no display de dados e com atraso de
tempo.
Contagem decimal decrescente ininterrupta mostrada no display de dados e com atraso de
tempo.
20B0
20B1
20B4
20B5
20B6
20B7
20B8
20B9
20BC
20BD
20BE
20BF
20C0
20C1
20C2
PUSH H
CALL 02E7h
RLC
RLC
RLC
RLC
MOV B,A
CALL 02E7h
ORA B
POP H
RET
Subrotina para leitura de 1 byte (2 dígitos)
01
01
40
Exemplo de Matrícula 1
20C5
20C6
20C7
99
32
39
Exemplo de Matrícula 2
20CA
20CB
20CC
aa
aa
aa
Endereço de armazagem do número aleatório. O byte mais significativo está em 20CAh
2100
Pilha
Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás
Download

microprocessadores e microcomputadores avaliação 1