stringtranslate.com

Lenguaje ensamblador básico de IBM y sucesores

El lenguaje ensamblador IBM Basic y sus sucesores es una serie de lenguajes ensambladores y ensambladores creados para el sistema mainframe IBM System/360 y sus sucesores hasta IBM Z.

El primero de ellos, el lenguaje ensamblador básico ( BAL ), es un lenguaje ensamblador extremadamente restringido , introducido en 1964 y utilizado en sistemas 360 con solo 8 KB de memoria principal, y solo un lector de tarjetas , un perforador de tarjetas y una impresora para entrada/salida , como parte de IBM Basic Programming Support (BPS/360). El ensamblador básico para BAL también estaba disponible como parte de Basic Operating System/360 (BOS/360).

Posteriormente, apareció un lenguaje ensamblador para el System/360 que tenía características más potentes y usabilidad, como soporte para macros . Este lenguaje, y la línea de ensambladores que lo implementaron, continuaron evolucionando para el System/370 y las arquitecturas que siguieron, heredando y extendiendo su sintaxis. Algunos en la industria informática se referían a ellos bajo el término genérico "Lenguaje ensamblador básico" o "BAL". [1] Sin embargo, muchos no lo hacían, e IBM mismo generalmente se refería a ellos simplemente como el "Lenguaje ensamblador del System/360", [2] como el "Ensamblador" para un sistema operativo o plataforma dados, [3] o nombres similares. Los ensambladores específicos eran conocidos por nombres como [a] Ensamblador E, Ensamblador F, Ensamblador H, etc. Los programadores que utilizan este lenguaje, y esta familia de ensambladores, también se refieren a ellos como ALC (por Assembly Language Coding), o simplemente "el ensamblador".

El último lenguaje derivado se conoce como Ensamblador de alto nivel de IBM ( HLASM ).

Características generales

Como es un lenguaje ensamblador , BAL utiliza el conjunto de instrucciones nativo de la arquitectura de mainframe de IBM en la que se ejecuta, System/360 .

Los sucesores de BAL utilizan los conjuntos de instrucciones nativos de las arquitecturas de mainframe de IBM en las que se ejecutan, incluidos System/360 , System/370 , System/370-XA , ESA/370 , ESA/390 y z/Architecture .

La simplicidad de las instrucciones de máquina significa que el código fuente de un programa escrito en ensamblador normalmente será mucho más largo que un programa equivalente en, por ejemplo, COBOL o Fortran . En el pasado, se creía que la velocidad de los programas en ensamblador codificados a mano compensaba este inconveniente, pero con la llegada de los compiladores optimizadores, C para mainframes y otros avances, el ensamblador ha perdido gran parte de su atractivo. Sin embargo, IBM continúa mejorando el ensamblador y todavía se utiliza cuando la necesidad de velocidad o un control muy preciso es primordial. Sin embargo, todos los sucesores de IBM de BAL han incluido una sofisticada función de macros que permite escribir código fuente mucho más compacto.

Otra razón para utilizar ensamblador es que no se puede acceder a todas las funciones del sistema operativo en lenguajes de alto nivel. Las interfaces de programación de aplicaciones de los sistemas operativos mainframe de IBM se definen como un conjunto de instrucciones "macro" en lenguaje ensamblador, que normalmente invocan instrucciones Supervisor Call ( SVC) [p. ej., en z/OS] o Diagnose ( DIAG) [p. ej., en z/VM] para invocar rutinas del sistema operativo. Es posible utilizar servicios del sistema operativo desde programas escritos en lenguajes de alto nivel mediante el uso de subrutinas de ensamblador.

Formato de declaración del ensamblador

Algunos programadores utilizaron una forma de codificación ensambladora para los lenguajes ensambladores del IBM 360 y sus sucesores.
Las tarjetas perforadas y una lista de ensamblaje impresa eran comunes durante el uso del lenguaje ensamblador del IBM 370 en la década de 1970.

