Instrucoes de Armazenamento e permuta

Load

Um grupo de instruções básicas do microprocessador Z80 60 carrega­mento (LOAD) de um registo ou de uma célula de memória, a partir de outro registo ou de uma posição de memória.

Todas as instruções deste grupo são identificadas pela mnemónica LD, especificando-se em seguida 0 destino e a fonte do armazena­mento. Convém salientar que 0 destino da informação se encontra sem­pre a seguir S mnemónica LD: LD destino  fonte. Na mnemónica a seta é substituída por uma virgula e a fonte e 0 destino são formatados conforme 0 endereçamento.

A notação que se utiliza para especificar as instruções é a hexadeci­mal, convertendo 0 micro-computador este valor para binário.

Por exemplo, a instrução de carregamento do registo C a partir do registo B usa 0 código de operação 48H1. Este valor será descodificado pelo micro-computador para 0100 1000 em binário.

Como já foi referido a instrução de LOAD pode utilizar diversos tipos de endereçamento. Por exemplo, a fonte pode ser endereçada por re­gisto e 0 destino por endereçamento indirecto. Especificando, a instru­ção

LD (HL), D

carrega a posição de memória endereçada pelo par HL com 0 conteúdo do registo 0.0 parêntesis em redor de HL significa que 0 conteúdo deste par de registos é utilizado como um ponteiro para a memória. 0 byte mais significativo (high byte) do endereço esta armazenado no re­gisto H, enquanto 0 byte menos significativo (Low byte) do endereço esta’ armazenado no registo L.

Como exemplo de endereçamento indexado vejamos 0 caso da instrução cuja mnemónica é:

LD E, (IX, 8)

Esta instrução faz com que 0 registo E seja carregado com 0 valor armazenado na posição de memória, endereçada pelo conteúdo do re­gisto de índice IX, adicionado com 0 valor 8 (fig. 12). 0 código de operação é formado por dois bytes e 0 operando por um byte.

 

 

 

 

As instruções de carregamento, utilizando endereçamento directo, 550 também instruções de três bytes, em que 0 código de operação é representado pelo primeiro byte e o endereço pelos dois seguintes. Por  exemplo, a instrução de carregamento do acumulador com 0 conteúdo da posição de memória 6F32H terá a mnemónica:

LD A, (6F32H)

 

e a sequência dos bytes na memória 6:

 

Note-se que 0 byte de menor ordem do endereço é sempre 0 primei­ro operando.

A instrução de carregamento (LOAD) imediato dos registos CPR de oito bits ocupa dois bytes. A instrução de carregamento do registo H com 0 valor 36 H será escrita:

LD H, 36 H

e a sequência de bytes na memória será:

 

 

A instrução de carregamento de uma céIula de memória utilizando endereçamento indexado para 0 destino (céIuIa de memória) e endere­ço imediato para a fonte, requer quatro bytes. Por exemplo, utilizando 0 registo de índice IX:

 

LD (IX - 15), 21 H (15 na base 10)

apareceria na memória de programa a seguinte sequência:

 

 

Note-se que com qualquer endereçamento indexado a base de endereço (neste caso F1) sucede imediatamente 0 código de operação.

Apresentaram-se exemplos da instrução LD (LOAD) para diferentes modos de endereçamento. De uma forma sistemática apresentam-se em seguida as mnemónicas e códigos de operação das diversas instruções LD.

 

LD r,s carregar 0 registo r com 0 conteúdo do registo S; é uma instrução de um byte. Os registos fonte (source) e destino fazem parte do código de operação. A tabela 1 resume Os códigos para as varias transferências entre registos.

Tabela 1

LOAD REGISTO GPR COM DADOS (n):

 

 

LD r, n carregar 0 registo r com o valor n é uma instrução de dois bytes. 0 registo destino esta contido nos bits 3, 4 e 5 do código de operação e 0 valor a transferir para 0 registo é indicado no segundo byte. A tabela 2 indica os códigos para os sete destinos possíveis.

 

Tabela 2

 

LOAD ENTRE REGISTOS DE USO GERAL E A MEMÓRIA. (HL)  r ; r  (HL):

 

 

O conteúdo da céIuIa de memória cujo endereço se encontra no par HL é armazenado no registo r.

 

 

O conteúdo do registo r é armazenado na célula de memória endereçada pelo par de registos HL.

Estas duas instruções permitem aos registos GPR trocar informações com a memória exterior. São instruções de um byte.

Tabela 3

 

LOAD ENTRE 0 ACUMULADOR F A MEMORIA

