Grupo de instrucciones de carga en registros
|
|
OBJETO: |
Carga el contenido del registro indicado por r' en el registro indicado por r. |
CODIGO MAQUINA: |
0 1 <--- r ---><--- r' ---> |
|
|
INDICADORES DE CONDICIÓN A LOS QUE AFECTA: |
Ninguno. |
CICLOS DE MEMORIA: |
1 |
CICLOS DE RELOJ: |
4 |
|
EJEMPLO:
El contenido de "A" no es significativo, ya que será destruido por la instrucción. Supongamos que el contenido de "B" es 43 en decimal, 2Bh en Hexa.
Ejecutamos la instrucción: LD A,B que carga en el registro "A", el contenido del registro "B":
Después de la ejecución, el registro "A" contendrá el valor que contenía el registro "B", mientras que el contenido de este último no se habrá modificado.
Contenido de "A" después de la ejecución:
Contenido de "B" después de la ejecución:
Como vimos en un capítulo anterior, los registros cumplen, en código máquina, una función similar a la de las variables en Basic, de forma que esta instrucción sería similar a la instrucción: LET A=B del Basic.
|
|
|
OBJETO: |
Carga en el registro indicado por "r" el valor numérico "n" de 8 bits y en el rango de 0 a 255. |
CODIGO MAQUINA: |
0 0 <--- r ---> 1 1 0 |
<-------- n --------> |
|
|
INDICADORES DE CONDICIÓN A LOS QUE AFECTA: |
Ninguno. |
CICLOS DE MEMORIA: |
2 |
CICLOS DE RELOJ: |
7 |
|
EJEMPLO:
Esta instrucción carga el valor 47 decimal (2Fh Hexa) en el registro "A", el contenido anterior de este registro se pierde al ejecutarse la instrucción.
La mayoría de los ensambladores, permiten introducir los números, tanto en decimal como en Hexa. Concretamente, en el caso del GENS 3, esta instrucción se podría escribir también como:
El signo "#" delante del número, indica al ensamblador que se trata de un número hexadecimal.
Instrucción.
LD A,47: |
0 0 1 1 1 1 1 0 |
0 0 1 0 1 1 1 1 |
|
|
Contenido de "A" después de la ejecución:
El equivalente en Basic de esta instrucción sería: LET A=47
|
|
|
OBJETO: |
Carga en el registro indicado por "r", el contenido del octeto de memoria cuya dirección es el valor del par de registros HL. |
CODIGO MAQUINA: |
|
INDICADORES DE CONDICIÓN A LOS QUE AFECTA: |
Ninguno. |
CICLOS DE MEMORIA: |
2 |
CICLOS DE RELOJ: |
7 |
|
EJEMPLO:
Esta instrucción carga en el registro "B", el contenido de la posición de memoria cuya dirección es el contenido del par de registros "HL". En este caso, estamos usando el modo de direccionamiento indirecto para especificar el "ORIGEN".
Supongamos que el registro "HL" contiene el valor 5F47h (24391), el registro "H" contendrá 5Fh (95) y el registro "L" contendrá 47h (71); observe que 95x256+71=24391.
La posición de memoria cuyo contenido vamos a cargar, será por tanto, la 5F47h. Supongamos que a su vez, esta posición de memoria contiene el número 55h (85). Veamos cómo se desarrollan los acontecimientos.
|
|
0 1 0 1 1 1 1 1 |
0 1 0 0 0 1 1 1 |
|
|
Contenido de la posición de memoria 5F47h:
Ejecutamos la instrucción:
Tras la instrucción, sólo se habrá modificado el contenido del registro "B".
Contenido del registro "B" después de la instrucción:
|
|
|
OBJETO: |
Carga en el registro indicado por "r", el contenido de la posición de memoria que resulta de sumar: el valor del registro índice "IX" con un entero de desplazamiento "d", el cual puede adquirir los valores desde -128 a +127. |
CODIGO MAQUINA: |
1 1 0 1 1 1 0 1 |
0 1 <--- r ---> 1 1 0 |
<-------- d --------> |
|
|
|
INDICADORES DE CONDICIÓN A LOS QUE AFECTA: |
Ninguno. |
CICLOS DE MEMORIA: |
5 |
CICLOS DE RELOJ: |
19 |
|
EJEMPLO:
En este caso, vamos a cargar el registro "C" con el contenido de la posición de memoria, cuya dirección es el resultado de sumar 10 al contenido del registro índice "IX".
Esta instrucción utiliza direccionamiento indexado para especificar el "ORIGEN"; obsérvese que el direccionamiento indexado es similar al indirecto, pero más sofisticado.
El contenido del registro "C" es irrelevante, ya que será destruido por la instrucción. Supongamos que el contenido de "IX" es 7743h (30531), por lo que accederemos a la posición de memoria 774Dh (30541). Supongamos también, que el contenido de esa posición de memoria es 41h (65).
Contenido de "IX":
(IX): |
0 1 1 1 0 1 1 1 |
0 1 0 0 0 0 1 1 |
|
|
Contenido de la posición de memoria 774Dh:
Ejecutamos la instrucción:
LD C,(IX+10): |
1 1 0 1 1 1 0 1 |
0 1 0 0 1 1 1 0 |
0 0 0 0 1 0 1 0 |
|
|
Contenido de "C" después de la ejecución:
Observe que la posición de memoria leída es 7743h+10, es decir 7743h+Ah=774Dh. Tanto el contenido de esta posición de memoria, como el del registro "IX", no han sido alterados.
|
|
|
OBJETO: |
Carga en el registro indicado por "r", el contenido de la posición de memoria que resulta de sumar: el valor del registro índice "IY" con el entero de desplazamiento "d", el cual puede tomar los valores desde -128 a +127. |
CODIGO MAQUINA: |
1 1 1 1 1 1 0 1 |
0 1 <--- r ---> 1 1 0 |
<-------- d --------> |
|
|
|
INDICADORES DE CONDICIÓN A LOS QUE AFECTA: |
Ninguno. |
CICLOS DE MEMORIA: |
5 |
CICLOS DE RELOJ: |
19 |
|
EJEMPLO:
De forma similar al ejemplo anterior, vamos a cargar el acumulador con el contenido de la posición de memoria direccionada por el índice "IY" menos 15.
Supongamos que el contenido de "IY" es 7743h (30531), direccionamos, por tanto la posición de memoria 7734h (30516), a la que a su vez, le suponemos un contenido de 42h (66).
(IY): |
0 1 1 1 0 1 1 1 |
0 1 0 0 0 0 1 1 |
|
|
Contenido de la posición de memoria 7734h:
Ejecutamos la instrucción:
LD A,(IY-15): |
1 1 1 1 1 1 0 1 |
0 1 1 1 1 1 1 0 |
1 1 1 1 0 0 0 1 |
|
|
Contenido de "A" después de la ejecución:
Obsérvese que hemos representado -15 como F1h, que es precisamente el complemento a 2 de 0Fh, es decir, el negativo de 15.
En el Z-80, el primer byte del código de operación de todas las intrucciones que utilizan el registro "IX" es DDh, y el de todas las que utilizan el "IY" es FDh.
|
|