• Nenhum resultado encontrado

2.5 - Instruções Lógicas do ULA

N/A
N/A
Protected

Academic year: 2021

Share "2.5 - Instruções Lógicas do ULA"

Copied!
10
0
0

Texto

(1)

2.5 - Instruções Lógicas do 8085 - ULA

Todas as operações lógicas e aritméticas em qualquer microprocessador são realizadas em uma unidade dedicada denominada Unidade Lógica e Aritmética (ULA). Para auxiliar nessa função, há alguns registradores conectados diretamente à ULA. No caso do 8085, esses registros são: ACUMULADOR (A ou Acc) e um REGISTRADOR TEMPORÁRIO (não disponível para uso geral via programação).

A estrutura interna do 8085 para operações gerais é apresentada na figura seguinte.

Um dos operandos das operações estará sempre armazenado no Acumulador. O outro operando, vindo dos registradores B, C, D, E, H e L ou da memória, passa necessariamente por uma transferência interna para um registrador temporário (REG TEMP). O resultado da operação é armazenado sempre no acumulador.

Quando uma operação é realizada na ULA, algumas situações particulares podem acontecer. Em tais casos os bits de estados são setados ou zerados e ficam armazenados em um registrador denominado F ou registrador de FLAGS. Estes bits podem ser utilizados para o controle e desvio de programas através de determinadas instruções. Os flags no 8085 são organizados como segue:

FLAGS

As funções dos bits de FLAGS são:

CARRY (CY) – Este flag é setado UM (1) quando o resultado de uma operação é um

número maior do que 8 bits (ESTOURO ou OVERFLOW). Caso contrário ele é zerado. Exemplo: FFH + 11H = 10H e CY=1.

PARITY (P) – Esse bit assume valor UM (1) quando o resultado de uma determinada

operação produz um valor com número de bits “1” PAR. Caso contrário ele é zerado. Exemplo: 0EH + 01H = 0FH e P=1.

AUXILIAR CARRY (AC) – O flag AC assume valor “1” quando há um VAI-UM do

terceiro para o quarto bit. Caso contrário ele é zerado. Exemplo: 05H+0CH = 11H e AC=1.

(2)

ZERO (0) caso contrário ele é zerado. Exemplo: FDH + 03H = 00H, resulta Z=1 e CY=1.

SIGNAL (S) – Assume “1” quando o resultado de uma operação produz um número

maior que 7FH (operações com sinal).

CONJUNTO DE INSTRUÇÕES LÓGICAS

Operações AND (

•) -

O flag CY é desativado (=0) e o flag AC é ativado (AC=1).

14 - ANA r

And Accumulator with Register

(A) = (A) • (r) Z, S, P, AC, CY

1010 0 FFF T= 4 F

É realizada uma operação AND entre o conteúdo do registrador r e o conteúdo do Acumulador e o resultado é transferido ao acumulador.

Exemplo:

Instrução Código (Binário) Código (Hexa)

ANA B 1010 0 000 A0

ANTES: (A) = 3CH (B) = 21H APÓS: (A) = 20H (B) = 21H (F)=12H

15 - ANA M

And Accumulator with Register

(A) = (A) • ((H)(L)) Z, S, P, AC, CY

1010 0110 T = 7 F R

É realizada uma operação AND entre o conteúdo da memória endereçado pelo par HL e o conteúdo do Acumulador e o resultado é transferido ao Acumulador.

Exemplo:

Instrução Código (Binário) Código (Hexa)

ANA M 1010 0110 A6 ANTES: (H) = 20H (L) = 31H (2031H) = 7FH (A) = 37H APÓS: (2031H) = 7FH (A) = 37H (F) = 12H

16 - ANI Data8

And Immediate with Accumulator

(A) = (A) • Data8 Z, S, P, AC, CY

1110 0110 Data8

T = 7 F R

É realizada uma operação AND entre o dado Data8 e o conteúdo do Acumulador e o resultado é transferido ao Acumulador.

Exemplo:

Instrução Código (Binário) Código (Hexa)

ANI F0 1110 0110

1111 0000

E6 F0

ANTES: (A) = 37H APÓS: (A) = 30H (F)=16H

Operações OR (+

L

)

Os flags CY e AC são desativados (=0).

17 - ORA r

Inclusive OR Registerwith Accumulator

(A) = (A) +L (r)

Z, S, P, AC, CY

1011 0FFF

T = 4 F

É realizada uma operação OR entre o conteúdo do registrador r e o conteúdo do Acumulador e o resultado é transferido ao acumulador.

Exemplo:

Instrução Código (Binário) Código (Hexa)

