Você está na página 1de 17

UNIVERSIDADE ESTADUAL PAULISTA

JLIO DE MESQUITA FILHO


Faculdade de Engenharia de Ilha Solteira
Departamento de Engenharia Eltrica

2 Experimento
Intrues Lgicas e Aritmticas

Aluno: Nercival Buschieri Jnior


R.A.: 11052091
Discuplina: Microprocessadores I Turma: P4
Docente: Prof. Dr. Alexandre Csar Rodrigues da Silva

Grupo 7

Relatrio referente ao experimento realizado no dia 22/03 e entregue em 31/03.

Ilha Solteira 2013

Sumrio
1. Objetivos................................................................................................................. 3
2. Introduo Terica .................................................................................................. 3
3.
4.
5.
6.

Procedimento Experimental e Apresentao de Resultados ......................................... 4


Concluses e Comentrios Finais..............................................................................14
Referncia................................................................................................................15
Anexo 1....................................................................................................................17

1. Objetivos
Entender e utilizar as operaes lgicas e aritmticas realizadas pela ULA (Unidade
Logica Aritmtica) do 8085A.
2. Introduo Terica

A Unidade "Unidade Lgico-Aritmtica (ULA ou ALU)" responsvel por todo o


processamento realizado na CPU (execuo de instrues aritmticas e lgicas).
controlada por sinais internos emitidos pela Unidade de Controle. Tem como entrada
os registradores A (Acumulador) e TEMP (Temporrio). responsvel pela sinalizao
de status das operaes (FLAGS). um registrador de 8 bits.
Abaixo temos as funes das principais componentes da ULA:
Registrador A (Acumulador):
o principal registrador da CPU. utilizado como Buffer temporrio de
entrada da Unidade Lgica e Aritmtica (ALU ou ULA). Frequentemente o registrador
de entrada ou sada da CPU. utilizado implicitamente na maioria das instrues. um
registrador de 8 bits, o que permite trabalhar com nmeros sem sinal de 0 a 255 e
nmeros com sinal de -128 a +127. O resultado das operaes resultantes da ULA
enviado para o Acumulador.

Registrador temporrio TEMP:


um registrador auxiliar usado para a entrada de dados da Unidade LgicoAritmtica. Os dados desse registrador so enviados para a ULA juntamente com os
dados do Acumulador.

Registrador de FLAGS:
tambm conhecido como registrador F, ou registrador PSW (Program Status
Word). um registrador de 8 bits (mas somente 5 bits so utilizados que armazena o
estado da ultima operao realizada na ULA. So as flags do 8085, conforme mostrado
a seguir:

Figura 2.1 Nomenclatura dos bits do Registrador de Flags.


3

S = Flag de Sinal - assume o valor 1 quando o resultado de uma operao negativo.


Z = Flag de Zero - assume o valor 1 quando o resultado de uma operao zero.
AC = Auxiliar de Carry = flag usada como auxiliar de transporte. Assume valor 1
quando h transporte do bit 3 para o bit 4. usada em operaes BCD.
P = Flag de Paridade - assume valor 1 quando h um nmero de par de algarismos 1 no
acumulador.
CY = Flag de Carry (transporte) - assume valor 1 quando h transporte do bit 7.

3. Procedimento Experimental e Apresentao de Resultados


3.1 Devia-se elaborar um programa que, a partir do endereo de memria 2070H,
preencha cada posio de memria com o bit a partir de D0 setado, comeando com o
valor 00H e atingindo o valor FFH. Ex.: (2070H)=00H, (2071H)=01H, (2072H)=03H,
(2078H)=FFH.

MNEMONIC
MVI A, 00H
LXI H, 2070
MOV M, A
INR A
INX H
MOV M, A
STC
RAL
INX H
MOV M, A
STC
RAL
INX H
MOV M, A
STC
RAL
INX H
MOV M, A
STC
RAL
INX H
MOV M, A
STC
RAL
INX H
MOV M, A
HLT

Cdigo
3E 00
21 70 20
77
3C
23
77
37
17
3C
77
37
17
3C
77
37
17
3C
77
37
17
3C
77
37
17
3C
77
76

Comentrio
Carrega o registrador A com o valor 00H.
Carrega o registrador par HL com o valor 2070H.
Move o contedo do Reg. A para a posio de memria especificado pelo reg. par HL.
Incrementa o contedo do Acumulador.
Incrementa o registrador par HL.
Move o contedo do Reg. A para a posio de memria especificado pelo reg. par HL.
Seta o bit do Carry (
). Nenhuma outra flag afetada.
Rotaciona o contedo do Acumulador esquerda incluindo bit de Carry.
Incrementa o contedo do registrador par HL.
Move o contedo do Reg. A para a posio de memria especificado pelo reg. par HL.
Seta o bit do Carry (
). Nenhuma outra flag afetada.
Rotaciona o contedo do Acumulador esquerda incluindo bit de Carry.
Incrementa o contedo do registrador par HL.
Move o contedo do Reg. A para a posio de memria especificado pelo reg. par HL.
Seta o bit do Carry (
). Nenhuma outra flag afetada.
Rotaciona o contedo do Acumulador esquerda incluindo bit de Carry.
Incrementa o contedo do registrador par HL.
Move o contedo do Reg. A para a posio de memria especificado pelo reg. par HL.
Seta o bit do Carry (
). Nenhuma outra flag afetada.
Rotaciona o contedo do Acumulador esquerda incluindo bit de Carry.
Incrementa o contedo do registrador par HL.
Move o contedo do Reg. A para a posio de memria especificado pelo reg. par HL.
Seta o bit do Carry (
). Nenhuma outra flag afetada.
Rotaciona o contedo do Acumulador esquerda incluindo bit de Carry.
Incrementa o contedo do registrador par HL.
Move o contedo do Reg. A para a posio de memria especificado pelo reg. par HL.
Pausa a execuo do programa.

A Figura 3.1.1 mostra a simulao do programa feita no simulador Abacus.

Figura 3.1.1 Simulao do programa no Abacus.


3.2 Usando apenas instrues lgicas e aritmticas e usando dois bytes para armazenar o
resultado, devia-se elaborar um programa que realiza algumas operaes sobre um
valor (byte) armazenado no endereo 2070H. Dentre as condies estabelecidas, o
valor no endereo 2070H devia ser maior que 01H e os resultados deviam ser
armazenados em posies consecutivas da memria, com tamanho adequado para
evitar overflow.
Os valores testados foram 12H, 56H, ACH e FFH. As operaes feitas esto listadas
abaixo:

a) Multiplica o valor por 2;

