Direccionamiento basado en implícito
Una dirección basada implícita se especifica como un operando para una instrucción omitiendo el operando RA y escribiendo el pseudo-op .using en algún momento antes de la instrucción.
Una dirección basada en implícita se especifica como un operando para una instrucción omitiendo el operando RA y escribiendo el pseudo-op .using en algún momento antes de la instrucción. Después de ensamblar los pseudo-ops .using y .drop adecuados, el ensamblador puede determinar qué registro utilizar como registro base. En tiempo de ejecución, el procesador calcula la dirección efectiva como si la base se hubiera especificado explícitamente en la instrucción.
Las direcciones basadas implícitas pueden ser reubicables o absolutas, en función del tipo de expresión utilizada para especificar el contenido del operando RA en tiempo de ejecución. Normalmente, el contenido del operando RA se especifica con una expresión reubicable, haciendo así una dirección basada implícita reubicable. En este caso, cuando se reubica el módulo de objeto generado por el ensamblador, sólo cambiará el contenido del registro base RA . El desplazamiento sigue siendo el mismo, por lo que D(RA) sigue apuntando a la dirección correcta después de la reubicación.
Una dsect es una sección de control de referencia que le permite describir el diseño de los datos en un área de almacenamiento sin reservar realmente ningún almacenamiento. También se puede realizar una dirección basada implícita especificando el contenido de RA con un nombre dsect o una etiqueta dsect, asociando así una base con una sección ficticia. El valor del contenido de RA se resuelve en tiempo de ejecución cuando se crea una instancia de dsect.
Si el contenido del operando RA se especifica con una expresión absoluta, se crea una dirección basada en implícita absoluta. En este caso, el contenido de RA no cambiará cuando se reubique el módulo de objeto.
El ensamblador sólo da soporte al direccionamiento basado en implícito reubicable.
Realice lo siguiente cuando utilice el direccionamiento basado en implícito:
- Escriba una sentencia .using para indicar al ensamblador que uno o más registros de propósito general (GPR) se utilizarán ahora como registros base.
- En esta sentencia .using , indique al ensamblador el valor que contendrá cada registro base en la ejecución. Hasta que encuentre una pseudo-op .drop , el ensamblador utilizará este valor de registro base para procesar todas las instrucciones que requieran una dirección basada.
- Cargue cada registro base con el valor especificado anteriormente.
Para el direccionamiento basado en implícito, el operando RA siempre se omite, pero el operando D permanece. El operando D puede ser una expresión absoluta, una expresión relativa a TOC, una expresión reubicable o una expresión externa restringida.
Notas:
- Cuando el operando D es una expresión absoluta o una expresión externa restringida, el ensamblador siempre lo convierte al formato D(0), por lo que la pseudo-op .using no tiene ningún efecto.
- Los pseudo-ops .using y .drop sólo afectan a las direcciones basadas.
.toc T.data: .tc data[tc],data[rw] .csect data[rw] foo: .long 2,3,4,5,6 bar: .long 777 .csect text[pr] .align 2 l 10,T.data(2) # Loads the address of # csect data[rw] into GPR 10. .using data[rw], 10 # Specify displacement. l 3,foo # The assembler generates l 3,0(10) l 4,foo+4 # The assembler generates l 4,4(10) l 5,bar # The assembler generates l 5,20(10)