B_1.gif (1135 bytes)

B_chip03.gif (1739 bytes)

B_2.gif (1184 bytes)

       

Instrucción: LD

    

123.gif (858 bytes)

              
Función: Carga indirecta y pre-decremento
                               
Sintaxis: LD Rd, -Z
          

123.gif (858 bytes)

          

Código de Operación de 16 bit

                   

1001

000d dddd 0010
                    
                     
Operación: Z Ü Z - 1, Rd Ü (Z)
                
Operandos: 0 £ d £ 31
                        
Words: 1 (2 bytes)
                 
Ciclos: 2
                       
Flags: Ninguno
          
Program Counter: PC Ü PC + 1
     

Descripción: LD carga un byte indirecto sin desplazamiento del espacio de datos a un registro. Para los dispositivos con SRAM, el espacio de datos se compone del archivo de registro, memoria de I/O y SRAM interna (y SRAM externa si es aplicable). Para los dispositivos sin SRAM, el espacio de datos se compone sólo por el archivo de registro. La EEPROM tiene un espacio de dirección separado.

La posición de los datos es apuntado por el registro puntero Z (16 bits) en el archivo de registro. Se limita el acceso de memoria al segmento de datos de 64K bytes. Para acceder a otro segmento de datos en dispositivos con más de 64K bytes de datos de espacio, el RAMPZ en el registro en el área de I/O tiene que ser cambiado.

El registro puntero Z puede quedar inalterado por la operación, puede post-incrementarse o pre-decrementarse. En este caso se pre-decrementa. inalterado. Estas características están especialmente preparadas para el uso del puntero de pila del registro puntero Z, sin embargo como el registro puntero Z puede usarse para las llamadas indirectas a subrutinas, saltos indirectos y ver tablas, es a menudo más conveniente usar los punteros X o Y como un puntero de pila especializado.

Note que sólo el byte bajo del puntero Z se pone al día en dispositivos sin más de 256 bytes de espacio de datos. Para los tales dispositivos, el byte alto del indicador no es usado por esta instrucción y puede usarse para otros propósitos. El registro RAMPZ en el área de I/O se pone al día en dispositivos con más de 64K bytes de espacio de datos y el desplazamiento se agrega a la dirección de 24-bit en tales dispositivos.

El resultado de estas combinaciones es indefinido:

      
  • LD r30, Z+
  • LD r31, Z+
  • LD r30, -Z
  • LD r31, -Z
      
Ejemplo:
CLR r31    ; Borrar el byte alto de Z
LDI r30,$60 ; Poner el byte bajo de Z a $60
LD r0,Z+ ; Cargar r0 con la posición del espacio de datos $60
         ; (Z post-incrementado)
LD r1,Z ; Cargar r1 con la posición del espacio de datos $61
LDI r30,$63 ; Poner el byte bajo de Z a $63
LD r2,Z ; Cargar r2 con la posición del espacio de datos $63
LD r3,-Z ; Cargar r3 con la posición del espacio de datos $62
           ; (Z pre-decremento)
LDD r4,Z+2 ; Cargar r4 con la posición del espacio de datos $64
            
                                         

B_1.gif (1135 bytes)

B_3.gif (1151 bytes)

B_2.gif (1184 bytes)