El formato de las declaraciones en lenguaje ensamblador refleja el diseño de una tarjeta perforada de 80 columnas, aunque las versiones sucesivas han relajado la mayoría de las restricciones.

El lenguaje ensamblador básico también permite un formato de instrucción alternativo, en el que la instrucción comienza en la columna 25, lo que permite que la instrucción ensamblada se inserte en la misma tarjeta comenzando en la columna 1. Esta opción no se mantuvo en versiones posteriores del ensamblador.

Tipos de instrucciones

En el código fuente de un programa escrito en ensamblador se encuentran tres tipos principales de instrucciones.

Instrucciones de montaje

Las instrucciones del ensamblador, a veces denominadas directivas , pseudooperaciones o pseudoops en otros sistemas, son solicitudes al ensamblador para que realice varias operaciones durante el proceso de generación de código. Por ejemplo, CSECTsignifica "iniciar una sección de código aquí"; DSECTproporciona definiciones de datos para una estructura, pero no genera código; DCdefine una constante que se colocará en el código objeto.

Una de las instrucciones de ensamblador más importantes es USING, que admite el direccionamiento por desplazamiento de base de la arquitectura S/360. Guía al ensamblador para determinar qué registro base y desplazamiento debe usar para una dirección relativa. En BAL, estaba limitada a la forma

 USANDO base,reg-1,...,reg-n

Las direcciones de instrucciones de máquina en S/360 especifican un desplazamiento (0–4095 bytes) a partir del valor en un registro base ; aunque versiones posteriores de la arquitectura agregaron formatos de dirección relativa, muchas instrucciones aún usan los formatos más antiguos. USINGpermite al programador indicarle al ensamblador que se supone que los registros base especificados contienen la dirección de "base", base+4096 (si se especifican varios registros), etc. Esto solo proporciona un atajo para el programador, que de lo contrario tendría que especificar el registro base en cada instrucción. Los programadores aún son responsables de cargar realmente la dirección de "base" en el registro antes de escribir el código que depende de este valor.

La instrucción del ensamblador relacionada DROPanula una anterior USING.

Instrucciones de máquina (mnemónicas)

Existe una relación uno a uno con las instrucciones de la máquina . El conjunto completo de instrucciones mnemotécnicas se describe en el manual Principles of Operation [4] para cada conjunto de instrucciones. Ejemplos:

*Esta es una línea de comentarios * Cargar el entero de palabra completa almacenado en el * ubicación denominada 'ZIGGY' en el registro general 3: L 3,ZIGGY SLA 4,5 desplaza el valor en el registro general 4 a la izquierda en 5 bits MVC TARGET,SOURCE mueve personajes desde la ubicación 'SOURCE' a 'TARGET' AP COUNT,=P'1' suma 1 al valor en la ubicación de memoria 'COUNT' (formato decimal empaquetado) B SIGUIENTE rama incondicional a la etiqueta 'SIGUIENTE' AQUI EQU * Esta es una etiqueta CLC TARGET,=C'ADDRESS' Compara la ubicación de memoria 'TARGET' con la cadena 'ADDRESS' Rama BE THERE si es igual a la etiqueta del programa 'THERE'

Los estándares generalmente aceptados, aunque de ninguna manera obligatorios, incluyen la identificación de registros de propósito general con mnemónicos. A diferencia de los ensambladores para algunos otros sistemas, como el lenguaje ensamblador X86 , los mnemónicos de registro no son símbolos reservados sino que se definen mediante EQUinstrucciones en otras partes del programa. Esto mejora la legibilidad de los programas en lenguaje ensamblador y proporciona una referencia cruzada del uso de registros. Por lo tanto, normalmente puede ver lo siguiente en un programa ensamblador:

R3 EQU 3 ... izq. r3,ziggy