ORA B 1011 0 000 B0

(3)

18 - ORA M

Inclusive OR Memory with Accumulator

(A) = (A) +L ((H)(L)) Z, S, P, AC, CY 1011 0110 B6H T = 7 F R

É realizada uma operação OR entre o conteúdo da memória endereçado pelo par HL e o conteúdo do Acumulador e o resultado é transferido ao Acumulador.

Exemplo:

Instrução Código (Binário) Código (Hexa)

ORA M 1011 0110 B6 ANTES: (H) = 20H (L) = 31H (2031H) = 7FH (A) = 37H APÓS: (H) = 20H (L) = 31H (2031H) = 7FH (A) = 7FH (F)=02H

19 - ORI Data8

Inclusive OrImmediate with Accumulator

(A) = (A) +L Data8

Z, S, P, AC, CY

1111 0110 Data8

T = 7 F R

É realizada uma operação OR entre o dado Data8 e o conteúdo do Acumulador e o resultado é transferido ao Acumulador.

Exemplo:

Instrução Código (Binário) Código (Hexa)

ORI F1 1111 0110

1111 0001

F6 F1

ANTES : (A) = 37H APÓS: (A) = F7H (F) = 82H

Operação OR Exclusivo (

⊕ )

-

Os flags CY e AC são zerados.

20 - XRA r

ExclusiveOR Registerwith Accumulator

(A) = (A) ⊕ (r) Z, S, P, AC, CY

1010 1FFF

T = 4 F

É realizada uma operação Exclusive OR entre o conteúdo do registrador r e o conteúdo do Acumulador e o resultado é transferido ao acumulador.

Exemplo:

Instrução Código (Binário) Código (Hexa)

XRA B 1010 1 000 A8

ANTES: (A) = 3CH (B) = 21H APÓS: (A) = 1DH (F) = 06H

21 - XRA M

ExclusiveOR Memory with Accumulator

(A) = (A) ⊕ ((H)(L)) Z, S, P, AC, CY

1010 1110 T = 7 F R

É realizada uma operação XOR entre o conteúdo da memória endereçado pelo par HL e o conteúdo do Acumulador e o resultado é transferido ao Acumulador.

Exemplo:

Instrução Código (Binário) Código (Hexa)

XRA M 1010 1110 AE ANTES: (H) = 20H (L) = 31H (2031H) = 7FH (A) = 37H APÓS: (2031H) = 7FH (A) = 48H (F) = 06H

22 - XRI Data8

ExclusiveOrImmediate with Accumulator

(A) = (A) ⊕ Data8 Z, S, P, AC, CY

1110 1110 Data8

T = 7 F R

É realizada uma operação XOR entre o dado Data8 e o conteúdo do Acumulador e o resultado é transferido ao Acumulador.

Exemplo:

Instrução Código (Binário) Código (Hexa)

XRI F1 1110 1110

1111 0001

EE F1 ANTES: (A) = FCH APÓS: (A) = 0DH (F) = 02H

(4)

Operações de Complemento

23 - CMA

Complement Accumulator

(A) = (A) 0010 1111 T = 4

F

Complementa o conteúdo do Acumulador e transfere o resultado ao Acumulador. Nenhum flag é afetado.

Exemplo:

Instrução Código (Binário) Código (Hexa)

CMA 0010 1111 2F

ANTES: (A) = 3CH APÓS: (A) = 16H (F) = C3H

24 - CMC

Complement Carry CY =CY 0011 1111 3FH T= 4 F

O flag CY é complementado. Nenhum outro flag é afetado.

25 - STC

Set Carry CY = 1 0011 0111 37H T = 4 F O flag CY é setado

Operações de Comparação

26 - CMP r

Compare Register with Accumulator

(A) – (r) Z, S, P, AC ,CY

1011 1 FFF T = 4 F

O conteúdo do registrador r é subtraído do Acumulador. O Acumulador não é alterado. Os flags são alterados conforme o resultado da subtração. O flag Z é setado se (A) = (r). O flag CY é setado se (A) < (r).

Exemplo:

Instrução Código (Binário) Código (Hexa)

CMP B 1011 1000 B8

ANTES: (A) = 37H (B) = 21H APÓS: (A) = 37H (F) = 12H

27 - CMP M

Compare Register with Memory

(A) – ((H)(L)) Z, S, P, AC ,CY 1011 1110 BE H T = 7 F R O conteúdo do endereço de memória dado pelo par H,L é subtraído do Acumulador. O Acumulador não é alterado. Os flags são alterados conforme o resultado da subtração. O flag Z é setado se (A) = ((H)(L)). O flag CY é setado se (A) < ((H)(L)).

