The Symbolic Optimal Assembly Program (SOAP) is an assembler for the IBM 650 Magnetic Drum Data-Processing Machine, an early computer first used in 1954. It was developed by Stan Poley at the IBM Thomas J. Watson Research Center.[1] SOAP is called "Optimal" (or "Optimum") because it attempts to store generated instructions on the storage drum to minimize the access time from one instruction to the next. SOAP is a multi-pass assembler, that is, it processes the source program more than once in order to generate the object program.
The first version of SOAP was succeeded by SOAP II in 1957,[2] which supported additional hardware features such as index registers and magnetic core memory, then SOAP IIA in 1958,[3] SOAP 2L, SOAP 2L Tape, SOAP 4000, and SOAP 42 in 1961.[4] SOAP was used as a backend to the FOR TRANSIT compiler in 1957.[1]
Donald Knuth independently produced versions named SOAP III in 1958[5] and SUPERSOAP in 1959[6] at Case Institute of Technology, now part of Case Western Reserve University in Cleveland, Ohio. The US National Bureau of Standards, under the direction of Herbert Howe, also wrote a version of SOAP, called ISOPAR, said to significantly improve optimization.[7]