Algunos mnemónicos de instrucciones notables son BALR[b] para una llamada que almacena la dirección de retorno y el código de condición en un registro, SVC[ c] DIAG , [d] y [5]ZAP .

Las instrucciones de la máquina System/360 tienen una longitud de una, dos o tres medias palabras (de dos a seis bytes). Originalmente, había cuatro formatos de instrucciones, designados por los dos primeros bits del campo de código de operación; z/Architecture agregó formatos adicionales.

Macros y ensamblaje condicional

El ensamblador de Soporte Básico de Programación no admitía macros . Las versiones posteriores del ensamblador, a partir del Ensamblador D [6], permiten al programador agrupar instrucciones en macros y agregarlas a una biblioteca, que luego se puede invocar en otros programas, generalmente con parámetros, como las funciones de preprocesador en C y lenguajes relacionados. Las macros pueden incluir instrucciones condicionales del ensamblador, como AIF(una construcción 'if'), que se utiliza para generar código diferente según los parámetros elegidos. Eso hace que la función de macro de este ensamblador sea muy poderosa. Si bien las macros multilínea en C son una excepción, las definiciones de macro en ensamblador pueden tener fácilmente cientos de líneas.

Macros del sistema operativo

La mayoría de los programas requerirán servicios del sistema operativo , y el SO proporciona macros estándar para solicitar esos servicios. Son análogas a las llamadas al sistema de Unix . Por ejemplo, en MVS (posteriormente z/OS), (con el parámetro) asigna dinámicamente un bloque de memoria y recupera el siguiente registro lógico de un archivo.STORAGEOBTAINGET

Estas macros dependen del sistema operativo; a diferencia de varios lenguajes de nivel superior, los lenguajes ensambladores de mainframe de IBM no proporcionan instrucciones o bibliotecas independientes del sistema operativo para asignar memoria, realizar operaciones de E/S, etc., y los distintos sistemas operativos de mainframe de IBM no son compatibles en el nivel de servicio del sistema. Por ejemplo, escribir un archivo secuencial se codificaría de forma diferente en z/OS y ​​en z/VSE.

Ejemplos

El siguiente fragmento muestra cómo se realizaría la lógica "Si SEXO = 'M', sumar 1 a HOMBRES; de lo contrario, sumar 1 a MUJERES" en ensamblador.

 CLI SEXO, C'M' ¿Hombre? BNE IS_FEM Si no, ramifica alrededor L 7, MALES Carga el valor actual de MALES en el registro 7 LA 7,1(7) añadir 1 ST 7, MALES almacena el resultado B GO_ON Terminé con esta parte IS_FEM EQU * Una etiqueta L 7,HEMBRAS Cargar el valor actual en HEMBRAS en el registro 7 LA 7,1(7) añadir 1 ST 7, MUJERES almacenan el resultado GO_ON EQU * - resto del programa - * MALES DC F'0' Contador para MALES (inicialmente=0) MUJERES DC F'0' Contador para MUJERES (inicialmente=0)

El siguiente es el omnipresente programa "¡Hola, mundo!" , y al ejecutarse en un sistema operativo IBM como OS/VS1 o MVS , mostraría las palabras "¡Hola, mundo!" en la consola del operador:

HOLA CSECT El nombre de este programa es 'HOLA' * Registre 15 puntos aquí al ingresar desde OPSYS o llamante. STM 14,12,12(13) Guarda los registros 14,15 y 0 a 12 en el área de guardado del llamador LR 12,15 Configurar el registro base con la dirección del punto de entrada del programa USANDO HELLO,12 Indica al ensamblador qué registro estamos usando para pgm.base LA 15, GUARDAR Ahora apunta a nuestra propia área de guardado ST 15,8(13) Establecer cadena hacia adelante ST 13,4(15) Cadena de retroceso LR 13,15 Establezca R13 en la dirección de la nueva área de guardado * -Fin de la limpieza (similar para la mayoría de los programas) - Operador de escritura "Hola, mundo" de la OMC (macro del sistema operativo) * L 13,4(13) restaurar la dirección al área de guardado proporcionada por el llamante XC 8(4,13),8(13) Cadena de avance clara LM 14,12,12(13) Restaurar registros como en la entrada GOTA 12 El opuesto de 'USAR' SR 15,15 Establece el registro 15 en 0 para que el código de retorno (R15) sea cero BR 14 Regresar a la llamada *  GUARDAR DS 18F Define 18 palabras completas para guardar los registros del programa de llamada FIN HOLA Este es el final del programa.