Tabela 3.2.1 Programa que multiplica um nmero por dois.


MNEMONIC
MVI A, FFH
LXI H, 2070
MOV M, A
ORA A
RAL
INX H
MOV M, A
MVI A, 00H
RAL
INX H
MOV M, A
HLT

Cdigo
3E FF
21 70 20
77
B7
17
23
77
3E 00
17
3C
77
76

Comentrio
Carrega o registrador A com o valor FFH.
Carrega o registrador par HL com o valor 2070H.
Move o contedo do Reg. A para a posio de memria especificado pelo reg. par HL.
Foi usado para zerar o Carry (
.
Rotaciona o contedo do Acumulador esquerda incluindo bit de Carry.
Incrementa o contedo do registrador par HL.
Move o contedo do Reg. A para a posio de memria especificado pelo reg. par HL.
Carrega o registrador A com o valor 00H.
Rotaciona o contedo do Acumulador esquerda incluindo bit de Carry.
Incrementa o contedo do registrador par HL.
Move o contedo do Reg. A para a posio de memria especificado pelo reg. par HL.
Pausa a execuo do programa.

Figura 4.2.1 Simulao do programa no Abacus.

b) Multiplica o valor por 7;


Tabela 3.2.2 Algortmo do programa para a multiplicao por 7.
MNEMONIC

Cdigo

LXI B 2070H
LDAX B
MOV H, A
ORA A
RAL
MOV D, A
MVI A, 00H
ADC A
MOV E, A
MOV A, D
ORA A
RAL
MOV D, A
MVI A, 00H
ADC A
MOV L, A
MOV A, E
ORA A
RAL
ADD L
MOV E, A
MOV A, D
ORA A
RAL
MOV D, A
MVI L, 00H
MOV A, L
ADC A
MOV L, A
MOV A, E
ORA A
RAL
ADC L
MOV E, A
MOV A, D
SUB H
INR C
STAX B
INR C
MVI A, 00H
ADC A
MOV L, A

01 70 20
0A
67
B7
17
57
3E 00
8F
5F
7A
B7
17
57
3E 00
8F
6F
7B
B7
17
85
5F
7A
B7
17
57
2E 00
7D
8F
6F
7B
B7
17
8D
5F
7A
94
0C
02
0C
3E 00
8F
6F