Exemplo:

Instrução Código (Binário) Código (Hexa)

CMP M 1011 1110 BE ANTES: (H) = 20H (L) = 32H (2032H) = F5H (A) = 37H APÓS: (2032H) = 35H (A) =37H (F) = 17H

28 - CPI Data8

Compare Immediate (A) – (Data8) Z, S, P, AC ,CY 1111 1110 (FE H) Data8 T = 7 F R O byte Data8 é subtraído do Acumulador. O Acumulador não é alterado. Os flags são alterados conforme o resultado da subtração. O flag Z é setado se (A) = Data8. O flag CY é setado se (A) < Data8.

Exemplo:

Instrução Código (Binário) Código (Hexa)

CPI 45 1111 1110

0100 0101

FE 45 ANTES: (A) = 20H APÓS: (A) = 20H (F) = 07H

(5)

Instruções de Rotação

29 - RLC

Rotate Left Accumulator

(An+1) ← (An) (A0) ← (A7) (CY) ← (A7) 0000 0111 07H T = 4 F

O conteúdo de A é deslocado de uma posição para esquerda. O bit de menor ordem e o flag CY recebem o bit de maior ordem, e o valor inicial de CY é descartado. Os demais flags não são afetados.

Exemplo:

Instrução Código (Binário) Código (Hexa)

RLC 0000 0111 07

ANTES: (A) = 20H CY = X APÓS: (A) = 40H CY = 0

30 - RAL

Rotate All Left Through Carry (An+1) ← (An) (CY) ← (A7) (A0) ← (CY) 0001 0111 (17H) T= 4 F

O conteúdo de A é deslocado de uma posição para esquerda através do Carry. O bit de menor ordem recebe o conteúdo CY e o flag CY recebe o valor do bit de maior ordem do acumulador, conforme o diagrama seguinte:

Os demais flags não são afetados.

Exemplo:

Instrução Código (Binário) Código (Hexa)

RAL 0001 0111 17

ANTES: (A) = 20H CY = 1 APÓS: (A) = 41H CY = 0

31 - RRC

Rotate Right Accumulator

(An) ← (An+1)

(A7) ← (A0)

(CY) ← (A0)

0000 1111 (0FH) T = 4 F

O conteúdo do A é deslocado de uma posição para a direita. O flag CY tem seu valor descartado e, junto com o bit A7, recebem o bit A0, conforme o diagrama seguinte:

Os demais flags não são afetados.

Exemplo:

Instrução Código (Binário) Código (Hexa)

RRC 0000 1111 0F

ANTES: (A) = 20H CY = X APÓS: ( A) = 10H CY = 0

32 - RAR

Rotate All Right Through Carry

(An) ← (An+1)

(CY) ← (A0)

0001 1111 (1FH) T = 4 F

(6)

O conteúdo de A é deslocado de uma posição à direita através do Carry. O bit de maior ordem recebe o valor do carry e o CY recebe o valor do bit de menor ordem do acumulador, conforme o diagrama seguinte:

Os demais flags não são afetados.

Exemplo:

Instrução Código (Binário) Código (Hexa)

RAR 0001 1111 1F

ANTES: (A) = 20H CY = 1 APÓS: (A) = 90H CY = 0

2.6 - CONJUNTO DE INSTRUÇÕES ARITMÉTICAS

A realização de cálculos é um ponto importante em sistemas que usam microprocessadores. O 8085 possui uma variedade de instruções para operações aritméticas, realizadas em complemento de 2 também possui uma instrução especial para a realização de operações em BCD.

A base das operações de soma e subtração são todas resumidas nas tabela seguinte: A B soma carry

0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1

Nos sistemas digitais, a subtração pode ser utilizada de maneira mais simples se for convertida em soma. O artifício usado é passar os subtraendos para complemento de dois e adicioná-los aos minuendos.

Obs: Complemento de 1: inversão de todos os bits Complemento de 2: complemento de 1 + 1

Adição

33 - ADD r

Add Acc. with Register

(A) = (A) + (r) Z, S, P, AC, CY

1000 0 FFF T = 4

F

É realizada uma soma entre o conteúdo do Acumulador e o conteúdo do registrador r.

Exemplo:

Instrução Código (Binário) Código (Hexa)

ADD B 1000 0000 80

ANTES: (A) = 21H (B) = 31H APÓS: (A) = 52H (F) = 02H

34 - ADD M

Add Acc. with Memory

(A) = (A) + ((H)(L)) Z, S, P, AC, CY 1000 0110 T = 7 F R

(7)