WTOes una macro de ensamblador que genera una llamada al sistema operativo. Debido a que guarda registros y luego los restaura y devuelve, este pequeño programa se puede usar como un programa por lotes invocado directamente por el lenguaje de control de tareas (JCL) del sistema operativo de esta manera:

// EJECUTAR PGM=HOLA  

o, alternativamente, se puede llamar como una subrutina desde dicho programa:

Llama 'HOLA'

Versiones

Impresión de trabajo por lotes que muestra la página de identificación del ensamblador G

Con la excepción de los ensambladores para el IBM System/360 Model 20 , los ensambladores de IBM eran en gran medida compatibles con versiones anteriores. Las diferencias se encontraban principalmente en la complejidad de las expresiones permitidas y en el procesamiento de macros. Los ensambladores de OS/360 se designaban originalmente según sus requisitos de memoria.

Soporte básico de programación ensamblador

El ensamblador para BPS es el verdadero "ensamblador básico". Fue pensado para ser cargado desde tarjetas y se ejecutaría en un System/360 de 8 KB (excepto el Modelo 20). No tiene soporte para macroinstrucciones o mnemotecnias extendidas (como BH en lugar de BC 2 para bifurcar si el código de condición 2 indica una comparación alta). Puede ensamblar solo una única sección de control y no permite secciones ficticias (definiciones de estructura). No se permiten expresiones entre paréntesis y las expresiones están limitadas a tres términos con los únicos operadores '+', '-' y '*'. [7] : 59–61 

Ensamblador básico del sistema operativo

El sistema operativo básico tiene dos versiones de ensamblador. Ambas requieren 16 KB de memoria, una residente en cinta y la otra en disco. [8] : 7–8 

Ensamblador D

El ensamblador D era el ensamblador DOS/360 para máquinas con un tamaño de memoria de 16 KB. Se presentó en dos versiones: una variante de 10 KB para máquinas con un mínimo de 16 KB de memoria y una variante de 14 KB para máquinas con 24 KB. También estaba disponible un ensamblador de nivel F para máquinas DOS con 64 KB o más. Los ensambladores D ofrecían casi todas las características de las versiones superiores. [9] : 7 

Ensamblador E y F

El ensamblador E fue diseñado para ejecutarse en un sistema OS/360 con un mínimo de 32 KB de almacenamiento principal, y el ensamblador en sí mismo requiere 15 KB. [10] : 2  El ensamblador F puede ejecutarse en DOS/360 o OS/360 en un sistema con una memoria de 64 KB, y el ensamblador requiere 44 KB. [11] [12] [13] Estos ensambladores son una parte estándar de OS/360; la versión que se generó se especificó en la generación del sistema (SYSGEN).

Ensamblador H

Assembler H funciona en OS/360 y sucesores ; era más rápido y más potente que Assembler F, pero el lenguaje de macros no era totalmente compatible.

La versión 2 de Assembler H se anunció en 1981 e incluye soporte para Arquitectura Extendida (XA), incluidas las directivas AMODEy RMODE. [14] : 3-28  Se retiró de la comercialización en 1994 y el soporte finalizó en 1995. Fue reemplazado por High Level Assembler. [15]

Ensamblador XF

