Articulo de referencia

Lenguaje ensamblador básico de IBM y sus 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 ...

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 el IBM Z.

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

Posteriormente, apareció un lenguaje ensamblador para el System/360 con características y usabilidad más potentes, como la compatibilidad con macros . Este lenguaje, y la línea de ensambladores que lo implementaban, continuaron evolucionando para el System/370 y las arquitecturas posteriores, heredando y ampliando su sintaxis. Algunos en la industria informática aún se referían a ellos con el término anacrónico de "Lenguaje Ensamblador Básico" o "BAL". [ 1 ] Sin embargo, muchos no lo hacían, e IBM solía referirse a ellos simplemente como el "Lenguaje Ensamblador del System/360", [ 2 ] como el "Ensamblador" para un sistema operativo o plataforma determinados, [ 3 ] o nombres similares. Algunos 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 lenguaje derivado más reciente se conoce como IBM High-Level Assembler ( HLASM ).

Características generales

Como lenguaje ensamblador , BAL utiliza el conjunto de instrucciones nativo de la arquitectura de mainframe de IBM en la que se ejecuta, System/360 , al igual que los sucesores de BAL utilizan los conjuntos de instrucciones nativos de las arquitecturas de mainframe de IBM en las que se ejecutan, incluyendo System/360 , System/370 , System/370-XA , ESA/370 , ESA/390 y z/Architecture .

La simplicidad de la mayoría de las instrucciones de máquina implica que el código fuente de un programa escrito en ensamblador suele ser mucho más extenso que el de un programa equivalente en, por ejemplo, COBOL o Fortran . En el pasado, la velocidad de los programas ensambladores escritos manualmente compensaba esta desventaja, 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 actualizando el ensamblador, y este aún se utiliza cuando la velocidad o un control muy preciso son primordiales. No obstante, todos los sucesores de BAL de IBM han incluido una sofisticada funcionalidad de macros que permite escribir código fuente mucho más compacto.

Otra razón para usar ensamblador es que no todas las funciones del sistema operativo son accesibles mediante lenguajes de alto nivel. Las interfaces de programación de aplicaciones de los sistemas operativos de mainframe de IBM se definen como un conjunto de macroinstrucciones en lenguaje ensamblador que normalmente [ c ] invocan la instrucción Supervisor Call ( SVC) en, por ejemplo, z/OS, o Diagnose [ d ] en, por ejemplo, z/VM. Es posible utilizar los servicios del sistema operativo desde programas escritos en lenguajes de alto nivel mediante el uso de subrutinas de ensamblador.

Formato de instrucción de ensamblador

Algunos programadores utilizaron un lenguaje ensamblador para los lenguajes ensamblador de IBM 360 y sus sucesores.
Las tarjetas perforadas y las listas de ensamblaje impresas eran comunes durante el uso del lenguaje ensamblador de IBM 370 en la década de 1970.

El formato de las instrucciones del lenguaje ensamblador refleja la disposición de una tarjeta perforada de 80 columnas , aunque las versiones sucesivas han relajado la mayoría de las restricciones.

  • La etiqueta o nombre de la declaración opcional es una cadena de caracteres alfanuméricos que comienza en la columna 1. El primer carácter debe ser alfabético. En versiones posteriores se añadieron @, #, $ y _ a los caracteres permitidos en las etiquetas, y se aumentó el tamaño de los seis caracteres iniciales a ocho, y posteriormente a longitudes casi ilimitadas.
  • El código de operación o "mnemotécnico" puede comenzar en cualquier columna a la derecha de la columna 1, separado de la etiqueta de la instrucción por un espacio en blanco. El código de operación era simplemente una instrucción de máquina (no existían las macros), por lo que generalmente constaba de 1, 2, 3 o, raramente, 4 letras. Posteriormente, el código de operación se amplió para permitir hasta ocho caracteres y, más tarde, longitudes prácticamente ilimitadas.
  • El campo de operando puede comenzar en cualquier columna a la derecha del código de operación, separado de este por al menos un espacio en blanco. Los espacios en blanco no son válidos en los operandos, excepto en las constantes de caracteres. El campo de operando, que consta de uno o más operandos, es opcional según el código de operación.
  • Los comentarios opcionales pueden aparecer a la derecha del campo del operando, separados por al menos un espacio en blanco.
  • El lenguaje ensamblador básico no permite la continuación de instrucciones. Las versiones posteriores del ensamblador indican la continuación mediante la aparición de cualquier carácter no vacío en la columna 72 de la instrucción que se continúa. El lenguaje ensamblador básico requiere que la columna 72 esté vacía.
  • Un "comentario de tarjeta completa" se indica con un asterisco (*) en la columna 1.
  • Las columnas 73 a 80 de la tarjeta, denominadas campo de secuencia de identificación, pueden ser utilizadas por el programador para cualquier propósito, pero generalmente contienen números de secuencia para reordenar una baraja de tarjetas desordenada.

