Você está na página 1de 41

Aula 21 Conjunto de Instrues Exemplos

Sistemas de Computao I
Centro de Cincias Computacionais C3 - FURG

Intel 8080 Formato Geral de dados

A memria organizada em clulas de 8 bits (1 byte). Cada clula identificado por um cdigo composto por 16 bits - o endereo da clula,

geralmente representado na base hexadecimal, valor entre 0000 e FFFF. pode enderear 65.536 bytes de memria, compostas de memria ROM e memria de leitura / escrita

dados armazenados na forma de palavras com 8 bits.

Intel 8080 Formato de Instrues


As instrues podem ter 1, 2 ou 3 bytes, As instrues de 1 byte no tem operando.

As instrues de 2 bytes tem como operando um dado de 8 bits.

As instrues de 3 bytes tem como operando um endereo ou um dado de 16 bits.

Intel 8080 Armazenamento de Instrues


Em uma instruo de 3 bytes em que o operando um endereo, o endereo armazenado sempre com o byte menos significativo na posio seguinte do opcode e o byte mais significativo do endereo no 2 byte aps o opcode. So ocupadas 3 clulas consecutivas da Memria Principal do Intel 8080

Modos de Endereamento do 8080

Cdigo de Operao identifica o modo de endereamento atravs de seu mnemnico e do correspondente cdigo binrio. Os registradores envolvidos em instrues que usam os modos de endereamento direto por registrador e indireto por registrador so definidos atravs de determinados bits no opcode.

MODOS DE ENDEREAMENTO

Implcito Imediato Direto Registrador Direto Registrador Indireto

Modo Implcito do 8080

A funo da instruo traz implcito o endereamento. No h operando. Ocupam apenas 1 byte, sendo buscadas em apenas 1 acesso memria.

Instrues com modo Implicito

STC (set carry flag) - "seta" o bit de carry e CMC (complement carry) - complementa o valor do bit de carry; - o operando implcito o carry flag. RAL (rotate accumulator left), RAR (rotate accumulator right) - instrues de deslocamento de bits, esquerda e direita - o operando implcito o acumulador; RLC (rotate accumulator left through carry) e RRC (rotate accumulator right through carry) - instrues de deslocamento de bits, esquerda e direita, atravs do carry flag - os operandos implcitos so o acumulador e o carry flag; DAA (decimal adjust accumulator) - instruo para aritmtica em BCD - o operando implcito o acumulador (usa tambm o flag AC - auxiliary carry).

Modo Imediato

Vantagem

operando obtido durante o ciclo de busca, em apenas 1 acesso (quando o operando de apenas 1 byte, tal como um dado de 8 bits) ou em 2 acessos (quando o operando de 2 bytes, tal como um dado de 16 bits ou um endereo). No necessrio fazer nenhum acesso MP no ciclo de execuo, o que acarreta maior rapidez na execuo.

Obs.: Algumas instrues no modo imediato (geralmente instrues que manipulam endereos de memria) buscam endereos ou dados de 2 bytes.

Modo Imediato

Desvantagens O tamanho do dado fica limitado ao nmero de bits do operando (campo operando da instruo).

o campo Operando tem 8 bits, portanto o maior valor deste campo ser limitado a 28 = 256.

no permite flexibilidade para alterar dados que variam a cada execuo do programa, portanto no adequado para variveis repetidamente operadas com diferentes valores a cada execuo do programa.

Modo Imediato

Utilizao Inicializao de contadores Constantes Armazenamento de ponteiros em registradores Indicao de quantidade de posies em operaes de deslocamento de bits (multiplicao e diviso)

Exemplo de instruo no Modo Imediato


Exemplo 1 - Instruo ADI ADI data ==> ACC <--- ACC + Op
Soma o valor (hexadecimal) contido no operando ao acumulador e coloca o resultado no acumulador.

Valor (hexadecimal) do cdigo da operao: C6 N de Bytes ocupados pela instruo: 2 bytes Ciclos de acesso da instruo: 2 (leitura)
N 1 2 Descrio Busca do Opcode Busca do Operando Acesso Ciclo Leitura Busca Leitura Busca

Endereamento: imediato Flags setados: Z, S, P, CY, AC

Ex.: Considerando o acumulador contendo inicialmente o valor 7AH, qual ser o valor do acumulador aps a execuo da instruo ADI dado (add immediate) ==> ACC <--- ACC + Op (soma o valor hexadecimal do operando ao acumulador)

Exemplo 2 - Instruo JMP JMP endereo (jump) ==> PC <--- Op =>


Carrega o endereo (contido nos bytes 2 e 3 da instruo) no PC