Assembler XF es una actualización mayoritariamente compatible de Assembler F que incluye las nuevas instrucciones de la arquitectura System/370. Esta versión proporciona un ensamblador común para sistemas OS/VS, DOS/VS y VM. Otros cambios incluyen la relajación de las restricciones sobre expresiones y procesamiento de macros. Assembler XF requiere un tamaño mínimo de partición/región de 64 KB (virtual). El tamaño recomendado es de 128 KB. [16] : 73 

Ensamblador de alto nivel

High Level Assembler o HLASM fue lanzado en junio de 1992 en reemplazo de Assembler H Version 2 de IBM. [17] [18] Fue el traductor predeterminado para System/370 y System/390, y admitió los sistemas operativos MVS, VSE y VM. A partir de 2023 es el lenguaje de programación ensamblador actual de IBM para sus sistemas operativos z/OS , z/VSE , z/VM y z/TPF en computadoras mainframe z/Architecture . La versión 6 y posteriores también se ejecutan en Linux y generan archivos de objetos ELF o GOFF (este entorno a veces se conoce como Linux en IBM Z ). [19] Mientras trabajaba en IBM, John Robert Ehrman creó y fue el desarrollador principal de HLASM [e] y es considerado el "padre del ensamblador de alto nivel". [21]

A pesar del nombre, HLASM por sí solo no tiene muchas de las características normalmente asociadas con un ensamblador de alto nivel . El nombre puede provenir de las capacidades adicionales del lenguaje de macros, como la capacidad de escribir funciones definidas por el usuario. El ensamblador es en su mayoría similar a Assembler H y Assembler(XF), incorporando las modificaciones de SLACCSECT (Stanford Linear Accelerator). Entre las características agregadas se encuentran una indicación de / DSECTpara el contador de ubicación, declaraciones dependientes [f] y etiquetadas [g] USING , una lista de USINGdeclaraciones actualmente activas, una indicación de si una variable se lee o escribe en la referencia cruzada y permite nombres de símbolos con mayúsculas y minúsculas. [22] La RSECTdirectiva (Read-only Control Section) permite al ensamblador verificar la reentrada en cada sección. RSECTanteriormente "no estaba documentada y se implementó de manera inconsistente en Assembler H". [23] : 41 

Kit de herramientas de ensamblador de alto nivel

El kit de herramientas de ensamblador de alto nivel es un complemento del ensamblador de alto nivel que se vende por separado. El kit de herramientas contiene: [24]

Versiones especializadas

Ensamblador de paquetes de soporte 7090/7094

El paquete de soporte IBM 7090/7094, conocido como SUPPAK, "consta de tres programas diseñados para permitir que los programas escritos para un Sistema 360 se ensamblen, prueben y ejecuten en un IBM 709, 7090, 7094 o 7094 II".

Este ensamblador cruzado se ejecuta en un sistema 7090 o 7094 y se utilizó mientras System/360 estaba en desarrollo. [7] [25] Este ensamblador admite el conjunto de caracteres BCD de seis bits , así como EBCDIC de ocho bits .

Ensambladores IBM System/360 Modelo 20

IBM suministró dos ensambladores para el Modelo 20: el ensamblador básico del Modelo 20 y el ensamblador DPS/TPS del Modelo 20. Ambos admitían únicamente instrucciones disponibles en el Modelo 20, incluidas las instrucciones únicas CIO, TIO, XIOB, SPSW, BAS, BASR, y HPR. [26] : 110  El ensamblador básico es una versión ligeramente más restringida del ensamblador básico del System/360; [27] en particular, los símbolos están restringidos a cuatro caracteres de longitud. Esta versión es capaz de ejecutarse en un sistema con 4 KB de memoria, y el soporte de macros está limitado a macros IOCS . Las versiones de tarjeta son ensambladores de dos pasadas que solo admiten entrada/salida de tarjeta. Las versiones residentes en cinta son de una sola pasada, utilizando cinta magnética para almacenamiento intermedio. Los programas ensamblados con el ensamblador CPS pueden abordar un máximo de 16 KB. [27] : 7–8 