Comentrio
Carrega o registrador par BC com o valor 2070H.
Carrega o reg. A com o valor presente no endereo especificado pelo reg. par BC.
Move o contedo do Acumulador para o registrador H.
Usado para zerar o carry.
Rotaciona o contedo do Acumulador esquerda incluindo bit de Carry.
Move o contedo do Acumulador para o registrador D.
Carrega o acumulador com o valor 00H.
Adiciona contedo do Acumulador ele mesmo. (Utilizado para pegar o carry.)
Move o contedo do Acumulador para o registrador E.
Move o contedo do registrador D para o Acumlador.
Usado para zerar o carry.
Rotaciona o contedo do Acumulador esquerda incluindo bit de Carry.
Move o contedo do Acumulador para o registrador D.
Carrega o acumulador com o valor 00H.
Adiciona contedo do Acumulador ele mesmo. (Utilizado para pegar o carry.)
Move o contedo do registrador A para o registrador L.
Move o contedo do registrador E para o registrador A.
Usado para zerar o carry.
Rotaciona o contedo do Acumulador esquerda incluindo bit de Carry.
O contedo do registrador L adicionado ao contedo do Acumulador.
Move o contedo do Acumulador para o registrador E.
Move o contedo do registrador D para o Acumlador.
Usado para zerar o carry.
Rotaciona o contedo do Acumulador esquerda incluindo bit de Carry.
Move o contedo do Acumulador para o registrador D.
Carrega o registrador L com o valor 00H.
Move o contedo do registrador L para o Acumlador.
Adiciona contedo do Acumulador ele mesmo. (Utilizado para pegar o carry.)
Move o contedo do registrador A para o registrador L.
Move o contedo do registrador E para o registrador A.
Usado para zerar o carry.
Rotaciona o contedo do Acumulador esquerda incluindo bit de Carry.
Adiciona o contedo do reg. L ao contedo do Acumulador.
Move o contedo do Acumulador para o registrador E.
Move o contedo do registrador D para o Acumlador.
O contedo do registrador H subtrado do contedo do Acumulador.
Incrementa o reg. C. (Carry no afetado)
Move o contedo do Acumulador para o endereo especificado pelo reg. par BC.
Incrementa o reg. C. (Carry no afetado)
Carrega o acumulador com o valor 00H.
Adiciona contedo do Acumulador ele mesmo. (Utilizado para pegar o carry.)
Move o contedo do Acumulador para o registrador L.
7

MOV A, E
SUB L
STAX B
HLT

7B
95
02
76

Move o contedo do registrador E para o registrador A.


O contedo do registrador L subtrado do contedo do Acumulador.
Move o contedo do Acumulador para o endereo especificado pelo reg. par BC.
Pausa a execuo do programa.

A Figura 3.2.2 mostra a simulao do programa feita no Abacus.

Figura 3.2.2 Simulao no Abacus.

c) Divida o valor por 2;


Antes de se iniciar o programa, deve-se carregar o endereo 2070H com o valor que
deseja-se dividir por 2.
Tabela 3.2.3 Algortmo para diviso por 2.
MNEMONIC
LXI B, 2070H
LDAX B
ANI 01H
STA 2072H
LDAX B
ORA A
RAR
INR C
STAX B
HLT

Cdigo
01 70 20
0A
E6 01
32 70 20
0A
B7
1F
0C
02
76

