심볼릭 최적 어셈블리 프로그램
Symbolic Optimal Assembly ProgramSOAP(Symbolic Optimal Assembly Program)는 1954년에 처음 사용된 초기 컴퓨터인 IBM 650 Magnetic Drum Data-Processing Machine의 조립기입니다.그것은 IBM Thomas J. Watson [1]연구 센터의 Stan Poley에 의해 개발되었다.SOAP은 생성된 명령을 저장 드럼에 저장하여 명령 간의 액세스 시간을 최소화하려고 하므로 Optimal(또는 Optimal)이라고 불립니다.SOAP은 멀티패스 어셈블러입니다.즉, 오브젝트 프로그램을 생성하기 위해 소스 프로그램을 여러 번 처리합니다.
SOAP의 첫 번째 버전은 1957년 [2]SOAP II에 의해 계승되었습니다.SOAP II는 인덱스 레지스터와 자기 코어 메모리,[3] 1958년 SOAP IIA, SOAP 2L, SOAP 2L 테이프, [4]SOAP 4000 및 SOAP 42 등의 추가 하드웨어 기능을 지원했습니다.SOAP은 1957년에 [1]FOR TRANIT 컴파일러의 백엔드로 사용되었습니다.
도널드[5] Knuth는 1958년에 SOAP III, 1959년에[6] SUPRSOAP라는 이름의 버전을 현재 오하이오주 클리블랜드에 있는 케이스 웨스턴 리저브 대학의 일부인 케이스 인스티튜트에서 독자적으로 제작했습니다.허버트 하우(Herbert Howe)의 지시로 미국 국립표준국(National Bureau of Standards)도 SOAP 버전인 'ISOPAR'를 작성했는데,[7] 이 버전은 최적화를 크게 향상시킨다고 합니다.
최적화
IBM 650은 자기 드럼을 메인 스토리지로 사용합니다.드럼은 최대 4,000단어를 수용할 수 있으며 분당 12,500회전수(RPM), 회전당 4.8밀리초 또는 평균 액세스 시간 2.4밀리초로 회전합니다.「순차적으로 드럼에 명령을 배치했을 경우는, CPU가 다음의 명령을 취득할 때까지 드럼이 완전하게 회전할 때까지 기다릴 필요가 있습니다.650에서는 약 3밀리초 안에 많은 명령을 실행할 수 있기 때문에 다음 [8]명령에 액세스하는 데 드럼이 완전히 회전하지 않도록 드럼에 명령을 배치함으로써 코드를 최적화하려고 합니다."각 명령에는 실행할 다음 명령의 주소가 포함되어 있습니다.순차적인 명령 배열 대신 메모리는 링크된 목록으로 나타납니다.SOAP은 드럼 주위에 순차적으로 실행되는 명령을 배치하여 현재 명령이 종료된 후 가능한 한 빨리 다음 명령을 사용할 수 있도록 최적화한다.이러한 최적화로 인해 조립된 프로그램들이 "6~7배 [1]더 빨리 실행된다"고 한다.
SOAP 기능
의사 연산
SOAP II 에서는, 다음의 의사 조작(어셈블리 디렉티브)[2]이 서포트되고 있습니다.
동작 | 이름. | 묘사 |
---|---|---|
HED | 표제 | 조립되는 프로그램을 분리합니다(별도로 작성될 수 있음).이름 충돌을 피하기 위해 이 섹션의 기호 이름에 추가할 문자를 지정할 수 있습니다. |
반응하다 | 재배치 가능한 라이브러리 프로그램 | 메인 프로그램보다 먼저 조립되는 재배치 가능한 라이브러리 프로그램의 시작을 정의합니다.어셈블리의 주소를 재배치하는 양을 지정합니다. |
RBR | 재배치 가능한 블록 예약 | 데이터 영역을 지정하기 위해 다수의 카드를 사용하지 않도록 "루틴 내에서 삭제 가능한 블록"으로 드럼 위치를 예약합니다. |
리큐 | 재배치 가능한 동등성 | 재배치 가능한 서브루틴의 주소와 기호를 동일시하고 선택적으로 재배치 양을 지정합니다. |
BLR | 블록 예약 | 드럼 주소의 범위를 SOAP에 의한 할당에 사용할 수 없는 것으로 표시합니다. |
BLA | 블록 가용성 | 할당 가능한 드럼 주소의 범위를 표시합니다. |
레지스트 | 지역 사양 | 드럼 주소의 범위를 1 문자 영역 ID로 식별되는 "지역"으로 정의합니다.지역 내 로케이션은 <region id>nnnnnnn으로 지정됩니다.nnnnn은 1부터 해당 지역에 지정된 로케이션 수까지의 수치입니다. |
알프 | 알파벳 데이터 | 지정한 장소에서 최대 5개의 알파벳 문자를 조합할 수 있습니다. |
쓰다듬다 | 펀치 어셈블리 테이블 | SOAP에 대해 조립 중 사용 가능한 드럼 위치와 사용 가능한 드럼 위치를 기재한 50개의 타입 Y 카드 데크를 펀치하도록 지시합니다.이 테이블을 수동으로 검사하여 후속 어셈블리의 SOAP에 피드백하여 "이전 어셈블리의 어느 시점에서 존재했던 가용성 상태"를 복원할 수 있습니다. |
BOP | 프로그램 시작 | 동일한 카드 덱에서 이전 프로그램과 별도로 조립할 새 프로그램의 시작을 나타냅니다. |
EQU | 등가 | 기호를 절대값, 지역값 또는 심볼값과 일치시킵니다. |
동기 | 동의어 | 기호를 절대 드럼 주소와 동등하게 합니다.주소가 할당에 사용할 수 없는 것으로 표시되어 있습니다. |
평.
각 소스 카드에는, 63 ~72 의 열에 코멘트를 10 문자까지 포함할 수 있습니다.코멘트를 길게 하려면 코멘트 카드(타입 1, 41열의 '1') 43~72열에 최대 30자를 입력할 수 있습니다.
레퍼런스
- ^ a b c Lorenzo, Mark Jones (2019). The History of the Fortran Programming Language. p. 162. ISBN 9781082395949. Retrieved Sep 28, 2020.
- ^ a b IBM Corporation (1957). SOAP II for the IBM 650 Data Processing System (PDF). Retrieved Sep 27, 2020.
- ^ IBM Corporation (1958). IBM 650 Data Processing System Bulletin. Retrieved Sep 27, 2020.}
- ^ IBM Corporation (1961). SOAP 2L, SOAP 2L Tape, SOAP 4000, and SOAP 42 (PDF). Retrieved Sep 27, 2020.
- ^ "SOAP III". Online Historical Encyclopaedia of Programming Languages. Retrieved Sep 27, 2020.
- ^ Knuth, Donald E. (1959). SUPERSOAP Assembly System for the Augmented 650 (PDF). Retrieved Sep 27, 2020.
- ^ Howe, Herbert. ISOPAR: a new and improved symbolic optimizing assembly routine for the IBM 650 (PDF). Retrieved Sep 28, 2020.
- ^ Kugel, Herb (October 22, 2001). "The IBM 650". Dr. Dobb's. Retrieved Sep 28, 2020.