El ensamblador DPS/TPS es una versión algo restringida del ensamblador BPS/BOS de System/360. [26] : 132–134 

Ensamblador IBM System/360 Modelo 44 PS

El ensamblador del sistema de programación IBM System/360 Modelo 44 procesa un lenguaje que es un "subconjunto seleccionado" del lenguaje ensamblador OS/360 y DOS/360.

Lo más significativo es que el ensamblador del Modelo 44 carece de compatibilidad con macros y declaraciones de continuación. Por otro lado, tiene una serie de características que no se encuentran en otros ensambladores del Sistema/360, en particular instrucciones para actualizar un conjunto de datos de origen de la imagen de una tarjeta , nombres comunes y una definición implícita de SETAlas variables del ensamblador. [28]

No tiene soporte para instrucciones de almacenamiento a almacenamiento (SS) o las instrucciones de conversión a binario ( CVB), conversión a decimal ( CVD), lectura directa ( RDD) y escritura directa ( WRD). [29] Incluye cuatro instrucciones exclusivas del Modelo 44: Cambiar máscara de prioridad ( CHPM), Cargar PSW especial ( LPSX), Leer palabra directa ( RDDW) y Escribir palabra directa ( WRDW).

También incluye directivas para actualizar el programa fuente, una función realizada por programas de utilidad en otros sistemas ( SKPTO, REWND, NUM, OMITy ENDUP). [29] : 53, 73 

Ensamblador IBM System/360 TSS

El ensamblador del sistema de tiempo compartido System/360 Modelo 67 tiene varias diferencias en las directivas para admitir características exclusivas del TSS. La PSECTdirectiva genera una sección de control del prototipo que contiene constantes de dirección reubicables y datos modificables utilizados por el programa. [30] : 143 

Ensamblador G

"Assembler G" es un conjunto de modificaciones realizadas al Assembler F en los años 70 por la Universidad de Waterloo (Assembler F era/es de código abierto). Las mejoras se centran principalmente en un mejor manejo de la entrada/salida y un almacenamiento en búfer mejorado que acelera considerablemente los ensamblajes. [31] "Assembler G" nunca fue un producto de IBM.

Ensambladores que no son de IBM

Han existido varios ensambladores compatibles con IBM para entornos especiales. [32]

Importancia

Originalmente, todos los sistemas operativos System/360 se escribieron en lenguaje ensamblador y todas las interfaces del sistema se definieron mediante definiciones de macros. El acceso desde lenguajes de alto nivel (HLL) estaba restringido a lo que proporcionaba ese lenguaje y otras llamadas al sistema debían codificarse como subrutinas de ensamblador llamadas desde programas HLL. Además, IBM permitía la personalización de las características del sistema operativo mediante una instalación a través de lo que se conocía como Exits (rutinas proporcionadas por el usuario que podían ampliar o alterar las funciones normales del sistema operativo). Estas salidas debían codificarse en lenguaje ensamblador. Más tarde, IBM recodificó OS/360 en un lenguaje de programación de sistemas, PL/S , pero, a excepción de una breve prueba, decidió no lanzar el compilador PL/S a los usuarios. Como resultado de estos factores, el lenguaje ensamblador se utilizó significativamente en los sistemas IBM durante muchos años.

Véase también