O acumulador (A) tem possibilidade de comunicar com a memória ex­terior através de endereçamento indirecto, utilizando o conteúdo dos pares de registos de uso geral como endereço, ou através de endereçamento directo, isto é, o endereço da posição de memória encontra-se nos dois bytes seguintes do código de operação:

 

 

Com esta instrução consegue-se que o acumulador seja carregado com o conteúdo da posição de memória endereçada pelo par BC ou DE

Se o endereçamento for directo, obtém-se o seguinte código de operação:

 

 

significando que o Conteúdo da posição de memória endereçada por (nn) deve ser colocado no acumulador.

Estas instruções dizem respeito ao carregamento do acumulador com o conteúdo de uma posição de memória. A operarão reciproca também é possível e apresenta os códigos descritos nos parágrafos seguintes.

 

Esta instrução armazena na posição de par BC ou DE o conteúdo do acumulador.

Se o endereçamento for directo, então a instrução ela própria contém o endereço da memória:

O conteúdo do acumulador é armazenado na célula (nn). A tabela 4 sintetiza e apresenta a notação hexadecimal deste grupo de instruções.

 

Tabela 4

LOAD DE UM BYTE DE DADOS NA MEMÓRIA: (HL)  n.

 

 

O segundo byte da instrução é armazenado na posição de memória endereçada pelo conteúdo do par de registos HL.

O código hexadecimal desta instrução é o seguinte:

 

 

LOAD INDEXADO ENTRE REGISTOS E Memória

 

Este grupo de instruções utiliza Os registos de índice IX e IY para o endereçamento indexado das posições de memória.

 

 

Esta instrução carrega 0 registo r com 0 conteúdo da posição de memória cujo endereço 60 conteúdo do registo IX acrescentado com C valor d: ADDRESS = (IX + d). E’ uma instrução de três bytes, sendo sempre 0 Último byte 0 portador do valor d.

 

 

Esta instrução é idêntica a anterior, tendo apenas a diferença de 0 registo de índice utilizado ser 0 IY. Note-se que s6 0 bit 5 do primeiro byte sofreu modificação. 0 valor DDD continua a ter 0 mesmo signifi­cado da instrução anterior.

      

 

A instrução LD(IX + d),r permite carregar a posição de memória endereçada por (IX + d) com 0 valor do registo r 0 registo r é especifi­cado pelos bits 0, 1 e 2 do segundo byte do código de operação (555). Os valores que 555 pode tomar são idênticos aos de DDD.

 

 

Esta instrução idêntica à anterior, trocando-se a utilização do re­gisto de índice IX pelo registo lY Mais uma vez, Os valores pare SSS são idênticos aos de DDD, em que SSS representa o registo cujo conteúdo vai ser armazenado na posição de memória  (IY + d).

 

LOAD INDEXADO DE DADOS NA MEMÓRIA

Deste grupo fazem parte duas instruções utilizando os registos IX e lY São instruções de quatro bytes, em que o quarto byte contém a palavra de dados a armazenar na célula de memória endereçada por (IX + d) ou (IY + d).

 

Na tabela 5 encontram-se Os códigos hexadecimais das instruções que utilizam Os registos de índice: LOAD indexado entre registos e memória e LOAD indexado de dados na memória.

Tabela 5

Nenhuma das instruções de LOAD referidas afectam as flags. Para terminar a apresentação das instruções de LOAD que movimentam dados com 0 comprimento de oito bits falta referir quatro instruções que realizam a troca de dados entre 0 acumulador (A) e Os registos I e R. Estas instruções são de dois bytes e têm 0 formato especificado na tabela 6.

Tabela 6

 

As instruções LD A, I e LD A, R afectam 0 byte de flags do seguinte modo:

->Flag afectada do acordo com 0 resultado da operação

 0 ->Flag reset

 · -> Flag não afectada

 1FF ->Conteúdo do flip-flop do permissão do interrupção

 X ->Bit não utilizado polo registo do flags

 

O microprocessador Z80 também permite a transferência de dados com 0 comprimento de 16 bits entre Os registos e a memória. Este conjunto de instruções manipula Os pares de registos GPR (8 bits cada registo), Os registos de índice (16 bits cada registo), 0 ponteiro da pilha e dois bytes de dados na própria instrução (endereçamento imediato). A mnemónica das instruções de LOAD com 16 bits e idêntica & anterior com 8 bits (LD). A diferença reside no facto de a memória fonte e des­tino indicadas possuírem 16 bits. 0 código de operarão é alterado de modo a haver uma correcta identificação.

 

Load Imediato, ou Par de registos, de 16 Bits:

 

