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]
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.