Notas

  1. ^ IBM indica los tamaños objetivo de su software con las letras
    • D 16 KiB
    • E 32 Kib
    • F 64 KiB
    • G 128 KiB
    • H 256 KiB
    • Yo 512 KiB
  2. ^ La mayoría de los usos de BALR han sido reemplazados por BASRinstrucciones similares.
  3. ^ Muchos usos de SVChan sido reemplazados por una PCinstrucción.
  4. ^ VM se reutiliza DIAGcomo una HVCinstrucción.
  5. ^ HLASM siguió un requisito de SHARE para incorporar las mejoras de Greg Mushial [20] al Ensamblador H en el producto compatible.
  6. ^ Un dependiente USINGes aquel que especifica una expresión reubicable en lugar de una lista de registros:
     USANDO IHADCB,SYSPRINT ... TM DCBOPTCD,DCBOPTC Prueba OPTCD en SYSPRINT ...
  7. ^ Una etiqueta USINGes aquella que solo afecta a las instrucciones que hacen referencia explícita a ella calificando una expresión con una etiqueta:
     LA R4,SISTEMA LA R5,SISTEMA DE IMPRESIÓNAL UTILIZAR IHADCB,R4FUERA DE USO IHADCB,R5 ... TM IN.DCBOFLGS,DCBOFTM Prueba OFLGS en SYSIN ... TM OUT.DCBOPTCD,DCBOPTC Prueba OPTCD en SYSPRINT ...