Esta instrução carrega um par de registos com o segundo e terceiro bytes. o segundo byte (nL representa o byte de menor ordem (low byte), enquanto o terceiro byte (nH) representa o de maior ordem (high byte).

O primeiro registo, do par de registos, é carregado sempre com o byte de maior ordem. Por exemplo, com respeito ao par BC o byte de maior ordem será armazenado em B: BCH = B. Se tomarmos como exemplo o par HL, o byte de menor ordem é armazenado no registo L: HLL = L.

Para o carregamento imediato dos registos de índice o Z80 utiliza uma instrução de quatro bytes:

Sendo Os registos de índice registos de 16 bits, Q byte nL é armaze­nado no byte de menor ordem do registo, enquanto 0 byte nH é armaze­nado no byte de major ordem.

Na tabela 7 encontram-se representados Os códigos hexadecimais destas instruções.

TABELA 7

 

LOAD DE REGISTOS, 0U PAR DE REGISTOS, COM 2 BYTES DA MEMÓRIA

A partir do endereço de uma posição de memória, a CPU carrega um registo de 16 bits, ou dois de B bits, com 0 conteúdo da céIuIa endereçada e da célula imediatamente a seguir. A célula cujo endereço é 0 operando da instrução é armazenada no byte de menor ordem, en­quanto a célula seguinte é armazenada no byte de maior ordem do re­gisto ou par de registos. Este conjunto de instruções engloba três tipos:

Ø      Carregamento do par HL; instrução de três bytes:

Ø      Carregamento de um par de registos dd; instrução de quatro bytes:

 

 

ddH: registo que contém o byte de major ordem. ddL: registo que contém o byte de menor ordem.

 

Ø      Carregamento dos registos de índice; instrução de quatro bytes:

 

 

dH: byte mais significativo de um registo de 16 bits. dL: byte menos significativo de um registo de 16 bits.

 

Na tabela 8 encontram-se representados Os códigos hexadecimais deste grupo de instruções:

 

Tabela 8

 

 

LOAD DE DUAS CÉLULAS DE MEMÓRIA COM 0 CONTEÚDO DE UM REGISTO OU PAR DE REGISTOS

Este conjunto de instruções é 0 reciproco do conjunto anterior. A posição de memória endereçada contém 0 byte menos significativo, en­quanto que a posição seguinte contém 0 byte mais significativo. Este conjunto de instruções também engloba três tipos:

 

 

 

Ø      Carregamento da memória a partir do par HL; instrução de três bytes:

 

 

Ø      Carregamento da memória a partir do par de registos dd; instrução de quatro bytes;

 

 

Ø      Carregamento da memória a partir dos registos de índice; instrução de quatro bytes:

 

nH e nL representam os dois bytes do endereço da posição de memória. Repare-se que esta célula vai armazenar o conteúdo do byte de menor ordem de um dos registos de índice. A célula imediatamente a seguir nH (nL+1) irá armazenar o byte mais significativo do registo.

Na tabela 9 encontram-se representados os códigos hexadecimais deste grupo de instruções.

 

Tabela 9

 

 

Para terminar o estudo das instruções de LOAD (LD) falta, apenas,

referir três instruções entre registos de 16 bits. Estas instruções promovem o carregamento do ponteiro da pilha, SP, com o conteúdo do par

HL e com o conteúdo dos registos de índice IX e IY:

 

 

 

As instruções LD que movem 16 bits do dados não afectam o registo das flags.

O estudo das instruções de carregamento dos registos do micropro­cessador fica completo com as instruções EX e EXX (EXCHANGE).

 

EXCHANGES (permuta do dados entre registos)

 

As instruções de EXCHANGE (permuta) permitem a troca de dados ar­mazenados em pares de registos, em posições de memória endereçadas pelo ponteiro da pilha (SP) e nos registos de índice.

 

 

 

 

Esta instrução coloca o conteúdo do par HL no tempo que o conteúdo do par DE é armazenado assim, uma troca de dados entre os dois pares de registos.

 

 

Neste caso, 60 acumulador A e 0 registo de flags F que permutam Os dados com Os registos A’ e F’

Os pares de registos BC, DE e HL trocam de conteúdo com Os pares do registos BC’, DE’ e HL’ através da instrução:

 

 

Segue-se um grupo de três instruções que permitem a troca de da­dos entre 0 par HL, Os registos IX e IY e duas posições de memória, sendo a primeira endereçada pelo registo SP e a segunda a posição imediatamente a seguir:

 

 

As instruções de EXCHANGE não alteram o conteúdo do registo de flags.

Na tabela 10 representam-se os códigos hexadecimais deste grupo de instruções.

 

<-- Voltar

Hosted by www.Geocities.ws

1