Symbolic Assembly Program

The Symbolic Assembly Program (SAP) is an assembler program for the IBM 704 computer. It was written by Roy Nutt at United Aircraft Corporation, and was distributed by the SHARE user's group beginning in 1956 as the Share Assembly Program. SAP succeeded an earlier program called NYAP1 (New York Assembly Program 1), which it closely resembled, and became the standard assembler for 704 users. It "set the external form of an assembly language that was to be a model for all its successors and which persists almost unchanged to the present day."

DARSIMCO, short for Dartmouth Simplified Code, was a simple programming language written by John Kemeny (who later co-developed BASIC) in 1956 that expanded simple mathematical operations into a program that would then be assembled by SAP.

Description
SAP is a two-pass assembler. It is capable of running on a 704 with a minimum of 4 K 36-bit words of core storage. This configuration allows up to 1097 entries in the symbol table. Additional core memory beyond 4 KW can be used to allow for additional symbol table entries.

Input and output for SAP are via punched cards or card images on tape. Input is in fixed format.

Output format
Output consists of absolute or relocatable punched cards or card images. The output is binary data in the twelve card rows 12, 11, and 0–9. Each row contains two 36-bit words in columns 1-36 and 37-72, indicated as left (L) and right (R) respectively. Data is conventionally numbered by row and position, for example, columns 1 to 36 of row 9 are designated 9L, columns 37 to 72 of the same row are 9R. Within a word the bits are designated, from left to right as S (sign bit) and 1-35, thus bit position 13 of the left word in row 6 is designated 6L13.

Word 9L of each card is a control word, and 9R is an optional checksum. The control word contains bits indicating, for example, whether the data on the card is absolute or relocatable, whether or not a checksum is present, the absolute or nominal location of data on this card, and a count of the number of words of data contained on this card.