É realizada uma soma entre o conteúdo do Acumulador e o conteúdo da memória endereçada pelo par HL.

Exemplo:

Instrução Código (Binário) Código (Hexa)

ADD M 1000 0110 86 ANTES: (H) = 20H (L) = 33H (A) = 21H (2033) = FFH APÓS: (A) = 20H (F) = 13H

35 - ADI Data8

Add with Immediate

(A) = (A) + Data8 Z, S, P, AC, CY

1100 0110 Data8

T = 7 F R

É realizada uma soma entre o conteúdo do Acumulador e o byte Data8.

Exemplo:

Instrução Código (Binário) Código (Hexa)

ADI 45 1100 0110

0010 0101

C6 45

ANTES: (A) = 21H (2033) = 45H APÓS: (A) = 66 H (F) = 06H

36 - ADC r

Add Acc.with Register and Carry

(A) = (A) + (r) + CY Z, S, P, AC, CY

1000 1 FFF T = 4 F

É realizada uma soma entre o conteúdo do Acumulador e o conteúdo do registrador r e o flag CY.

Exemplo:

Instrução Código (Binário) Código (Hexa)

ADC B 1000 1000 88

ANTES: (A) = 21H (B) = 31H (CY)=1 APÓS: (A) = 53H (F) = 06H

37 - ADC M

AddAcc. with Memory and Carry

(A) = (A) + ((H)(L)) + CY Z, S, P, AC, CY 1000 1110 T = 7 F R

É realizada uma soma entre o conteúdo do Acumulador e o conteúdo da memória endereçada pelo par HL e o flag CY.

Exemplo:

Instrução Código (Binário) Código (Hexa)

ADC M 1000 1110 8E

ANTES: (H) = 20H (L) = 33H (A) = 21H (2033) = FFH CY=1

APÓS: (A) = 21H (F) = 06H

38 - ACI Data8

Add Acc. with Immediate and Carry

A = (A) + Data8 + CY Z, S, P, AC, CY 1100 1110 Data8 T = 7 F R

É realizada uma soma entre o conteúdo do Acumulador com o byte Data8 e o flag CY.

Exemplo:

Instrução Código (Binário) Código (Hexa)

ACI 45 1100 1110

0010 0101

CE 45

ANTES: (A) = 21H (2033) = 45H CY=1 APÓS: (A) = 67H (F) = 02H

39 - DAD PR

DoubleRegister Add (H)(L) = (H)(L) + (PR) CY 00 PR 1001 T = 10 F B B

(8)

o resultado é retornado ao par HL. O flag CY é setado se houver um VAI UM na soma de dupla precisão; os demais flags não são alterados.

Exemplo:

Instrução Código (Binário) Código (Hexa)

DAD D 00 01 1001 19 ANTES: (H) = 21H (L) = 45H (D) = 15H (E) = 18H APÓS: (H) = 36H (L) = 5DH (D) = 15H (E) = 18H

40 - DAA

Decimal Adjust Accumulator

Ajuste Decimal do Acumulador Z, S, P, CY, AC

0010 0111 T = 4 F

O byte do acumulador se ajusta de modo a formar dois dígitos de 4 bits, codificados em BCD segundo o seguinte procedimento:

1- Se o valor dos 4 bits menos significativos são maior que 9 ou o flag AC está setado, o valor 06H é somado ao acumulador;

2- Se o valor dos 4 bits mais significativos do acumulador é maior que 9 ou se o flag CY está setado, soma-se 60H ao acumulador.

Exemplo:

Instrução Código (Binário) Código (Hexa)

DAA 0010 0111 27

ANTES: (A) = 12 AC = 1 CY = 0 APÓS: (A) = 18H (F) = 06H

Subtração

Todas as subtrações são realizadas via adição complemento de 2.

41 - SUB r

Subtract Register from Acc.

(A) = (A) - (r) Z, S, P, AC, CY

1001 0 FFF T = 4 F

É realizada uma subtração entre o conteúdo do Acumulador e o conteúdo do registrador r.

Exemplo:

Instrução Código (Binário) Código (Hexa)

SUB B 1001 0000 90

ANTES: (A) = 21H (B) = 31H APÓS: (A) = F0H (F) = 97H

42 - SUB M

SubtractMemory fromAcc.

(A) = (A) - ((H)(L)) Z, S, P, AC, CY 1001 0110 96H T= 7 F R

É realizada uma subtração entre o conteúdo do Acumulador e o conteúdo da memória endereçada pelo par HL.

Exemplo:

Instrução Código (Binário) Código (Hexa)

SUB M 1001 0110 96

ANTES: (H) = 20H (L) = 33H (A) = 21H (2033) = FFH

