stringtranslate.com

Dirección constante

En IBM System/360 hasta la actualidad z/Architecture , una constante de dirección o "adcon" es un tipo de datos de lenguaje ensamblador que contiene la dirección de una ubicación en la memoria de la computadora . Una constante de dirección puede tener una longitud de uno, dos, tres o cuatro bytes, aunque una adcon de menos de cuatro bytes se utiliza convencionalmente para contener una expresión para un entero pequeño como una longitud, una dirección relativa o un valor de índice, y no representa una dirección en absoluto. Las constantes de dirección se definen utilizando una sentencia "DC" de lenguaje ensamblador.

Otros sistemas informáticos tienen funciones similares, aunque pueden utilizarse nombres diferentes.

Tipos de constantes de dirección

Un adcon normalmente almacena una dirección reubicable de cuatro bytes, sin embargo, es posible especificar la longitud de la constante. Por ejemplo, AL1(stuff)define un adcon de un byte, útil principalmente para constantes pequeñas con valores reubicables. Otros tipos de adcon también pueden tener una especificación de longitud.

Los adcons de tipo V almacenan una referencia externa que debe ser resuelta por el editor de enlaces .

Y se utiliza para direcciones de dos bytes (media palabra). Los adcons 'Y' pueden direccionar directamente hasta 32K bytes de almacenamiento y no se utilizan ampliamente ya que los primeros ensambladores System/360 no admitían un tipo de datos 'Y'. Los primeros sistemas DOS/360 y BOS/360 hacían un mayor uso de los adcons Y, ya que las máquinas en las que se ejecutaban estos sistemas tenían un almacenamiento limitado. La notación 'AL2( valor )' se suele utilizar ahora en lugar de 'Y( valor )' para definir un valor de 16 bits.

Las constantes de dirección Q no contienen direcciones reales sino un desplazamiento en la Sección ficticia externa  , similar a la Tabla de desplazamiento global de Linux (consulte el código independiente de la posición ). El editor de enlaces establece un adcon J para contener la longitud acumulada de la Sección ficticia externa, y en realidad no contiene una dirección.

Otros tipos de constantes de dirección son R , que tenía un significado especial para que TSS/360 direccionara el PSECT , y S , que almacena una dirección en formato de desplazamiento de base : un valor de 16 bits que contiene un número de registro general de cuatro bits y un desplazamiento de doce bits, el mismo formato en el que se codifican las direcciones en las instrucciones.

System z admite los tipos AD , JD , QD y VD , que representan versiones de 8 bytes (palabra doble) de los tipos 'A', 'J', 'Q' y 'V' para almacenar direcciones de 64 bits.

Reubicabilidad

El valor nominal de 'DC' es una lista de expresiones entre paréntesis. Las expresiones pueden ser absolutas , reubicables o complejas reubicables .

Una expresión absoluta se puede evaluar completamente en el momento del ensamblaje y no requiere un procesamiento adicional por parte del editor de enlaces. Por ejemplo, DC A(4900796)tiene un valor nominal absoluto.

Una expresión reubicable es aquella que contiene uno o más términos que requieren reubicación por parte del editor de enlaces cuando el programa está vinculado, por ejemplo, en el siguiente código 'ACON' tiene un valor nominal reubicable.

Laboratorio DC H'0' ...ACON DC A(LAB-4)

Una expresión reubicable compleja contiene términos que se relacionan con direcciones en diferentes módulos de origen. Por ejemplo, DC A(X-Y)donde 'X' e 'Y' están en módulos diferentes.

Ejemplos

Todos estos son adcon válidos:

ADCONS DS 0A una etiqueta alineada de longitud implícita 4 y longitud real 0 DC A(FIELDA) una palabra de 4 bytes, alineada, dirección absoluta de una variable 'FIELDA' DC AL4(FIELDA) como arriba pero no (necesariamente) alineado con un límite de palabra DC AL3(FIELDA) un equivalente de tres bytes del anterior (máximo 16 megabytes) DC AL2(FIELDA-TABLES) desplazamiento de dos bytes desde la etiqueta 'TABLES' hasta el inicio de 'FIELDA' DC AL2(L'FIELDA) una longitud de dos bytes del campo llamado 'FIELDA' (=26 en decimal) DC AL1(C'A') valor hexadecimal del carácter EBCDIC 'A' (=C1 en hexadecimal) DC A(FIELDA-C'A') una dirección absoluta alineada de 4 bytes --> 192 bytes antes del inicio de FIELDA DC A(*) una dirección de 4 bytes, alineada, de este adcon (* significa 'aquí') DC S(SUBRTNA) una dirección de base+desplazamiento alineada de 2 bytes de la etiqueta del programa "SUBRTNA" DC X'47F0',S(SUBRTNA) una instrucción de bifurcación incondicional (construida utilizando una constante de dirección de tipo S) DC SL2(SUBRTNA) una dirección de base+desplazamiento NO ALINEADA de 2 bytes de la etiqueta del programa "SUBRTNA"STAB DC SL2(SUBRTNA,SUBRTNB,SUBRTNC,.etc.) UNA MATRIZ DE ADCONS TIPO S no alineados *INDIRECTO DC A(*+4) dirección del siguiente byte después de este adcon (el adcon de tipo V) Dirección DC V(SUBRTNX) de un punto de entrada de subrutina externa DC AL1(−1) un valor negativo de un byte (= x'FF'), a menudo utilizado como delimitador de tabla.SUBRTNA DS 0Y inicio de la subrutina (interna) ALas instrucciones van aquí.TABLAS DS 0Y dirección base para la sección de tablas (alineada con media palabra)LONGITUDES DC Al2(5,27,56,83,127,32563) una matriz arbitraria de 6 x 2 bytes de longitud hexadecimal (definidas por sus valores decimales)PARMLIST DC A(HERE,THERE,EVWHERE,-1) una matriz de punteros alineados de 3 x 4 bytes a varias etiquetas de campo/puntos de entrada* con puntero final de valor negativo adicional (=X'FFFFFFFF')..ZERO_255 DC 256AL1(*-ZERO_255) una matriz de 256 valores hexadecimales de un solo byte 00-FF* ---------Fin de los ejemplos de adcon ---------------- *FIELDA DC C'ABCDEFGHIJKLMNOPQRSTUVWXYZ' un campo que contiene una cadena de caracteres (no un adcon) = AZ

Véase también

Enlaces externos