Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
1. Objetivos
3. Teoria
34
4. Experimentos
Um programa de adição binária pode ser estendido para manipular números de 16 bits. Contudo, este tipo
de operação envolve mais do que duas adições de 8 bits, desde que existe um único acumulador de 8 bits
no microprocessador 8085.
Serão necessárias instruções adicionais para mover partes da soma entre o acumulador e outros
registradores. O problema do “vai um” do byte menos significativo para o byte mais significativo pode ser
tratado do seguinte modo:
a) Adicione os 8 bits menos significativos usando a instrução ADD.
b) Adicione os 8 bits mais significativos usando a instrução ADC.
A instrução ADC (add with carry) adiciona o conteúdo do registrador ou da posição de memória
especificados e o conteúdo do flag de carry com o conteúdo do acumulador.
O Programa 1 adiciona os elementos de um vetor de 6 números binários de 16 bits, armazenados a partir
da posição de memória 2050 e coloca o resultado da soma na posição de memória 2060 e 2061.
END. DADOS ASSEMBLY COMENTÁRIOS
MVI C,06 Obtém o tamanho do array
35
? ADD M soma o conteúdo do acumulador com o conteúdo da posição de memória apontada por HL,
colocando o resultado no acumulador.
? MOV E,A salva o resultado da soma anterior (byte menos significativo) no registrador E.
? INX H incrementa o par HL de uma unidade.
? MOV A,D coloca o byte mais significativo da soma no acumulador.
? ADC M adiciona o byte mais significativo da soma com o conteúdo da localização de memória apontada
pelo par de registradores HL e com o flag de carry, determinado pela instrução ADD anterior.
? MOV D,A salva o resultado da soma anterior (byte mais significativo) no registrador D.
? INX H incrementa o par de registradores HL. Então, este par passará a apontar para o próximo byte
menos significativo do vetor de dados de 16 bits.
? DCR C subtrai um do conteúdo do registrador C. Então, o índice será decrementado de um, indicando
agora quantos números de 16 bits ainda restam pata ser adicionados. Esta instrução seta ou reseta o
flag de zero.
? JNZ AGAIN faz com que o microprocessador execute a instrução localizada na posição de memória
AGAIN, se o flag de zero for zero (Z=0). Caso contrário, se o flag de zero for um (Z=1), o
microprocessador prossegue na próxima instrução da seqüência. Se o registrador C alcançou o valor 00,
então o flag de zero é setado (Z=1); caso contrário o flag de zero é resetado (Z=0).
? AGAIN é um label (rótulo) que assume o valor do endereço 2008 O nome AGAIN é arbitrário.
? A seqüência de instruções de MOV A,E até JNZ AGAIN é executada 6 vezes.
? XCHG troca os conteúdos do registrador D com o registrador H e do registrador E com o registrador L.
Então, a soma é transferida do par DE para o para HL.
? SHLD 2060 armazena o conteúdo do par de registradores HL, iniciando pelo endereço 2060. O
registrador L é armazenado no endereço 2060 e o H no próximo endereço (2061). Portanto, a soma é
armazenada nas localizações de memória 2060 e 2061.
? RST 1 pára o programa e retorna o controle ao monitor.
? Execute o programa de acordo com o seguinte procedimento:
a) Entre os seguintes dados, iniciando no endereço 2050: 01, 00, 02, 02, 03, 00, 14, 14, 05, 05, 06, 00.
b) Execute o programa iniciando no endereço 2000.
c) Verifique os endereços 2060 e 2061. Qual o resultado obtido? O Programa 1 sempre vai
fornecer o resultado da correto da soma em 2060 e 2061? Justifique?
d) Execute o programa para diferentes valores de dados. Os resultados são coerentes?
A Figura 1 mostra o fluxograma de um programa que multiplica dois números de 8 bits não sinalizados. O
resultado é um número de 16 bits. O endereço 201E contém o multiplicando e o endereço 201F o
multiplicador, o resultado é armazenado nos endereços 2020 e 2021.
36
ÍNICIO
PRODUTO = 0
CONTADOR = 8
MULTIPLICANDO = (201E)
MULTIPLICADOR = (201F)
PRODUTO = 2 x PRODUTO
(DESLOQUE 1 BIT PARA ESQUERDA)
MULTIPLICADOR = 2 x MULTIPLICADOR
O TRANSPORTE DO NÃO
MULTIPLICADOR É 1 ?
SIM
PRODUTO = PRODUTO +
MULTIPLICANDO
CONTADOR = CONTADOR - 1
NÃO
CONTADOR É = 0 ?
SIM
FIM
37
AGAIN: DAD H Multiplique por 2. (HL) = (HL) + (HL)
RAL Obtém o bit de transporte (carry)
JNC TEST Verifica o bit de transporte
A Figura 2 mostra o fluxograma de um programa que divide um número sem sinal de 16 bits por um
número sem sinal de 8 bits. Os endereços 201C e 201D contêm o número de 16 bits, que é dividido pelo
número armazenado no endereço 201E. O quociente será guardado no endereço 201F e o resto no
endereço 2020.
38
ÍNICIO
DIVIDENDO = 2 x DIVIDENDO
SIM
CONTADOR = CONTADOR - 1
NÃO
CONTADOR É = 0 ?
SIM
(201F) = QUOCIENTE
(2020) = RESTO
FIM
39
JC TEST Verifica se dividendo < divisor
Entre e examine o Programa 4 mostrado abaixo. Este programa utiliza uma tabela de consulta. A finalidade
deste programa é obter o quadrado do conteúdo da posição de memória 201A e colocar o resultado em
201B. A posição de memória 201A deve conter um número entre 0 e 7.
Observe que a tabela de quadrados representa dados constantes, e não parâmetros mutáveis.
ENDEREÇO DADOS ASSEMBLY COMENTÁRIOS
LDA 201A Obtém o byte de dados
TABELA DE CONSULTA
40
2020 00 Decimal 0
2021 01 Decimal 1
2022 04 Decimal 4
2023 09 Decimal 9
2024 10 Decimal 16
2025 19 Decimal 25
2026 24 Decimal 36
2027 31 Decimal 49
Programa 4 - Quadrado de um número
Execute o programa para os valores dos dados mostrados na Tabela 3, completando-a. Lembre-se que a
resposta observada é em hexadecimal. Converta o resultado para o seu valor decimal para preencher a
terceira coluna.
ENDEREÇO 201A ENDEREÇO 201B ENDEREÇO 201B
(HEXADECIMAL) (DECIMAL)
00
01
02
03
04
05
06
07
Tabela 3 - Resultados do programa
41