Valor (hexadecimal) do cdigo da operao: C3 N de Bytes ocupados pela instruo: 3 bytes Ciclos de acesso da instruo: 3 (leitura)
N 1 2 3 Descrio Busca do Opcode Busca do 1 byte do Operando Busca do 2 byte do Operando Acesso Leitura Leitura Leitura Ciclo Busca Busca Busca

Endereamento: imediato Flags setados: nenhum

Obs.Importante: O byte menos significativo do operando armazenado na posio de memria que segue o opcode e o byte mais significativo do operando na segunda posio de memria que segue o opcode. JMP 1000H ==> CI<--- 1000H ==> causa um desvio para o endereo 1000 (hexadecimal)

Exemplo 3 - Instruo de Desvio Conditional Jcondition endereo ==> if CCC, PC <--- endereo
Se a condio estabelecida for satisfeita, copia o operando (bytes 2 e 3 da instruo) para o PC.

Valor (hexadecimal) do cdigo da operao: depende da condio N de Bytes ocupados pela instruo: 3 bytes Ciclos de acesso da instruo: 3 (leitura)
N 1 2 3 Descrio Acesso Ciclo Busca do Opcode Leitura Busca Busca do 1 byte do Operando Leitura Busca Busca do 2 byte do Operando Leitura Busca

Endereamento: imediato Flags setados: nenhum.

CONDIO NZ - no zero (Z=0) Z - zero (Z=1) NC - no carry (C=0) C - carry (C=1) PO - paridade par (P=0) PE - paridade mpar (P=1) P - positivo (P=0) M - negativo (P=1)

CDIGO 000 001 010 011 100 101 110 111

Examplo 4 - Instruo Move Imediato MVI R, dado (move immediate) ==> R <--- Op
Move o valor do operando para o registrador R

Valor (hexadecimal) do cdigo da operao: depende do registrador N de Bytes ocupados pela instruo: 2 bytes Ciclos de acesso da instruo: 2 (leitura)
N 1 2 Descrio Busca do Opcode Busca do Operando Acesso Leitura Leitura Ciclo Busca Busca

Endereamento: imediato Flags setados: nenhum

MVI C, C1H ==> C <--- C1H

Exemplo 5 - Instruo LXI LXI data16 (load register pair immediate) ==> RP <--- Op
Carrega o valor do operando (dois bytes) em um par de registradores, sendo que o byte 3 carregado em Rhigh (byte mais significativo do par de registradores de destino) e o byte 2 carregado em Rlow (byte menos significativo).

Valor (hexadecimal) do cdigo da operao: depende do registrador N de Bytes ocupados pela instruo: 3 bytes Ciclos de acesso da instruo: 3 (leitura).
N 1 2 3 Descrio Busca do Opcode Busca do 1 byte do Operando Busca do 2 byte do Operando Acesso Leitura Leitura Leitura Ciclo Busca Busca Busca

Endereamento: imediato

LXI M, 31FFH ==> M <--- 31FF (carrega o valor hexadecimal 31FF no Par de Registradores HL)

Observaes

No Intel 8080, as instrues com endereamento imediato so quase sempre codificadas com mnemnicos de 3 letras terminados pela letra I. Exemplos

instruo de soma ==> endereamento direto = ADD instruo de soma ==> endereamento imediato = ADI; instruo move ==> endereamento direto = MOV instruo move ==> endereamento imediato = MVI; instruo load ==> endereamento direto = LDA instruo load ==> endereamento direto = LDI

Observaes 2

No Intel 8080, quase todas as instrues imediatas usam o acumulador como operador implcito. As excees so: MVI (move immediate) - pode mover o dado para qualquer registrador de trabalho ou posio de memria; LXI (load register pair immediate) - move um dado de 16 bits (geralmente um endereo) para qualquer par de registradores.

Modo Direto - 8080

Vantagens

Requer apenas uma referncia memria para busca do dado (alm de uma para a busca da instruo), sendo mais rpido que o modo indireto. Limitao do endereo da MP que pode ser indicado pelo tamanho do campo operando. mais lento que o modo imediato.

Desvantagens

Utillizao

Quando o dado varia de valor a cada execuo.

Exemplo 1 - Instruo LDA LDA endereo (load accumulator direct) ==> ACC <--- (Op)
Carrega o contedo da posio de memria indicada pelo operando (bytes 2 e 3 da instruo) no acumulador (o operando indica um endereo na memria).

Valor (hexadecimal) do cdigo da operao: 3A N de Bytes ocupados pela instruo: 3 bytes Ciclos de acesso da instruo: 4 (leitura)
N 1 2 3 4 Descrio Busca do Opcode Busca do 1 byte do Operando Busca do 2 byte do Operando Busca do Dado Acesso Leitura Leitura Leitura Leitura Ciclo Busca Busca Busca Execuo

