Instrucoes de Transferencia de Blocos
As
instruções de transferência de blocos operam com três pares de registos: HL,
DE e BC. 0 par HL aponta a posição de memória fonte da operação. 0 par DE
aponta a posição de memória destino da operação. o par BC funciona como
contador de bytes.
Depois
de 0 programador ter inicializado estes três pares de registos qualquer uma das
quatro instruções de transferência de blocos pode ser utilizada.
LDI (Load and Increment)
A
instrução LDI muda um byte da posição de mem6ria endereçada pelo par HL
para a posição de mem6ria endereçada pelo par DE. Os registos HL e DE são
automaticamente incrementados apontando as posições seguintes. Ao mesmo tempo,
0 contador de bytes, par BC, e’ decrementado.

Esta
instrução é utilizada quando existe necessidade de mover blocos de dados mas,
entre cada byte mudado, são necessários outros procedimentos. Estes
procedimentos estão ligados, por exemplo, ao próprio software do programa. Na
figura 13 representa-se um troço de fluxograma que executa, servindo-se da
instrução LDI, a transferência de um bloco de N bytes da memória. os
registos HL e DE foram previamente carregados com os valores dos endereços de
memória e BC com 0 valor N.

(DE)
←(HL)
· - Flag não alterada
DE
←DE+1
x - Posição ignorada
HL ←HL+1 0 - Flag reset
BC ←BC-1 1 - Flag set
|
↕ |
=O se BC - 1=0 |
|
=1 se BC - 1¹ 0 |

Fig.13
LDIR (Load, increment and Repeat)
A
instrução LDIR é uma extensão da instrução LDl. A mesma operação de
carregamento e incremento é repetida até 0 conteúdo do registo BC (contador
de bytes) ser zero. Assim, uma simples instrução consegue mover um bloco de
dados de um local para outro.
Uma
vez que se utilizam registos de 16 bits, a dimensão do bloco tem um máximo de
64 Kbytes (1 k = 1024). 0 bloco pode ser movido de qualquer local da memória
para qualquer outro lugar. Note-se que Os blocos podem-se interpenetrar, uma vez
que não ha’ restrições para Os dados armazenados nos três pares de
registos.

Estas
duas instruções são similares As duas anteriores (LD®LDI;
LD®LDIR). A única diferença é que os pares de
registos HL e DE são decrementados após a transferência do byte. Neste caso,
a transferência de blocos começa Com 0 byte de endereço mais elevado.
Apenas
um bit do segundo byte do código de operação é alterado em relação As
instruções LDI e LDIR:

O
registo de flags é afectado da mesma forma que no caso das instruções LDI (LDD)
e LDIR (LDDR).
Na
tabela 11 apresenta-se um resumo dos códigos das instruções do transferência
do blocos.
As
instruções do procura de caracteres funcionam do modo semelhante as instruções
de transferência de blocos. Tal como estas, existem quatro instruções de
procura.

Tabela
11
CPI (Compare and Increment)
A
instrução de CPI compara 0 valor armazenado no acumulador com 0 conteúdo da
posição de memória endereçada pelo par do registos HL. 0 resultado da
comparação é armazenado num dos flip-flops do registo de flags, enquanto que
0 par HL é incrementado e 0 par BC é decrementado. Os pares de registos HL e
BC são utilizados da mesma maneira que nas instruções de transferência de
blocos. 0 par DE não é utilizado.

CPIR (Compare, Increment and Repeat)
A
instrução CPIR é meramente uma extensão da instrução CPI. A compararão
com 0 conteúdo do acumulador é repetida até ser encontrado um caracter que
iguale 0 do acumulador ou 0 conteúdo do par BC se tome igual a zero. Assim,
esta simples instrução pode percorrer toda a memória em busca de um caracter
de oito bits.

As
instruções CPD e CPDR são similares As instruções CPI e CPIR,
respectivamente. A única diferença reside no facto de CPD e CPDR decrementarem
0 par de registos HL depois de cada comparação, pesquisando a memória a
partir da posição mais elevada, armazenada em HL, para posições inferiores.
Apenas
um bit do segundo byte do código de operação é alterado em relação aos códigos
das instruções CPI e CPIR:
