El Programa de Ensamblaje Óptimo Simbólico (SOAP) es un ensamblador para la máquina de procesamiento de datos de tambor magnético IBM 650 , una de las primeras computadoras que se utilizó por primera vez en 1954. Fue desarrollado por Stan Poley en el Centro de Investigación Thomas J. Watson de IBM . [1] SOAP se llama "Óptimo" (u "Óptimo") porque intenta almacenar las instrucciones generadas en el tambor de almacenamiento para minimizar el tiempo de acceso de una instrucción a la siguiente. SOAP es un ensamblador de múltiples pasadas , es decir, procesa el programa fuente más de una vez para generar el programa objeto .
La primera versión de SOAP fue reemplazada por SOAP II en 1957, [2] que admitía características de hardware adicionales como registros de índice y memoria de núcleo magnético , luego SOAP IIA en 1958, [3] SOAP 2L, SOAP 2L Tape, SOAP 4000 y SOAP 42 en 1961. [4] SOAP se utilizó como backend del compilador FOR TRANSIT en 1957. [1]
Donald Knuth produjo de forma independiente versiones denominadas SOAP III en 1958 [5] y SUPERSOAP en 1959 [6] en el Instituto de Tecnología Case, ahora parte de la Universidad Case Western Reserve en Cleveland, Ohio . La Oficina Nacional de Normas de los EE. UU. , bajo la dirección de Herbert Howe, también escribió una versión de SOAP, llamada ISOPAR, que se dice que mejora significativamente la optimización. [7]
El IBM 650 utiliza un tambor magnético como almacenamiento principal. El tambor tiene capacidad para 4.000 palabras y gira a 12.500 revoluciones por minuto (RPM), 4,8 mseg por rotación o un tiempo de acceso medio de 2,4 mseg. "Si colocara sus instrucciones secuencialmente en el tambor, tendría que esperar a que el tambor girara por completo antes de que la CPU pudiera obtener la siguiente instrucción. Dado que muchas instrucciones del 650 podrían ejecutarse en unos 3 milisegundos, intentaría optimizar su código colocando las instrucciones en el tambor de forma que no necesitara una revolución completa para acceder a la siguiente instrucción". [8] Cada instrucción contiene la dirección de la siguiente instrucción a ejecutar; en lugar de una matriz secuencial de instrucciones, la memoria parece ser una lista enlazada. SOAP optimiza colocando las instrucciones que se ejecutarán secuencialmente en ubicaciones alrededor del tambor de forma que la siguiente instrucción esté disponible lo antes posible después de que finalice la instrucción actual. Se decía que esta optimización hacía que los programas ensamblados "funcionaran hasta seis o siete veces más rápido". [1]
SOAP II admite las siguientes pseudooperaciones (directivas de ensamblaje): [2]
De acuerdo | Nombre | Descripción |
---|---|---|
Enfermo | Título | Separa programas, posiblemente escritos por separado, que se están ensamblando. Puede especificar un carácter que se agregará a los nombres de símbolos en esta sección para evitar conflictos de nombres. |
REL | Programa de Bibliotecas Reubicables | Define el inicio de un programa de biblioteca reubicable que se ensambla antes del programa principal. Especifica las cantidades en las que se deben reubicar las direcciones ensambladas. |
RBR | Reserva de bloque reubicable | Reserva un rango de ubicaciones de tambores como "bloques borrables dentro de la rutina", para evitar usar varias tarjetas para especificar un área de datos. |
REQUISITOS | Equivalencia reubicable | Equiparar un símbolo con la dirección de una subrutina reubicable y, opcionalmente, especificar una cantidad de reubicación. |
BLR | Reserva de bloque | Marca un rango de direcciones de tambor como no disponibles para su asignación por SOAP. |
BLA | Disponibilidad de bloque | Marca un rango de direcciones de tambor como disponibles para su asignación. |
REG | Especificación regional | Define un rango de direcciones de tambor como una "región", identificada por un identificador de región de un carácter . Las ubicaciones dentro de la región se especifican como <region id>nnnn, donde nnnn es un número entre 1 y la cantidad de ubicaciones especificadas para la región. |
ALF | Datos Alfabéticos | Especifica hasta cinco caracteres alfabéticos que se ensamblarán en la ubicación especificada. |
PALMADITA | Mesa de montaje de punzones | Indica a SOAP que perfore una baraja de cincuenta tarjetas de tipo Y que incluya las ubicaciones de los tambores usados y disponibles en cualquier momento durante el ensamblaje. Esta tabla se puede examinar manualmente y volver a introducir en SOAP en un ensamblaje posterior para restablecer "el estado de disponibilidad que existía en algún momento de un ensamblaje anterior". |
GOLPEAR | Inicio del programa | Indica el inicio de un nuevo programa que se ensamblará por separado de los programas anteriores en la misma baraja de cartas. |
EQU | Equivalencia | Equiparar un símbolo a un valor absoluto, regional o simbólico. |
SINÓNIMO | Sinónimo | Equivale un símbolo a una dirección absoluta de tambor. La dirección está marcada como no disponible para asignación |
Cada tarjeta de origen puede contener hasta diez caracteres de comentarios en las columnas 63 a 72. Para comentarios más largos, se pueden ingresar hasta treinta caracteres en una Tarjeta de comentarios ( Tipo 1 , '1' en la columna 41) en las columnas 43 a 72.