Comentrio
Carrega o reg. Par BC com o valor 2070H.
Carrega o reg. A com o valor presente no endereo especificado pelo reg. par BC.
Foi usado para verificar se o nmero mpar, obtendo-se o resto da diviso por 2.
Move o contedo do Acumulador para o endereo especificado.
Carrega o Acumulador com o contedo do endereo especificado pelo reg. par BC.
Foi usado para zerar o Carry (
.
Rotaciona o contedo do Acumulador direita incluindo bit de Carry.
Incrementa o registrador C.
Move o contedo do reg. A para o endereo especificado pelo reg. par BC.
Pausa a execuo do programa.

Note que usamos a operao ANI 01H para verificar se o nmero mpar. Caso for,
teremos 01H de resto. Armazenamos o quociente no endereo 2071H e o resto no
endereo 2072H. A Figura 4.2.3 mostra a simulao do programa.

Figura 4.2.3 Simulao utilizando o Abacus.


3.3 Agora, deveramos elaborar um programa para somar os nmeros de 16 bits
armazenados como se segue:
Nmero 1: LSB(2060H) e MSB(2061H)
Nmero 2: LSB(2062H) e MSB(2063H)
E o resultado deveria ser armazenado a partir da posio 2064H.
Foi feito ento o seguinte programa:
*Obs: devia-se antes carregar os valores nas posies 2060H, 2061H, 2062H e 2063H.

Tabela 3.3.1 Programa elaborado para fazer uma soma de nmeros de 16 bits.
MNEMONIC
LXI H,2060H
MOV B, M
INR L
MOV C, M
LDA 2062H
MOV L, A
LDA 2063H
MOV H, A
DAD B
MOV A, H
STA 2065
MOV A, L
STA 2064H
MVI A, 00H
ACI 00H
STA 2066H
HLT

Cdigo
21 60 20
46
2C
4E
3A 62 20
6F
3A 63 20
67
09
7C
32 65 20
7D
32 64 20
3E 00
CE 00
32 66 20
76

Comentrio
Carrega o registrador par HL com o valor 2060H.
Move para o reg. B o valor presente na posio de memria especificado pelo reg. par HL.
Incrementa o registrador L, sem afetar o carry ( ).
Move para o reg. C o valor presente na posio de memria especificado pelo reg. par HL.
Carrega o Acumulador com o valor presente na posio 2062H.
Move o contedo do Acumulador para o registrador L.
Carrega o Acumulador com o valor presente na posio 2063H.
Move o contedo do Acumulador para o registrador H.
O contedo do reg. Par BC adicionado ao contedo do reg. Par HL (Carry afetado).
Move o contedo do registrador H para o Acumulador.
Move o contedo do Acumulador para a posio de memria 2065H.
Move o contedo do registador L para o Acumulador.
Move o contedo do Acumulador para a posio de memria 2064H.
Carrega o Acumulador com o valor 00H.
Adiciona o valor especificado com carry ao contedo do acumulador.
Move o contedo do Acumulador para a posio de memria 2066H.
Pausa a execuo do programa.

A Figura 3.3.1 mostra a simulao do programa no Abacus. Note que foi feita a
operao FFDDH+5755H, resultando em 15754H.

10

Figura 3.3.1 Simulao do programa no Abacus.

11

3.4 Finalmente, devia-se fazer um programa que lesse uma temperatura em grau
Celsius ( ) no endereo de memria 2070H (em hexadecimal) e converta-a
em grau Fahrenheit
, armazenando este resultado no endereo de
memria seguinte.

Deviam ser anotados os valores de sada para os seguintes valores: 00, 10, 20,
30, ..., 80, 90 e 99.

MNEMONIC
LDA 2070H
MOV B, A
ORA A
RAR
MOV C, A
ADD B
MOV B, A
MVI A,00H
RAL
MOV E, A
MOV A, C
RAR
MOV C, A
ADD B
MOV B, A
MVI A,00H
RAL
ADD E
ADD B
ADI 20H
STA 2071H
HLT

Cdigo
3A 70 20
47
B7
1F
4F
80
47
3E 00H
17
5F
79
1F
4F
80
47
3E 00H
17
83
80
C6 20
32 71 20
76

Comentrio
Carrega o Acumulador com o valor presente na posio 2070H.
Move o dado do Acumulador para o reg. B.
Foi usado para zerar o Carry (
.
Rotaciona o contedo do Acumulador direita incluindo bit de Carry.
Move o dado do Acumulador para o reg. C.
O contedo do registrador B adicionado ao contedo do Acumulador.
Move o dado do Acumulador para o reg. B.
Carrega o registrador A com o valor 00H.
Rotaciona o contedo do Acumulador esquerda incluindo bit de Carry.
Move o dado do Acumulador para o reg. E.
Move o dado do Acumulador para o reg. C.
Rotaciona o contedo do Acumulador direita incluindo bit de Carry.
Move o dado do Acumulador para o reg. C.
O contedo do registrador B adicionado ao contedo do Acumulador.
Move o dado do Acumulador para o reg. B.
Carrega o registrador A com o valor 00H.
Rotaciona o contedo do Acumulador esquerda incluindo bit de Carry.
O contedo do registrador E adicionado ao contedo do Acumulador.
O contedo do registrador B adicionado ao contedo do Acumulador.
Adiciona o valor especificado ao contedo do acumulador.
Move o contedo do acumulador para a posio de memria 2071H.
Pausa a execuo do programa.

A Figura 3.4.1 Mostra a simulao no Abacus:

12

Figura 3.4.1 Simulao no Abacus.

13

4. Concluso e Comentrios Finais


Nesse experimento aprendemos a utilizar as principais funes lgicas e
aritmticas que so realizadas pela ULA. Aprendemos como implementar simples
programas, capazes de fazerem somas, multiplicaes, divises, etc.
O conhecimento dessas instrues de suma importncia, pois nos permite
resolver pequenos polinmios, como foi o caso do programa de converso de
unidades feito no Item 4.3.

14

5. Anexo 1

15

16

6. Referencias
http://www2.ufersa.edu.br/portal/view/uploads/setores/147/arquivos/MM/7047549Cpu-Process-Adores.pdf

17

Você também pode gostar