El lenguaje ensamblador básico también permite un formato de instrucción alternativo, donde la instrucción comienza en la columna 25, lo que permite perforar la instrucción ensamblada en la misma tarjeta a partir de 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 lenguaje 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 realizar diversas operaciones durante el proceso de generación de código. Por ejemplo, CSECTsignifica "comienza 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 de 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 limitado a la forma

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

Las direcciones de las instrucciones de máquina en S/360 especifican un desplazamiento (0–4095 bytes) desde el valor en un registro base ; si bien las versiones posteriores de la arquitectura agregaron formatos de direcciones relativas, los formatos antiguos todavía son utilizados por muchas instrucciones. USINGEsto permite al programador indicarle al ensamblador que se asume 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, quien de otro modo tendría que especificar el registro base en cada instrucción. Los programadores siguen siendo responsables de cargar realmente la dirección de "base" en el registro antes de escribir el código que depende de este valor.

La DROPinstrucción de ensamblador relacionada anula una anterior USING.

Instrucciones de la máquina (mnemotecnia)

Existe una relación uno a uno con las instrucciones de la máquina . El conjunto completo de instrucciones mnemónicas se describe en el manual Principios de Operación [ 4 ] para cada conjunto de instrucciones. Ejemplos: [ e ]

* Esta es una línea de comentarios L 3,ZIGGY Carga el entero de palabra completa almacenado en la ubicación etiquetada como 'ZIGGY' en el registro general 3: SLA 4,5 desplaza el valor en el registro general 4 5 bits a la izquierda. MVC DESTINO,ORIGEN mueve caracteres de la ubicación 'ORIGEN' a 'DESTINO' AP COUNT,=P'1' suma 1 al valor en la ubicación de memoria 'COUNT' (formato decimal empaquetado) B Rama incondicional NEXT a etiqueta 'NEXT' AQUÍ 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 no obligatorios, incluyen la identificación de registros de propósito general con mnemónicos. A diferencia de los ensambladores de 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 los registros. [ f ] Por lo tanto, normalmente se puede ver lo siguiente en un programa ensamblador:

R3 EQU 3 ... L R3,ZIGGY 

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

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

Macros y ensamblaje condicional

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

macros del sistema operativo

La mayoría de los programas requieren servicios del sistema operativo , y este proporciona macros estándar para solicitarlos. Estas son análogas a las llamadas al sistema 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 alto nivel, los lenguajes ensamblador de los mainframes de IBM no proporcionan instrucciones ni bibliotecas independientes del sistema operativo para asignar memoria, realizar operaciones de entrada/salida, etc., y los distintos sistemas operativos de los mainframes de IBM no son compatibles a nivel de servicio del sistema. Por ejemplo, la escritura de un archivo secuencial se codificaría de forma diferente en z/OS y ​​en z/VSE.

Ejemplos

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

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

El siguiente es el omnipresente programa "¡Hola, mundo!" , y, al ejecutarse bajo 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 la persona que llama. STM 14,12,12(13) Guarda los registros 14,15 y del 0 al 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, AHORRA Ahora Apunta a nuestra propia área de ahorro ST 15,8(13) Cadena de avance 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) - OMC '¡Hola, mundo!' Escribir al operador (macro del sistema operativo) * L 13,4(13) restaurar la dirección al área de guardado proporcionada por el llamador XC 8(4,13),8(13) Cadena libre hacia adelante LM 14,12,12(13) Restaurar los registros como en el momento de la entrada. CAÍDA 12 Lo opuesto a 'USAR' SR 15,15 Establezca el registro 15 a 0 para que el código de retorno (R15) sea cero. BR 14 Devolver a la persona que llamó * GUARDAR DS 18F Defina 18 palabras completas para guardar los registros del programa que realiza la 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 trabajos (JCL) del sistema operativo de la siguiente manera:

// EXEC PGM=HELLO

o, alternativamente, puede ser llamada como una subrutina desde dicho programa:

LLAMA HOLA 

se expande a

L R15,=V(HOLA) BALR R14,R15 

Versiones

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

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

Ensamblador de soporte de programación básica

El ensamblador para BPS es el verdadero "ensamblador básico". Estaba diseñado para cargarse desde tarjetas y se ejecutaba en un  System/360 de 8 KB (excepto el modelo 20). No admite macroinstrucciones ni mnemónicos extendidos (como BH en lugar de BC 2 para saltar si el código de condición 2 indica una comparación alta). Solo puede ensamblar 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, siendo los únicos operadores '+', '-' y '*'. [ 7 ] : 59–61

Ensamblador del sistema operativo básico

El Sistema Operativo Básico tiene dos versiones en lenguaje ensamblador. Ambas requieren 16  KB de memoria; una reside en cinta y la otra en disco. [ 8 ] : 7–8

Ensamblador D

El ensamblador D era el ensamblador de DOS/360 para máquinas con un tamaño de memoria de 16  KB. Existían 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í requiere 15  KB. [ 10 ] : 2 El ensamblador F puede ejecutarse en DOS/360 u 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

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

El ensamblador H versión 2 se anunció en 1981 e incluye soporte para la arquitectura extendida (XA), incluidas las directivas AMODEy . [ 14 ] : 3 - 28 Se retiró del mercado en 1994 y el soporte finalizó en 1995. Fue reemplazado por el ensamblador de alto nivel. [ 15 ]RMODE

Ensamblador XF

Assembler XF es una actualización mayormente 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 en expresiones y el 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

El ensamblador de alto nivel ( HLASM ) se lanzó en junio de 1992, reemplazando al ensamblador H versión 2 de IBM. [ 17 ] [ 18 ] Era el traductor predeterminado para System/370 y System/390, y admitía 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 centrales z/Architecture . La versión 6 y posteriores también se ejecutan en Linux y generan archivos objeto ELF o GOFF (este entorno a veces se denomina Linux en IBM Z ). [ 19 ] Mientras trabajaba en IBM, John Robert Ehrman creó y fue el desarrollador principal de HLASM [ j ] y es considerado el "padre del ensamblador de alto nivel". [ 21 ]

A pesar de su nombre, HLASM por sí solo no posee 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 modificaciones desarrolladas por Greg Mushial en el Laboratorio Nacional de Aceleradores SLAC (anteriormente Centro de Aceleradores Lineales de Stanford). Entre las características añadidas se encuentran una indicación de CSECT/ DSECTpara el contador de ubicación, instrucciones dependientes [ k ] y etiquetadas [ l ]USING , una lista de USINGinstrucciones actualmente activas, una indicación de si una variable se lee o se escribe en la referencia cruzada y la posibilidad de nombres de símbolos con mayúsculas y minúsculas mixtas. [ 18 ] La RSECTdirectiva (Sección de control de solo lectura) permite al ensamblador verificar la reentrada por sección. RSECTAnteriormente, estaba "sin documentar y se implementaba de forma inconsistente en Assembler H". [ 22 ] : 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: [ 23 ]

  • Un conjunto de macros de programación estructurada
    • SI/SI NO/FIN SI
    • HACER/FIN HACER
    • STRTSRCH/ORELSE/ENDLOOP/ENDSRCH
    • ENTRADA DE CASOS/CASO/FIN DE CASOS
    • SELECCIONAR/CUANDO/DE OTRO MODO/FIN DE SELECCIÓN.
  • Un desmontador .
  • Una "Herramienta para la comprensión del programa" ( ayuda para la reingeniería ).
  • Una utilidad de referencia cruzada (XREF) de origen.
  • Herramienta interactiva de depuración.
  • SuperC mejorado (herramienta de comparación de código fuente).