Endereamento: direto Flags setados: nenhum

LDA 978A ===> ACC <--- (978A) = carrega no acumulador o contedo da posio de memria 978A

Exemplo 2 - Instruo LHLD LHLD endereo ==> (load H and L direct) H <--- (Op + 1)

L <--- (Op)

O contedo da posio de memria indicada pelo operando carregado no registrador L; o contedo da posio de memria seguinte indicada pelo operando carregado no registrador H.

Valor (hexadecimal) do cdigo da operao: 2A N de Bytes ocupados pela instruo: 3 bytes Ciclos de acesso da instruo: 5 (leitura)
N Descrio 1 Busca do Opcode 2 Busca do 1 byte do Operando 3 Busca do 2 byte do Operando 4 Busca do 1 byte do dado (endereo) 5 Busca do 2 byte do dado (endereo) Endereamento: direto Flags setados: nenhum Acesso Leitura Leitura Leitura Leitura Leitura Ciclo Busca Busca Busca Execuo Execuo

LHLD 1000H ==> L <--- (1000H) e H <--- (1001H) ===> carrega o contedo das posies 1000H e 1001H no par HL (ver ilustrao abaixo).

Exemplo 3 - Instruo SHLD SHLD endereo ==> (store H and L direct) (Op) <--- L (Op + 1) <--- H Valor (hexadecimal) do cdigo da operao: 22 N de Bytes ocupados pela instruo: 3 bytes Ciclos de acesso da instruo: 5, sendo 3 (leitura) e 2 (escrita)
N Descrio 1 Busca do Opcode 2 Busca do 1 byte do Operando 3 Busca do 2 byte do Operando 4 Grava o 1 byte do dado no endereo 5 Grava o 2 byte do dado no endereo Endereamento: direto Flags setados: nenhum Acesso Leitura Leitura Leitura Escrita Escrita Ciclo Busca Busca Busca Execuo Execuo

SHLD 7AC1H ==> (7AC1) <--- L e (7AC2) <--- H ===> move o contedo do Registrador L para a posio de memria indicada pelo operando e o contedo do Registrador H para a posio de memria seguinte

Modo Indireto Por Registrador

Vantagens

Maior velocidade / rapidez de execuo -. Economia de espao de armazenamento de instruo No so adequados para transferncia de variveis da MP para ULA. Pequeno nmero de registradores

Desvantagem

Utilizao

Implementao de contadores. Identificao do registrador envolvido na operao faz parte do prprio opcode.

Identificao dos Registradores no Cdigo de Operao


SSS representa o "Registrador de Origem" DDD o "Registrador de Destino RP representa "Par de Registradores".
SSS ou DDD ACC (ou A) B C D E H L Valor 111 000 001 010 011 100 101 RP B D H (ou M) SP Valor 00 01 10 11

Exemplos de Instrues no Modo por Registrador Direto Modo Registrador


Exemplo 1 - Instruo ADD r ADD r ("add register") ==> ACC <--- ACC + R Soma o valor contido no registrador R ao valor contido no acumulador.

Valor (hexadecimal) do cdigo da operao: depende do Registrador

N de Bytes ocupados pela instruo: 1 byte Ciclos de acesso da instruo: 1 (leitura)


N 1 Descrio Busca do Opcode Acesso Leitura Ciclo Busca

Endereamento: registrador direto Flags setados: Z, S, P, CY, AC

Exemplo 2 - Instruo DCR R DCR r ("decrement register") ==> R <--- R - 1


Decrementa o contedo do registrador R.

Valor (hexadecimal) do cdigo da operao: depende do Registrador N de Bytes ocupados pela instruo: 1 byte Ciclos de acesso da instruo: 1 (leitura)
N 1 Descrio Busca do Opcode Acesso Leitura Ciclo Busca

Endereamento: registrador direto Flags setados: Z, S, P, AC (CY no afetado)

Exemplo 3 - Instruo MOV R1, R2 MOV r1, r2 ("move register") ==> r1 <--- r2
O contedo do registrador r2 copiado para o registrador r1 .

Valor (hexadecimal) do cdigo da operao: depende dos Registradores envolvidos N de Bytes ocupados pela instruo: 1 byte Ciclos de acesso da instruo: 1 (leitura)
N 1 Descrio Busca do Opcode Acesso Ciclo Leitura Busca

Endereamento: registrador direto Flags setados: nenhum.

Exemplos de Instrues no Modo por Registrador Indireto


