En IBM System / 360 hasta la arquitectura z / actual , una constante de dirección o "adcon" es un tipo de datos en lenguaje ensamblador que contiene la dirección de una ubicación en la memoria de la computadora . Una constante de dirección puede tener uno, dos, tres o cuatro bytes de longitud, aunque un adcon de menos de cuatro bytes se usa 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 no representa una dirección en absoluto. Las constantes de dirección se definen mediante una declaración "DC" en lenguaje ensamblador .
Otros sistemas informáticos tienen instalaciones similares, aunque se pueden utilizar nombres diferentes.
Tipos de constantes de dirección
Un anuncio almacena normalmente 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 pequeñas constantes con valores reubicables. Otros tipos de adcon pueden tener una especificación de longitud similar.
Los anuncios de tipo V almacenan una referencia externa para ser resuelta por el editor de enlaces .
Y se utiliza para direcciones de dos bytes (media palabra). Los adcons 'Y' pueden abordar directamente hasta 32K bytes de almacenamiento, y no se usan 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 )' ahora se usa normalmente 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 compensación global de Linux (consulte el código independiente de la posición ). El editor de enlaces establece un J adcon para que contenga 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 que las direcciones están codificadas 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 contener direcciones de 64 bits.
Reubicabilidad
El valor nominal del '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 más procesamiento por parte del editor de vínculos. 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á enlazado, 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 de
Todos estos son anuncios 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 en el límite de una palabra DC AL3 (FIELDA) un equivalente de tres bytes de lo 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) a 2 bytes, base alineada + dirección de desplazamiento de la etiqueta del programa "SUBRTNA" DC X'47F0 ', S (SUBRTNA) una instrucción de bifurcación incondicional (construida usando una constante de dirección de tipo S) DC SL2 (SUBRTNA) una base NO ALINEADA de 2 bytes + dirección de desplazamiento de la etiqueta del programa "SUBRTNA"STAB DC SL2 (SUBRTNA, SUBRTNB, SUBRTNC, .etc.) UNA MATRIZ DE ADCONS DE TIPO S no alineados *INDIRECTA DC A (* + 4) dirección del siguiente byte después de este adcon (el adcon 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 '), que a menudo se usa como un delimitador de tabla.SUBRTNA DS 0Y inicio de la subrutina (interna) A. las instrucciones van aquí.TABLES DS 0Y dirección base para la sección de tablas (alineación de media palabra)LONGITUDES DC Al2 (5,27,56,83,127,32563) una matriz arbitraria de 6 x 2 bytes de longitud hexadecimal (definida por sus valores decimales)PARMLIST DC A (AQUÍ, ALLÍ, 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* --------- ejemplos de fin de adcon ---------------- *FIELDA DC C'ABCDEFGHIJKLMNOPQRSTUVWXYZ 'un campo que contiene una cadena de caracteres (no un adcon) = AZ