Versiones especializadas

Ensamblador de paquetes de soporte 7090/7094

El paquete de soporte para IBM 7090/7094, conocido como SUPPAK, "consta de tres programas diseñados para permitir que los programas escritos para un System 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 ] [ 24 ] Este ensamblador admite el conjunto de caracteres BCD de seis bits, así como EBCDIC de ocho bits .

Ensambladores IBM System/360 Modelo 20

IBM proporcionó 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 las instrucciones disponibles en el Modelo 20, incluidas las instrucciones únicas CIO, TIO, XIOB, SPSW, BAS, BASR, y HPR. [ 25 ] : 110 El Ensamblador Básico es una versión ligeramente más restringida del Ensamblador Básico del Sistema/360; [ 26 ] en particular, los símbolos están restringidos a cuatro caracteres de longitud. Esta versión puede ejecutarse en un sistema con 4  KB de memoria, y la compatibilidad con macros se limita a las macros IOCS . Las versiones para tarjeta son ensambladores de dos pasadas que solo admiten entrada/salida de tarjeta. Las versiones residentes en cinta son de una pasada y utilizan cinta magnética para el almacenamiento intermedio. Los programas ensamblados con el Ensamblador CPS pueden direccionar un máximo de 16  KB. [ 26 ] : 7–8

El ensamblador DPS/TPS es una versión algo restringida del ensamblador System/360 BPS/BOS. [ 25 ] : 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 de OS/360 y DOS/360.

Lo más significativo es que el ensamblador del Modelo 44 carece de soporte para macros y sentencias de continuación. Por otro lado, posee varias características que no se encuentran en otros ensambladores de System/360, en particular instrucciones para actualizar un conjunto de datos fuente de imágenes de tarjetas , la definición común con nombre y la definición implícita de SETAvariables de ensamblador. [ 27 ]

No admite instrucciones de almacenamiento a almacenamiento (SS) ni las instrucciones de conversión a binario ( CVB), conversión a decimal ( CVD), lectura directa ( RDD) y escritura directa ( ). [ 28 ] Incluye cuatro instrucciones exclusivas del Modelo 44: Cambiar máscara de prioridad ( ), Cargar PSW especial ( ), Leer palabra directa ( ) y Escribir palabra directa ( ).WRDCHPMLPSXRDDWWRDW

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). [ 28 ] : 53, 73

Ensamblador TSS de IBM System/360

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

Ensamblador G

«Assembler G» es un conjunto de modificaciones realizadas a Assembler F en la década de 1970 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 optimizado, lo que acelera considerablemente los ensamblajes. [ 30 ] «Assembler G» nunca fue un producto de IBM.

Ensambladores que no son de IBM

Ha habido varios ensambladores compatibles con IBM para entornos especiales. [ 31 ]

  • Las series Univac 90/60, 90/70 y 90/80 de Unisys fueron diseñadas para aceptar ensamblador en formato IBM, ya que esta serie de máquinas era similar a las S/360 y S/370.
  • La serie Fujitsu BS2000 también se construyó como un modelo similar al 370 a partir del mismo recurso que Univac, y todavía se utiliza en algunas partes de Europa. [ 32 ]
  • Dignus LLC Systems/ASM es un ensamblador compatible con HLASM que puede ejecutarse de forma nativa en sistemas IBM o como un ensamblador cruzado. [ 33 ]
  • El software gratuito PC/370 , escrito por Don Higgins, fue adquirido posteriormente por Micro Focus .
  • z390 es un ensamblador y emulador de System 390 también escrito por Don Higgins y programado en Java . Es de código abierto y está disponible en http://www.z390.org/
  • La Universidad Estatal de Pensilvania creó un paquete llamado ASSIST , que incluye un ensamblador e intérprete para el sistema 370.
  • Tachyon Software LLC comercializa Tachyon Assembler Workbench , que se ejecuta en Windows, Linux/x86, Linux para S/390 y zSeries, AIX y Solaris. [ 34 ]
  • El ensamblador GNU (gas) forma parte de la colección de compiladores GNU (gcc) para Linux en OS/390 e IBM Z. Este ensamblador tiene una sintaxis única que es incompatible con otros ensambladores para arquitecturas IBM.