Referencias

  1. ^ Por ejemplo, véase McQuillen, Kevin (1975). System/360–370 Assembler Language (OS) . Fresno, California: Mike Murach & Associates. pág. 17. LCCN  74-29645.
  2. ^ Por ejemplo, Introducción al lenguaje ensamblador IBM System/360 para programadores . Poughkeepsie, Nueva York: International Business Machines Corporation. 1969.
  3. ^ Por ejemplo, en la "tarjeta amarilla", sexta página del desplegable, marcada como para OS/VS, VM/370 y DOS/VS: "Resumen de referencia de System/370" (Documento). White Plains, Nueva York: IBM Corporation. Noviembre de 1976.Cuarta edición.
  4. ^ Principios de funcionamiento del IBM System/360 (PDF) . Biblioteca de referencia de sistemas IBM. IBM Corporation. A22-6821-0 . Consultado el 6 de diciembre de 2018 .
  5. ^ "HLASM - Lista de todos los códigos de operación, mnemónicos extendidos y códigos de función, ordenados por mnemónico" . Consultado el 14 de enero de 2013 .
  6. ^ "Soporte básico de programación para IBM System/360" (PDF) . bitsavers . pág. 61 . Consultado el 6 de septiembre de 2023 .
  7. ^ ab IBM System/360 Basic Programming Support Basic Assembler Language (PDF) . Biblioteca de referencia de sistemas IBM. IBM Corporation. Febrero de 1965. C20-6503-0 . Consultado el 5 de abril de 2022 .
  8. ^ IBM System/360 Basic Operating System Language Specification Assembler (16K Disk/Tape) (PDF) . Biblioteca de referencia de sistemas IBM. IBM Corporation. Diciembre de 1965. C24-3414-1 . Consultado el 5 de abril de 2022 .
  9. ^ IBM Corporation (1970). Lenguaje ensamblador de sistemas operativos de disco y cinta IBM System/360 (PDF) . Consultado el 19 de septiembre de 2024 .
  10. ^ Manual de lógica de programa del ensamblador del sistema operativo IBM System/360 (32K) (PDF) . IBM. 1966. Y26-3598-0.
  11. ^ IBM System/360 Disk Operating System Assembler [F] Lógica del programa (PDF) . IBM. 1968. Y26-3716-0.
  12. ^ IBM System/360 Sistema operativo Ensamblador (F) Lógica del programa (PDF) . IBM. 1971. GY26-3700-2.
  13. ^ Lenguaje ensamblador del SO, versión 21 del SO (PDF) . IBM. 1974. GC28-6514-9.
  14. ^ IBM Corporation (1984). Cuaderno de conversión de arquitectura extendida/MVS (PDF) .
  15. ^ IBM Corporation (20 de diciembre de 1996). «5668-962 IBM Assembler H Version 2 Release 1.0» . Consultado el 8 de octubre de 2012 .
  16. ^ IBM Corporation (1973). Guía del programador del ensamblador OS/VS (PDF) . Consultado el 19 de septiembre de 2024 .
  17. ^ IBM Corporation. «Historial de versiones de la función de ensamblador y kit de herramientas de alto nivel de IBM» . Consultado el 21 de octubre de 2012 .
  18. ^ IBM Corporation (5 de mayo de 1992). «Announcement Letter 292-244: IBM HIGH LEVEL ASSEMBLER/MVS & VM & VSE» (Carta de anuncio 292-244: IBM HIGH LEVEL ASSEMBLER/MVS & VM & VSE) . Consultado el 21 de octubre de 2012 .
  19. ^ IBM Corporation (2008). Guía del usuario del ensamblador de alto nivel para Linux en zSeries (PDF) .
  20. ^ Greg Mushial (20 de julio de 1983), "Módulo 24: Mejoras y embellecimientos de SLAC del ensamblador IBM H-Level para la versión 2.8", SLAC VM NOTEBOOK , Stanford Linear Accelerator Center
  21. ^ "Guía de la colección de John R. Ehrman". Archivo en línea de California . X5621.2010. Archivado desde el original el 15 de octubre de 2022. Consultado el 15 de octubre de 2022 .[1]
  22. ^ "IBM HIGH LEVEL ASSEMBLER/MVS & VM & VSE". Cartas de anuncio . IBM Corporation. 5 de mayo de 1992. 292-244 . Consultado el 8 de octubre de 2012 .
  23. ^ Guía de presentación de IBM High Level Assembler para MVS & VM & VSE Release 2 (PDF) . Redbooks. IBM . Diciembre de 1995. SG24-3910-01. Archivado desde el original (PDF) el 23 de enero de 2016 . Consultado el 29 de septiembre de 2023 .
  24. ^ IBM Corporation. «Componentes de funciones del kit de herramientas». IBM . Consultado el 5 de septiembre de 2023 .
  25. ^ Paquete de soporte IBM 7090/7094 para IBM System/360 (PDF) . Biblioteca de referencia de sistemas IBM. IBM Corporation. Noviembre de 1964. C28-6501-2 . Consultado el 5 de abril de 2022 .
  26. ^ ab IBM Corporation (abril de 1970). Lenguaje ensamblador de sistemas de programación de discos y cintas IBM System/360 Model 20 (PDF) . Consultado el 2 de octubre de 2023 .
  27. ^ ab IBM Corporation (mayo de 1969). Soporte de programación de tarjetas IBM System/360 Modelo 20 Lenguaje básico de ensamblador (PDF) . Consultado el 2 de octubre de 2023 .
  28. ^ IBM Corporation (1966). Lenguaje ensamblador del sistema de programación IBM System/360 Model 44 (PDF) . p. 73 . Consultado el 2 de julio de 2019 .
  29. ^ de IBM Corporation (1966). Lenguaje ensamblador del sistema de programación IBM System/360 Model 44 (PDF) . Consultado el 19 de septiembre de 2024 .
  30. ^ IBM Corporation (1976). Guía del programador del ensamblador del sistema de tiempo compartido de IBM (PDF) .
  31. ^ Stanford Linear Accelerator Center. "MEDICIÓN GENERALIZADA DEL SOFTWARE IBM SYSTEM 360 (SLAC-PUB-715)" (PDF) . Consultado el 8 de octubre de 2012 .
  32. ^ Alcock, David. "Preguntas frecuentes sobre ensambladores z/Architecture de Dave". Planet MVS . Consultado el 15 de diciembre de 2012 .
  33. ^ Manuales de Fujitsu ASSEMH disponibles en http://manuals.ts.fujitsu.com/index.php?id=1-2-2926-15435 (consultado el 27 de febrero de 2016)
  34. ^ Dignus, LLC. "Sistemas/ASM" . Consultado el 15 de diciembre de 2012 .
  35. ^ Tachyon Software LLC. "Tachyon Software" . Consultado el 15 de diciembre de 2012 .

Enlaces externos