APÓS: (A) = 02H (F) = 03H

43 - SUI Data8

Subtract Immediate from Acc.

(A) = (A) - Data8 Z, S, P, AC, CY

1101 0110 Data8

T = 7 F R

(9)

44 - SBB r

Subtract Register with CY from Acc.

(A) = (A) - (r) - CY Z, S, P, AC, CY

1001 1 FFF T = 4 F

É realizada uma subtração entre o conteúdo do Acumulador e o conteúdo do registrador r e o flag CY.

Exemplo:

Instrução Código (Binário) Código (Hexa)

SBB B 1001 1000 98

ANTES: (A) = 21H (B) = 31H CY = 1 APÓS: (A) = FEH (F) = 83H

45 - SBB M

Subtract Memory with CY from Acc.

(A) = (A) - ((H)(L)) - CY Z, S, P, AC, CY 1001 1110 9EH T = 7 F R

É realizada uma subtração entre o conteúdo do Acumulador e o conteúdo da memória endereçada pelo par HL e o flag CY.

46 - SBI Data8

Subtract Immediate with CY from Acc.

(A) = (A) - Data8 - CY Z, S, P, AC, CY

1101 1110 Data8

T = 7 F R

É realizada uma subtração entre o conteúdo do Acumulador e o byte Data8 e o flag CY.

INCREMENTO

47 - INR r

Increment Register (r) = (r) + 1 Z, S, P, AC 00 DDD 100 T = 4 F

É realizada um incremento no conteúdo do registrador r. Apenas o flag CY não é afetado.

Exemplo:

Instrução Código (Binário) Código (Hexa)

INR B 00 00 0100 04 ANTES: (B) = 31H CY = 0 APÓS: (B) = 32H (F) = 02H

48 - INR M

Increment Memory ((H)(L)) = ((H)(L)) +1 Z, S, P, AC 0011 0100 34H T = 10 F R W

É realizado um incremento no conteúdo do endereço formado pelo par HL.

Exemplo:

Instrução Código (Binário) Código (Hexa)

INR M 0011 0100 34

ANTES: (H) = 20H (L) = 33H (2033) = F2H CY = 0

APÓS: (2033) = F3H (F) = 06H

49 - INX PR

IncrementExtendedRegister

(PR) = (PR) + 1 00 SR 0011 T = 6

S

É realizado um incremento no conteúdo do par de registradores PR. Nenhum flag é afetado.

Exemplo:

Instrução Código (Binário) Código (Hexa)

INX B 1100 0110 03

(10)

DECREMENTO

50 - DCR r

Decrement Register (r) = (r) - 1 Z, S, P, AC 00 DDD 101 T = 4 F

É realizado um decremento no conteúdo do registrador r. Apenas o flag CY não é afetado.

51 - DCR M

Decrement Memory ((H)(L)) = ((H)(L)) -1 Z, S, P, AC 0011 0101 35H T = 10 F R W

É realizado um decremento no conteúdo do endereço formado pelo par HL. Apenas o flag CY não é afetado.

52 - DCX PR

Decrement ExtendedRegister

(PR) = (PR) - 1 00 SR 1011 T = 6

S

É realizado um decremento no conteúdo do par de registradores PR. Nenhum flag é afetado.

Referências

Documentos relacionados

Era de conhecimento de todos e as observações etnográficas dos viajantes, nas mais diversas regiões brasileiras, demonstraram largamente os cuidados e o apreço

Dentro de uma estrutura atuarial, a plataforma do Tesouro Direto é utilizada como fundamento para a implementação de um sistema apto a proteger os valores dos participantes,

Considerando a amplitude da rede mundial de computadores (internet) e a dificuldade em controlar as informações prestadas e transmitidas pelos usuários, surge o grande desafio da

Como já foi dito neste trabalho, a Lei de Improbidade Administrativa passa por uma releitura doutrinária e jurisprudencial, visando delimitar de forma precisa os tipos ímprobos,

O tema proposto neste estudo “O exercício da advocacia e o crime de lavagem de dinheiro: responsabilização dos advogados pelo recebimento de honorários advocatícios maculados

Quanto às suas desvantagens, com este modelo, não é possível o aluno rever perguntas ou imagens sendo o tempo de visualização e de resposta fixo e limitado;

Os principais resultados obtidos pelo modelo numérico foram que a implementação da metodologia baseada no risco (Cenário C) resultou numa descida média por disjuntor, de 38% no

A acção do assistente social não se fundamenta em intuições ou suposições sobre a leitura e diagnóstico do problema em análise /estudo, suporta-se no método que orienta