Exemplo 1 - Instruo ADD M ADD M ("add memory") ==> ACC <--- ACC + (HL) Soma o valor contido no endereo referenciado pelo par de registradores HL ao valor contido no acumulador.

Valor (hexadecimal) do cdigo da operao: 86 N de Bytes ocupados pela instruo: 1 byte Ciclos de acesso da instruo: 2 (leitura)
N 1 2 Descrio Acesso Ciclo Busca do Opcode Leitura Busca Busca o dado no endereo (HL) Leitura Execuo

Endereamento: por registrador, indireto Flags setados: Z, S, P, CY, AC

Exemplo 2 Instruo INR M INR M (increment memory) ==> (HL) <--- (HL) + 1 Incrementa o contedo da posio de memria indicada pelo par de registradores HL Valor (hexadecimal) do cdigo da operao: 34 N de Bytes ocupados pela instruo: 1 byte Ciclos de acesso da instruo: 3 (sendo 2 de leitura e 1 de escrita)
N 1 2 3 Descrio Busca do Opcode Busca o dado no endereo (HL) Grava o resultado - dado + 1 - em (HL) Acesso Leitura Leitura Escrita Ciclo Busca Execuo Execuo

Endereamento: por registrador, indireto Flags setados: Z, S, P, AC (CY no afetado)

Exemplo 3 Instruo MOV M, R MOV M, r (move to memory) ==> (HL) <--- r


O contedo do registrador r copiado para a posio de memria cujo endereo est no registrador M

Valor (hexadecimal) do cdigo da operao: depende do registrador envolvido N de Bytes ocupados pela instruo: 1 byte Ciclos de acesso da instruo: 2 (sendo 1 de leitura e 1 de escrita)
N 1 2 Descrio Acesso Ciclo Busca do Opcode Leitura Busca Grava o dado no endereo (HL) Escrita Execuo

Endereamento: por registrador, indireto Flags setados: nenhum

Combinaes de Modos de Endereamento

Algumas instrues usam uma combinao de modos de endereamento. Por exemplo, a instruo CALL usa uma combinao do endereamento direto (ou imediato) com endereamento por registrador indireto. endereamento direto - especifica o endereo da sub-rotina desejada endereamento por registrador indireto - o Ponteiro da Pilha

Combinaes de Modos de Endereamento Exemplos


Exemplo - Instruo CALL endereo CALL endereo ==>

(SP - 1) <--- PCH ==> o valor contido no byte de mais alta ordem do Program Counter (modo de endereamento: registrador direto) transferido para o endereo de memria igual ao valor contido no (Registrador SP) menos 1 (modo de endereamento: registrador indireto) (SP - 2) <--- PCL ==> o valor contido no byte de mais baixa ordem do Program Counter (modo de endereamento: registrador direto) transferido para o endereo de memria igual ao valor contido no (Registrador SP) menos 2 (modo de endereamento: registrador indireto) ;

Combinaes de Modos de Endereamento Exemplos 2


Exemplo - Instruo CALL endereo CALL endereo ==>

SP <--- SP - 2 ==> o valor contido no Registrador SP decrementado de 2 unidades (modo de endereamento: implcito/imediato); PC <--- endereo ==> o valor do operando (bytes 2 e 3 da instruo) (modo de endereamento: imediato) transferido para o Program Counter (modo de endereamento: registrador direto).

A instruo CALL copia (push) o contedo corrente do CI para a posio da MP especificada pelo ponteiro da pilha (Stack Pointer) e transfere o controle do programa para a instruo cujo cdigo de operao est armazenado na posio de memria apontada pelo operando. Valor (hexadecimal) do cdigo da operao: CD N de Bytes ocupados pela instruo: 3 bytes Ciclos de acesso da instruo: 5 (sendo 3 de leitura e 2 de escrita) A instruo CALL requer 5 acessos memria, sendo 3 para buscar a instruo (opcode mais operando de 2 bytes) e mais 2 para salvar ("push") o contedo (2 bytes) do PC (Program Counter) para o ponteiro da pilha (Stack Pointer).

N Descrio Acesso Ciclo 1 Busca do Opcode Leitura Busca 2 Busca do 1 byte do Operando Leitura Busca 3 Busca do 2 byte do Operando Leitura Busca 4 Grava o byte de menor ordem do endereo da prxima instruo (contido no PCL) no endereo indicado por SP - 1 Escrita Execuo 5 Grava o byte de maior ordem do endereo da prxima instruo (contido no PCH) no endereo indicado por SP - 2 Escrita Execuo

Modos de Endereamento: implcito / imediato / registrador direto / registrador indireto Flags setados: nenhum