Importancia

Originalmente, todos los sistemas operativos System/360 se escribieron en lenguaje ensamblador, y todas las interfaces del sistema se definieron mediante macros. El acceso desde lenguajes de alto nivel (HLL) se limitaba a lo que proporcionaba dicho lenguaje, y otras llamadas al sistema debían codificarse como subrutinas de ensamblador invocadas desde programas HLL. Además, IBM permitía la personalización de las características del sistema operativo mediante la instalación a través de las llamadas Exits : rutinas proporcionadas por el usuario que podían extender o modificar las funciones normales del sistema operativo. Estas Exits debían codificarse en lenguaje ensamblador. Posteriormente, IBM recodificó OS/360 en PL/S , un lenguaje de programación de sistemas , pero, salvo un breve periodo de prueba, decidió no distribuir el compilador de PL/S a los usuarios. Como resultado de estos factores, el lenguaje ensamblador se utilizó ampliamente 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
    • 512 KiB
  2. Algunas instrucciones, por ejemplo, la Asistencia para el Procesamiento de Redes Neuronales (NNPA), son bastante complejas.
  3. Algunos servicios se invocan con llamadas directas y liberaciones desde MVS/SP V1R3 en el uso añadido de Program Call (PC), conservando las interfaces SVC heredadas.
  4. La instrucción de diagnóstico no tiene código de operación de ensamblador, aunque la literatura a menudo usaDIAGo Llamada al hipervisor (HVC); originalmente DIAG en una máquina sin sistema operativo era específico del modelo e incompatible con el uso de VM.
  5. La definición de los campos de caracteres 'TARGET' y 'SOURCE' especifica su longitud.
  6. Para el HLASM contemporáneo, la Referencia cruzada del registro de propósito general (opción RXREF ) proporciona una alternativa.
  7. La mayoría de los usos de BALR han sido reemplazados porBASRinstrucciones similares.
  8. Muchos usos deSVChan sido reemplazados por unaPCinstrucción.
  9. La máquina virtual se reutilizaDIAGcomoHVCinstrucción.
  10. HLASM siguió un requisito de SHARE para incorporar las mejoras de Greg Mushial [ 20 ] al ensamblador H en el producto compatible.
  11. Un dependienteUSINGes aquel que especifica una expresión reubicable en lugar de una lista de registros:
     USANDO IHADCB,SYSPRINT ... TM DCBOPTCD, DCBOPTC Prueba OPTCD en SYSPRINT ... 
  12. Una etiquetaUSINGes aquella que solo afecta a las instrucciones que se refieren explícitamente a ella calificando una expresión con una etiqueta:
     LA R4, SISTEMA LA R5, SYSPRINT AL UTILIZAR IHADCB,R4 SALIDA USANDO 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 del sistema IBM/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 de programación básica de IBM System/360" (PDF) . bitsavers . pág. 61. Consultado el 6 de septiembre de 2023 . 
  7. 1 2 Soporte de programación básica de IBM System/360 Lenguaje ensamblador básico (PDF) . Biblioteca de referencia de IBM Systems. IBM Corporation. Febrero de 1965. C20-6503-0 . Recuperado el 5 de abril de 2022 .
  8. Especificaciones del lenguaje del sistema operativo básico IBM System/360 (ensamblador, disco/cinta de 16 KB) (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 programación del ensamblador del sistema operativo IBM System/360 (32K) (PDF) . IBM. 1966. Y26-3598-0.
  11. Ensamblador del sistema operativo de disco IBM System/360 [ F ] Lógica del programa (PDF) . IBM. 1968. Y26-3716-0.
  12. Lógica del programa del ensamblador del sistema operativo IBM System/360 (F) (PDF) . IBM. 1971. GY26-3700-2.
  13. Lenguaje ensamblador del sistema operativo, versión 21 del sistema operativo (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 Versión 2 Release 1.0" . IBM . Archivado del original el 24 de septiembre de 2021. Recuperado el 8 de octubre de 2012 .
  16. IBM Corporation (1973). Guía del programador de ensamblador OS/VS (PDF) . Consultado el 19 de septiembre de 2024 .
  17. IBM Corporation (19 de octubre de 2018). "Características de IBM High Level Assembler and Toolkit: historial de versiones" . IBM . Consultado el 19 de enero de 2025 .
  18. 1 2 "IBM High Level Assembler/MVS & VM & VSE" (Carta de anuncio). IBM Corporation. 5 de mayo de 1992. 292-244 . Recuperado el 19 de enero de 2025 .
  19. IBM Corporation (2008). Guía del usuario de High Level Assembler para Linux en zSeries (PDF) . Consultado el 23 de julio de 2025 .
  20. Greg Mushial (20 de julio de 1983), "Módulo 24: Mejoras y embellecimiento del ensamblador IBM H-Level para la versión 2.8" de SLAC , SLAC VM NOTEBOOK , Stanford Linear Accelerator Center, archivado del original el 24 de septiembre de 2020 , consultado el 11 de julio de 2023.
  21. "Guía de la colección John R. Ehrman" . Archivo en línea de California . X5621.2010. Archivado del original el 15 de octubre de 2022. Consultado el 15 de octubre de 2022 .
  22. Guía de presentación de IBM High Level Assembler para MVS, VM y VSE Release 2 (PDF) . Redbooks. IBM . Diciembre de 1995. SG24-3910-01. Archivado del original (PDF) el 23 de enero de 2016. Consultado el 29 de septiembre de 2023 .
  23. IBM Corporation. "Componentes de funciones del kit de herramientas" . IBM . Consultado el 5 de septiembre de 2023 .
  24. 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 .
  25. 1 2 IBM Corporation (abril de 1970). IBM System/360 Modelo 20 Sistemas de programación de discos y cintas Lenguaje ensamblador (PDF) . Recuperado el 2 de octubre de 2023 .
  26. 1 2 IBM Corporation (mayo de 1969). Soporte de programación de tarjetas IBM System/360 Modelo 20 Lenguaje ensamblador básico (PDF) . Recuperado el 2 de octubre de 2023 .
  27. IBM Corporation (1966). IBM System/360 Model 44 Programming System Assembler Language (PDF) . pág. 73. Consultado el 2 de julio de 2019 . 
  28. 1 2 IBM Corporation (1966). IBM System/360 Model 44 Programming System Assembler Language (PDF) . Consultado el 19 de septiembre de 2024 .
  29. IBM Corporation (1976). Guía del programador del ensamblador del sistema de tiempo compartido de IBM (PDF) .
  30. Centro del Acelerador Lineal de Stanford. "MEDICIÓN GENERALIZADA DEL SOFTWARE IBM SYSTEM 360 (SLAC-PUB-715)" (PDF) . Consultado el 8 de octubre de 2012 .
  31. Alcock, David. "Preguntas frecuentes de Dave sobre z/Architecture Assembler" . Planet MVS . Consultado el 15 de diciembre de 2012 .
  32. Los manuales de Fujitsu ASSEMH están disponibles en http://manuals.ts.fujitsu.com/index.php?id=1-2-2926-15435 (Consultado el 27 de febrero de 2016).
  33. Dignus, LLC. "Sistemas/ASM" . Consultado el 15 de diciembre de 2012 .
  34. Tachyon Software LLC. "Tachyon Software" . Consultado el 15 de diciembre de 2012 .
  • Documentación en formato PDF
  • Ensamblador de alto nivel para z/OS, z/VM y z/VSE 1.6 Información general
  • Introducción al lenguaje ensamblador de IBM System/360 para programadores (Libro de texto para estudiantes)
  • Referencia del lenguaje ensamblador de alto nivel para z/OS, z/VM y z/VSE
  • El programador meticuloso: ensamblador de mainframes de IBM
  • Programación básica en lenguaje ensamblador para mainframes IBM
  • Introducción a la programación en lenguaje ensamblador para OS/390 (archivado)
  • Compilador IBM Assembler F con acceso web para pequeños experimentos.
  • ASSIST – Sistema de ensamblaje para la instrucción de estudiantes y la enseñanza de sistemas