IBM Basic 어셈블리 언어 및 후속 제품

IBM Basic assembly language and successors
기본 어셈블리 언어
패러다임어셈블리어
디벨로퍼IBM
첫 등장1964
OSIBM 기본 프로그래밍 지원, 기본 운영 체제/360
면허증.공짜
어셈블러 D/E/F/G/H/XF
패러다임매크로 어셈블리어
디벨로퍼IBM
첫 등장1966
OSIBM OS/VS, DOS/VS, VM/370 및 관련
면허증.다양한
고급 어셈블러
패러다임매크로 어셈블리어
디벨로퍼IBM
첫 등장1992
안정적 해제
버전 1 릴리즈 6
OSIBM MVS/ESA 및 후속 제품, VM/ESA 및 후속 제품, VSE/ESA 및 후속 제품
면허증.고유의
웹사이트https://www.ibm.com/products/high-level-assembler-and-toolkit-feature
주요 구현
고급 어셈블러

IBM Basic 어셈블리 언어successorsIBM System/360 메인프레임 시스템과 IBM Z를 통한 successors를 위해 만들어진 일련의 어셈블리 언어어셈블리어입니다.

이 중 첫 번째인 BAL(Basic Assembly Language)은 1964년에 도입되어 IBM 기본 프로그래밍 지원(BPS/360)의 일환으로 360개 시스템에서 8KB의 메인 메모리와 입출력을 위한 카드 리더, 카드 펀치 및 프린터만 사용되는 극도로 제한된 어셈블리 언어입니다.BAL용 베이직 어셈블러는 베이직 운영 체제/360(BOS/360)의 일부로도 사용할 수 있었습니다.

그 후, 매크로 지원과 같은 더욱 강력한 기능과 사용성을 갖춘 시스템/360용 어셈블리 언어가 등장했습니다.이 언어와 이를 구현한 어셈블러 라인은 시스템/370과 그에 따른 아키텍처를 위해 계속해서 진화하여 구문을 계승하고 확장했습니다.일부 컴퓨터 업계에서는 "기본 어셈블리 언어" 또는 "BAL"이라는 일반 용어로 이를 언급했습니다.[1]그러나 많은 사람들이 그렇지 않았고 IBM 자체는 단순히 "시스템/360 어셈블러 언어",[2] 주어진 운영 체제 또는 플랫폼을 위한 "어셈블러",[3] 또는 유사한 이름으로 언급했습니다.구체적인 어셈블러는 어셈블러 E, 어셈블러 F, 어셈블러 H 등의 이름으로[a] 알려져 있었습니다.이 언어를 사용하는 프로그래머들과 이 어셈블러 제품군은 또한 이 언어들을 ALC(어셈블러 언어 코딩) 또는 간단히 "어셈블러"라고 부릅니다.

가장 최근에 파생된 언어는 IBM High-Level Assembler(HLASM)로 알려져 있습니다.

일반특성

조립 언어이기 때문에 BAL은 IBM 메인프레임 아키텍처의 기본 명령어 집합System/360을 사용합니다.

BAL의 후계자는 System/360, System/370, System/370-XA, ESA/370, ESA/390, z/Architecture 등을 포함한 IBM 메인프레임 아키텍처의 기본 명령어 세트를 사용합니다.

기계 명령의 단순성은 어셈블러로 작성된 프로그램의 소스 코드코볼이나 포트란과 같은 동등한 프로그램보다 일반적으로 훨씬 길다는 것을 의미합니다.과거에는 이러한 단점을 보완하기 위해 손으로 코딩하는 어셈블러 프로그램의 속도가 자주 느껴졌지만, 컴파일러, 메인프레임용 C 등의 최적화가 출현하면서 어셈블러는 많은 매력을 잃게 되었습니다.그러나 IBM은 어셈블러를 계속 업그레이드하고 있으며, 속도나 매우 세밀한 제어가 필요할 때 여전히 사용됩니다.그러나 BAL의 모든 IBM 후계자들은 훨씬 더 콤팩트한 소스 코드를 작성할 수 있는 정교한 매크로 기능을 포함하고 있습니다.

어셈블러를 사용하는 또 다른 이유는 모든 운영체제 기능을 고급 언어로 접근할 수 없기 때문입니다.IBM 메인프레임 운영 체제의 응용 프로그램 인터페이스는 일반적으로 슈퍼바이저 호출을 호출하는 어셈블리 언어 "macro" 명령 집합으로 정의됩니다.SVC) [예: z/OS에서] 또는 [진단](DIAG운영 체제 루틴을 호출하는 [on(예: z/VM)] 지침.어셈블러 서브루틴을 이용하여 고급 언어로 작성된 프로그램에서 운영체제 서비스를 이용할 수 있습니다.

어셈블러 문 형식

일부 프로그래머들은 IBM 360 어셈블리 언어들과 그들의 후계자들을 위해 어셈블러 코딩 양식을 사용했습니다.
키펀치 카드와 인쇄된 어셈블리 목록은 1970년대 IBM 370 어셈블리 언어 사용 중에 일반적이었습니다.

어셈블러 언어 문의 형식은 80열 천공 카드의 레이아웃을 반영하지만, 이후 버전에서는 대부분의 제한이 완화되었습니다.

  • 선택적 문 레이블 또는 이름은 열 1에서 시작하는 문자열 영숫자입니다.첫 번째 문자는 알파벳이어야 합니다.이후 버전들은 @, #, $, _를 라벨에 사용되는 법적 문자에 추가했고, 크기를 처음 6자에서 8자로, 그리고 나서 거의 무제한 길이로 늘렸습니다.
  • 연산 코드 또는 "nemonic"은 빈칸으로 구분된 1열 오른쪽 열에서 시작할 수 있습니다.작동 코드는 기계 명령어(매크로를 사용할 수 없음)일 뿐이며, 일반적으로 1, 2, 3자 또는 드물게 4자로 만듭니다.연산 코드는 최대 8자까지 사용할 수 있도록 향상되었으며, 이후에는 사실상 무제한 길이로 변경되었습니다.
  • 피연산자 필드는 피연산자 코드의 오른쪽에 있는 열에서 시작할 수 있으며, 피연산자 코드와 빈칸으로 구분됩니다.공백은 문자 상수를 제외하고 피연산자에서 잘못되었습니다.하나 이상의 피연산자로 구성된 피연산자 필드는 연산 코드에 따라 선택 사항입니다.
  • 피연산자 필드 오른쪽에는 선택적 주석이 적어도 하나의 공백으로 구분되어 나타날 수 있습니다.
  • 기본 어셈블리 언어에서는 문을 계속할 수 없습니다.이후 버전의 어셈블러는 문장의 72번째 열에 공백이 아닌 문자가 계속되는 것으로 표시됩니다.Basic Assembly Language(기본 어셈블리 언어)에서는 72열을 비워 두어야 합니다.
  • "전체 카드 주석"은 열 1에 별표(*)로 표시됩니다.
  • 식별-시퀀스 필드라고 불리는 카드 열 73-80은 프로그래머가 어떤 목적으로든 사용할 수 있지만 일반적으로 뒤섞인 카드 덱을 사용하기 위한 시퀀스 번호를 포함합니다.

Basic Assembly 언어는 25열로 시작하는 문장 형식을 대체할 수 있으며, 1열로 시작하는 동일한 카드에 조합된 명령을 입력할 수 있습니다.이 옵션은 이후 버전의 어셈블러에서는 계속되지 않았습니다.

명령어의 종류

어셈블러로 작성된 프로그램의 소스 코드에는 크게 세 가지 종류의 명령어가 있습니다.

조립자 설명서

어셈블러 명령어는 때때로 명령어, 의사 연산 또는 다른 시스템의 의사 연산이라고도 불리며, 코드 생성 과정 중에 다양한 연산을 수행하도록 어셈블러에 요청하는 것입니다.예를 들어.CSECT"여기서 코드 섹션을 시작합니다"를 의미합니다.DSECT구조물에 대한 데이터 정의를 제공하지만 코드는 생성하지 않습니다.DC객체 코드에 넣을 상수를 정의합니다.

더 중요한 어셈블러 지침 중 하나는USING, S/360 아키텍처의 절단된 어드레싱을 지원합니다.조립자가 상대 주소에 사용할 기본 레지스터와 오프셋을 결정할 때 안내합니다.BAL에서는 형식에 한정되어 있었습니다.

         기본값, reg-1,..., reg-

S/360의 기계 명령어 주소는 기본 레지스터의 값에서 변위(0-4095바이트)를 지정합니다. 이후 버전의 아키텍처는 상대 주소 형식을 추가했지만, 이전 형식은 여전히 많은 명령어에서 사용됩니다.USING프로그래머는 지정된 베이스 레지스터들이 "베이스", 베이스+4096 (여러 레지스터가 지정된 경우) 등의 주소를 포함하는 것으로 가정함을 어셈블러에게 전달할 수 있습니다.이것은 프로그래머에게 바로 가기를 제공할 뿐이며, 프로그래머는 그렇지 않으면 각 명령에서 기본 레지스터를 지정해야 합니다.프로그래머들은 이 값에 의존하는 코드를 쓰기 전에 실제로 "베이스"의 주소를 레지스터에 로드할 책임이 있습니다.

관련된DROPassembler 명령은 이전 명령을 무효화합니다.USING.

기계 설명서(메모닉)

기계 설명서와 일대일 관계가 있습니다.전체 메모리 명령 집합은 각 명령 집합에 대한 작동[4] 원리 매뉴얼에 설명되어 있습니다.예:

*  댓글 줄입니다 * 'Z'라는 * 위치에 저장된 전체 단어 정수를 로드합니다IGGY'를 일반 레지스터 3으로 이동합니다. L 3,ZIGGY SLA 4,5는 5비트 MVC TARGET에 의해 남겨진 일반 레지스터 4의 값을 이동합니다. SOURCE는 위치 'SOUR'에서 'TARGET' AP COUNT로 문자 이동,=P'1'은 메모리 위치 'COUNT'(패키드 십진법 형식)의 값에 1을 추가합니다. B NEXT 무조건 분기를 통해 'NEXT' EQU를 라벨링합니다.=C'ADDESS' 프로그램 레이블 'THERE'와 동일한 경우 메모리 위치 'TARGET'을 문자열 'ADDESS' BE THERE 분기와 비교합니다.

일반적으로 인정되는 표준은 의무 사항은 아니지만 일반적인 목적 등록부를 기억법으로 식별하는 것을 포함합니다.X86 어셈블리 언어와 같은 일부 다른 시스템의 어셈블러와 달리 레지스터 니모닉은 예약 기호가 아니지만 다음을 통해 정의됩니다.EQU프로그램의 다른 곳에 있는 진술.이것은 어셈블러 언어 프로그램의 가독성을 향상시키고 레지스터 사용에 대한 상호 참조를 제공합니다.따라서 일반적으로 어셈블러 프로그램에서 다음을 볼 수 있습니다.

 R3 EQU 3 ...LR3,ZIGGY

몇 가지 주목할 만한 명령어 기억법은 다음과 같습니다.BALR[b] 반송 주소와 상태 코드를 레지스터에 저장하는 통화의 경우,SVC,[c] DIAG,[d]그리고[d]ZAP.[5]

시스템/360 컴퓨터 명령어는 1개, 2개 또는 3개의 하프 워드(2~6바이트)입니다.원래는 연산 코드 필드의 처음 두 비트로 지정된 4개의 명령어 형식이 있었고 z/Architecture는 추가 형식을 추가했습니다.

매크로 및 조건부 어셈블리

기본 프로그래밍 지원 어셈블리에서 매크로를 지원하지 않습니다.어셈블러 D로[6] 시작하는 그 이후의 어셈블러 버전들은 프로그래머가 명령어들을 매크로로 그룹화하여 라이브러리에 추가할 수 있게 해주는데, 이 명령어들은 C의 전처리기 기능이나 관련 언어들과 같은 다른 프로그램들에서 보통 매개변수들과 함께 호출될 수 있습니다.매크로는 다음과 같은 조건부 조립자 명령을 포함할 수 있습니다.AIF('if' 컨스트럭트), 선택한 파라미터에 따라 다른 코드를 생성하는 데 사용됩니다.그것은 이 조립자의 매크로 설비를 매우 강력하게 만듭니다.C의 다중 행 매크로는 예외이지만 어셈블러의 매크로 정의는 쉽게 수백 행이 될 수 있습니다.

운영 체제 매크로

대부분의 프로그램은 운영체제에서 서비스를 필요로 하며, OS는 이러한 서비스를 요청하기 위한 표준 매크로를 제공합니다.이는 유닉스 시스템 호출과 유사합니다.예를 들어, MVS(이후 z/OS)에서,STORAGE(와 함께)OBTAINparameter) 메모리 블록을 동적으로 할당하고,GET파일에서 다음 논리 레코드를 검색합니다.

이러한 매크로는 운영 체제에 의존적입니다. IBM 메인프레임 어셈블리 언어는 여러 상위 언어와 달리 메모리 할당, I/O 작업 수행 등을 위해 운영 체제에 독립적인 문이나 라이브러리를 제공하지 않으며, 시스템 서비스 수준에서는 다양한 IBM 메인프레임 운영 체제가 호환되지 않습니다.예를 들어, 순차 파일을 작성하는 경우 z/OS와 z/VSE에서 다르게 코딩됩니다.

다음 조각은 어셈블러에서 "SEX = 'M'이면 MALES에 1을 추가하고, 그렇지 않으면 MALES에 1을 추가한다"는 논리를 어떻게 수행하는지 보여줍니다.

          CLIX, C'M' Male?BNE IS_FEM 그렇지 않으면 L 7을 중심으로 분기하여 MALES의 전류 값을 레지스터 7 LA에 로드 7,1(7) 추가 후 결과 B GO_ON 이 부분으로 완료 IS_FEM EQU * 라벨 L 7,FEME MALES의 전류 값을 레지스터 7 LA에 로드 7,1(7) 추가 후 1 ST 7,여성은 결과 GO_ON EQU * - 프로그램의 나머지 부분 - * 남성의 경우 남성 DC F'0' 카운터(initially=0) 여성 DC F'0' 카운터(initially=여성 DC F'0' 카운터(initially=0)

다음은 유비쿼터스 Hello world 프로그램으로 OS/VS1 또는 MVS와 같은 IBM 운영 체제에서 실행되는 'Hello world'라는 단어를 운영자의 콘솔에 표시합니다.

 HELLO CTECT 이 프로그램의 이름은 'HELLO' * OPSYS 또는 발신자의 입장 시 15점을 여기에 등록합니다.STM 14,12,12(13) 발신자 저장 영역 LR 12,15 프로그램의 진입점 주소로 기본 레지스터 설정 HELLO,12 우리 자신의 저장 영역 ST 15,8(13) 전방 체인 ST 13,4(15) 후방 체인 LR 13,15 새로운 sa 주소로 R13 설정ve area * - 하우스키핑 종료 (대부분 프로그램 유사) - WTO '헬로월드' Write To Operator (Operating System macro) * L 13,4(13) 주소를 발신자 제공 저장 영역으로 복원 XC 8(4,13),8(13) 전방 체인 LM 14,12,12(13) 항목 그대로 복원 DROP 12 'USING' SR 15의 반대,15 반환 코드(R15)가 Zero BR 14가 되도록 레지스터 15를 0으로 설정 발신자에게 반환 * SAVE DS 18F 호출 프로그램 레지스터 저장을 위한 풀워드 18개 정의 END HELLO 프로그램 종료입니다

WTO는 운영 체제 호출을 생성하는 어셈블러 매크로입니다.레지스터를 저장하고 나중에 복원 및 반환하기 때문에 이 작은 프로그램은 다음과 같이 운영 체제 JCL(Job control language)에서 직접 호출하는 배치 프로그램으로 사용할 수 있습니다.

// EXEC PGM=HELLO 

또는 이러한 프로그램에서 서브루틴(subroutine)으로 호출할 수도 있습니다.

 'HELLO'로 전화하기

버전

Assembler G에 대한 식별 페이지를 보여주는 배치 작업 출력물

IBM System/360 Model 20용 어셈블러를 제외하고 IBM 어셈블러는 대부분 상향 호환되었습니다.차이는 주로 허용되는 표현의 복잡성과 매크로 처리에 있었습니다.OS/360 어셈블러는 원래 메모리 요구사항에 따라 지정되었습니다.

기본 프로그래밍 지원 어셈블리

BPS용 어셈블러는 진정한 "기본 어셈블러"입니다.8KB 시스템/360(모델 20 제외)에서 실행될 예정이며, 카드에서 로드되도록 설계되었습니다.매크로 명령이나 확장된 니모닉(조건 코드 2가 높은 비교를 나타내는 경우 분기할 BC 2 대신 BH와 같이)에 대한 지원이 없습니다.단일 컨트롤 섹션만 조립할 수 있고 더미 섹션(구조 정의)은 허용하지 않습니다.괄호로 묶은 표현은 사용할 수 없으며 '+', '-', '*'[7]: 59–61 로만 표현되는 세 개의 항으로 제한됩니다.

기본 운영 체제 어셈블러

기본 운영 체제에는 두 가지 어셈블러 버전이 있습니다.둘 다 16KB의 메모리가 필요합니다. 하나는 테이프 상주형이고 다른 하나는 디스크입니다.[8]: 7–8

어셈블러 D

어셈블러 D는 메모리 크기가 16KB인 기계를 위한 DOS/360 어셈블러였습니다.두 가지 버전으로 출시되었습니다.메모리가 최소 16KB인 시스템의 경우 10KB 변종, 24KB인 시스템의 경우 14KB 변종.64KB 이상의 도스 머신에 대해서도 F 레벨 어셈블러를 사용할 수 있었습니다.D 어셈블러는 더 높은 버전의 거의 모든 기능을 제공했습니다.[9]: 7

조립자 E 및 F

어셈블러 E는 최소 32KB의 메인 스토리지를 갖춘 OS/360 시스템에서 실행되도록 설계되었으며, 어셈블러 자체는 15KB가 필요했습니다.[10]: 2 어셈블러 F는 64KB 메모리의 시스템에서 DOS/360 또는 OS/360에서 실행할 수 있으며, 어셈블러는 44KB가 필요합니다.[11][12][13]이러한 어셈블러는 OS/360의 표준 부분이며, 생성된 버전은 시스템 생성(SYSGEN) 시 지정되었습니다.

어셈블러 H

어셈블러 H는 OS/360과 그 후속 제품에서 동작합니다. 어셈블러 F보다 더 빠르고 강력했지만 매크로 언어는 완벽하게 호환되지 않았습니다.

Assembler H Version 2는 1981년에 발표되었으며 확장 아키텍처(XA)에 대한 지원을 포함하고 있습니다.AMODE그리고.RMODE훈령[14]: 3-28 1994년 마케팅에서 철수하고 1995년 지원이 종료되었습니다.하이 레벨 어셈블러로 대체되었습니다.[15]

어셈블러 XF

어셈블러 XF는 새로운 시스템/370 아키텍처 지침이 포함된 어셈블러 F의 대부분 호환되는 업그레이드입니다.이 버전은 OS/VS, DOS/VS 및 VM 시스템을 위한 공통 어셈블러를 제공합니다.다른 변화에는 표현식 및 매크로 처리에 대한 제한 완화가 포함됩니다.어셈블러 XF에는 64KB(가상)의 최소 파티션/영역 크기가 필요합니다.권장 사이즈는 128KB 입니다.[16]: 73

고급 어셈블러

하이 레벨 어셈블러(High Level Assembler) 또는 HLASM은 1992년 6월 IBM의 어셈블러 H 버전 2를 대체하여 출시되었습니다.[17][18]시스템/370 및 시스템/390의 기본 변환기였으며 MVS, VSE 및 VM 운영 체제를 지원했습니다.2023년 현재 z/OS, z/VSE, z/VMz/TPF 운영 체제를 위한 IBM의 현재 어셈블러 프로그래밍 언어입니다.릴리스 6 이상은 Linux에서도 실행되며 ELF 또는 GOFF 개체 파일을 생성합니다(이 환경을 IBM Z에서는 Linux라고 부르기도 함).[19]IBM에서 일하는 동안 존 로버트 어먼(John Robert Ehrman[e])은 HLASM의 개발 책임자였으며 "고급 어셈블러의 아버지"로 여겨집니다.[21]

이름에도 불구하고, HLASM 자체에는 일반적으로 고급 어셈블러와 관련된 많은 기능이 없습니다.이 이름은 사용자 정의 함수를 작성하는 기능과 같은 추가 매크로 언어 기능에서 비롯될 수 있습니다.어셈블러는 SLAC(Stanford Linear Accelerator) 수정 사항을 통합한 어셈블러 H 및 어셈블러(XF)와 대부분 유사합니다.추가된 기능 중에는 다음과 같은 표시가 있습니다.CSECT/DSECT위치 카운터의 경우 종속적이고[f] 라벨이[g] 붙어 있습니다. USING문, 목록USING변수가 교차 참조에서 읽히거나 쓰이는지를 나타내는 현재 활성 상태의 문장, 그리고 혼합 대소문자 기호 이름을 허용하는 것.[22]RSECT지시문(읽기 전용 제어 섹션)을 사용하면 어셈블리에서 단면 단위로 재진입을 확인할 수 있습니다.RSECT는 이전에 "어셈블러 H에서 문서화되지 않고 일관성 없이 구현"되었습니다.[23]: 41

고급 어셈블러 툴킷

High Level Assembler Toolkit는 High Level Assembler에 별도로 가격이 책정된 부속품입니다.툴킷의 내용은 다음과 같습니다.[24]

  • 구조화된 프로그래밍 매크로 세트 -
    • IF/ELSE/ENDIF
    • 작업/종료 작업
    • STRTSRCH/ORELSE/END 루프/ENDRCH
    • CASENT/CASE/ENDCASE
    • 선택/WHEN/OTHRISE/ENDSEL.
  • 분해기.
  • "프로그램 이해 도구"(재공학 지원).
  • 소스 XREF 유틸리티(교차 참조 설비).
  • 대화형 디버그 기능.
  • 향상된 SuperC(소스 비교 도구).

전문화 버전

7090/7094 서포트 패키지 조립기

SUPAK로 알려진 IBM 7090/7094 지원 패키지는 "시스템 360용으로 작성된 프로그램을 IBM 709, 7090, 7094 또는 7094 II에서 조립, 테스트 및 실행할 수 있도록 설계된 세 가지 프로그램으로 구성됩니다."

이 크로스 어셈블러는 7090 또는 7094 시스템에서 실행되며 System/360이 개발되는 동안 사용되었습니다.[7][25]이 어셈블러는 6비트 BCD 문자 집합과 8비트 EBCDIC를 지원합니다.

IBM 시스템/360 모델 20 어셈블리

IBM은 모델 20에 모델 20 기본 어셈블러와 모델 20 DPS/TPS 어셈블러 두 개의 어셈블러를 공급했습니다.두 가지 모두 모델 20에서 사용할 수 있는 고유 지침을 포함한 지침만 지원했습니다.CIO,TIO,XIOB,SPSW,BAS,BASR,그리고.HPR.[26]Basic[26]: 110 Assembler는 System/360 Basic Assembler의 약간 더 제한된 버전입니다.[27] 특히 기호의 길이는 4자로 제한됩니다.이 버전은 4KB 메모리의 시스템에서 실행할 수 있으며 매크로 지원은 IOCS 매크로로 제한됩니다.카드 버전은 카드 입출력만 지원하는 2패스 어셈블리입니다.테이프 상주형 버전은 중간 저장을 위해 마그네틱 테이프를 사용하는 원패스 방식입니다.CPS Assembler로 조립된 프로그램은 최대 16KB를 처리할 수 있습니다.[27]: 7–8

DPS/TPS Assembler는 System/360 BPS/BOS Assembler의 다소 제한된 버전입니다.[26]: 132–134

IBM 시스템/360 모델 44 PS 어셈블러

IBM System/360 Model 44 프로그래밍 시스템 어셈블러는 OS/360 및 DOS/360 어셈블러 언어의 "선택된 하위 집합"인 언어를 처리합니다.

가장 중요한 것은 모델 44 어셈블러가 매크로와 계속 문을 지원하지 않는다는 점입니다.반면에 다른 시스템/360 어셈블리에는 없는 많은 기능이 있습니다. 특히 카드 이미지 소스 데이터 세트를 업데이트하기 위한 지침이며, 이름은 공통이고 암묵적인 정의입니다.SETA어셈블러 변수.[28]

SS(Storage-to-Storage) 명령이나 이진법으로 변환하는 방법을 지원하지 않습니다.CVB, 10진수()로 변환합니다.CVD), 직접 읽습니다(RDD) 및 직접 쓰기(WRD) 지침.[29]여기에는 모델 44에 고유한 4가지 지침이 포함되어 있습니다: 우선 순위 마스크 변경(CHPM, PSW 특수 로드(LPSX, 직접 단어 읽기()RDDW) 및 직접 단어 쓰기()WRDW).

다른 시스템의 유틸리티 프로그램이 수행하는 기능인 소스 프로그램을 업데이트하라는 지시도 포함되어 있습니다(SKPTO,REWND,NUM,OMIT그리고.ENDUP).[29]: 53, 73

IBM 시스템/360 TSS 어셈블러

System/360 Model 67 Time Sharing System용 어셈블러는 고유한 TSS 기능을 지원하기 위해 여러 가지 지시 사항에 차이가 있습니다.PSECT지시는 재배치 가능한 주소 상수와 프로그램에서 사용되는 수정 가능한 데이터를 포함하는 프로토타입 제어 섹션을 생성합니다.[30]: 143

어셈블러 G

어셈블러 G는 1970년대 워털루 대학교에서 어셈블러 F를 수정한 것입니다.향상된 기능은 대부분 입력/출력을 더 잘 처리하고 버퍼링을 개선하여 어셈블리 속도를 크게 높였습니다.[31]"어셈블러 G"는 결코 IBM 제품이 아니었습니다.

비IBM 조립기

특수 환경을 위한 IBM 호환 어셈블리가 여러 개 있었습니다.[32]

  • UnisysUnivac 90/60, 90/70, 90/80 시리즈는 기계 시리즈가 S/360 및 S/370과 유사한 작업이었기 때문에 IBM 형식의 어셈블러를 수용하도록 설계되었습니다.
  • 후지쯔 BS2000 시리즈 역시 유니백과 동일한 자원에서 370 작품으로 제작되었으며, 유럽 일부 지역에서 여전히 사용되고 있습니다.[33]
  • Dignus LLC Systems/ASM은 IBM 시스템에서 기본적으로 실행되거나 교차 어셈블러로 실행될 수 있는 HLASM 호환 어셈블러입니다.[34]
  • 돈 히긴스(Don Higgins)가 쓴 프리웨어 PC/370은 나중에 마이크로 포커스(Micro Focus)에 의해 구입되었습니다.
  • z390은 돈 히긴스(Don Higgins)가 작성한 어셈블러이자 시스템 390 에뮬레이터이며 자바로 프로그래밍되어 있습니다.오픈 소스이며 http://www.z390.org/ 에서 이용할 수 있습니다.
  • Penn State University에서는 시스템 370 어셈블리와 인터프리터가 포함된 AIST라는 패키지를 개발했습니다.
  • Tachyon Software LLC는 Windows, Linux/x86, Linux for S/390 및 zSeries, AIX 및 Solaris에서 실행되는 Tachyon Assembler Workbench를 시판합니다.[35]
  • GNU 어셈블러(gas)는 OS/390IBM Z의 리눅스용 GNU 컴파일러 모음(gcc)의 일부입니다.이 어셈블러는 IBM 아키텍처의 다른 어셈블러와 호환되지 않는 고유한 구문을 가지고 있습니다.

중요성

원래 모든 시스템/360 운영 체제는 어셈블러 언어로 작성되었으며 모든 시스템 인터페이스는 매크로 정의에 의해 정의되었습니다.고급 언어(HLL)로부터의 액세스는 해당 언어가 제공하는 것으로 제한되었고, 다른 시스템 호출은 HLL 프로그램에서 호출되는 어셈블러 서브루틴으로 코딩되어야 했습니다.또한 IBM은 일반 OS 기능을 확장하거나 변경할 수 있는 사용자 제공 루틴인 Exits(Exits)라는 설치를 통해 OS 기능을 사용자 정의할 수 있도록 했습니다.이 출구들은 어셈블러 언어로 코딩되어야 했습니다.나중에 IBM은 OS/360을 시스템 프로그래밍 언어인 PL/S로 녹음했지만 짧은 시험을 제외하고는 PL/S 컴파일러를 사용자에게 공개하지 않기로 결정했습니다.이러한 요인들로 인해 어셈블러 언어는 수년간 IBM 시스템에서 상당한 사용이 이루어졌습니다.

참고 항목

메모들

  1. ^ IBM은 소프트웨어의 목표 크기를 문자로 표시합니다.
    • D 16 KiB
    • E 32 키브
    • F 64 KiB
    • G 128KiB
    • H 256 KiB
    • I 512 KiB
  2. ^ BALR의 대부분의 용도는 다음과 같이 대체되었습니다.BASR그리고 비슷한 지시사항들이 있습니다.
  3. ^ 의 여러 용도SVCA로 대체되었습니다.PC설명.
  4. ^ VM 용도 변경DIAG…로서HVC설명.
  5. ^ HLASM은 Assembler H에 대한 Greg Mushial의 향상된[20] 기능을 지원 제품에 통합하기 위한 SHARE 요구 사항을 준수했습니다.
  6. ^ 부양가족USING는 레지스터 목록 대신 재배치 가능한 식을 지정합니다.
             IHADCB, 시스템프린트 사용...TM DCBOPTCD, 시스템 프린트의 DCBOPTC 테스트 OPTCD...
  7. ^ 라벨이 붙은USING는 식에 레이블을 지정하여 명시적으로 참조하는 명령에만 영향을 미칩니다.
             LAR4, SYSIN LAR5, 시스템프린트 IHADCB, R4 Out IHADCB, R5...TMIN.DCBOFLGS, 시스템에서 DCBOFTM 테스트...TMOUT.DCBOPTCD, 시스템 프린트의 DCBOPTC 테스트 OPTCD...

참고문헌

  1. ^ 예를 들어 다음을 참조하십시오.McQuillen, Kevin (1975). System/360–370 Assembler Language (OS). Fresno, California: Mike Murach & Associates. p. 17. LCCN 74-29645.
  2. ^ 예를 들면.
  3. ^ 예를 들어, "옐로우 카드"에서 OS/VS, VM/370 및 DOS/VS용으로 표시된 폴드아웃의 여섯 번째 페이지: 제 4판.
  4. ^ IBM System/360 Principles of Operation (PDF). IBM Systems Reference Library. IBM Corporation. A22-6821-0. Retrieved Dec 6, 2018.
  5. ^ "HLASM - List of all Opcodes, Extended Mnemonics and Function Codes, Sorted by Mnemonic". Retrieved January 14, 2013.
  6. ^ "IBM System/360 Basic Programming Support" (PDF). bitsavers. p. 61. Retrieved 6 September 2023.
  7. ^ a b IBM System/360 Basic Programming Support Basic Assembler Language (PDF). IBM Systems Reference Library. IBM Corporation. February 1965. C20-6503-0. Retrieved April 5, 2022.
  8. ^ IBM System/360 Basic Operating System Language Specifications Assembler (16K Disk/Tape) (PDF). IBM Systems Reference Library. IBM Corporation. December 1965. C24-3414-1. Retrieved April 5, 2022.
  9. ^ IBM Corporation (1970). IBM System/360 Disk and Tape Operating Systems Assembler Language (PDF).
  10. ^ IBM System/360 Operating System Assembler (32K) Program Logic Manual (PDF). IBM. 1966. Y26-3598-0.
  11. ^ IBM System/360 Disk Operating System Assembler [F] Program Logic (PDF). IBM. 1968. Y26-3716-0.
  12. ^ IBM System/360 Operating System Assembler (F) Program Logic (PDF). IBM. 1971. GY26-3700-2.
  13. ^ OS Assembler Language, OS Release 21 (PDF). IBM. 1974. GC28-6514-9.
  14. ^ IBM Corporation (1984). MVS/Extended Architecture Conversion Notebook (PDF).
  15. ^ IBM Corporation (20 December 1996). "5668-962 IBM Assembler H Version 2 Release 1.0". Retrieved October 8, 2012.
  16. ^ IBM Corporation (1973). OS/VS Assembler Programmer's Guide (PDF).
  17. ^ IBM Corporation. "IBM High Level Assembler and Toolkit Feature - Release History". Retrieved October 21, 2012.
  18. ^ IBM Corporation (5 May 1992). "Announcement Letter 292-244: IBM HIGH LEVEL ASSEMBLER/MVS & VM & VSE". Retrieved October 21, 2012.
  19. ^ IBM Corporation (2008). High Level Assembler for Linux on zSeries User's Guide (PDF).
  20. ^ Greg Mushial (July 20, 1983), "Module 24: SLAC Enhancements to and Beautifications of the IBM H-Level Assembler for Version 2.8", SLAC VM NOTEBOOK, Stanford Linear Accelerator Center
  21. ^ "Guide to the John R. Ehrman collection". Online Archive of California. X5621.2010. Archived from the original on 2022-10-15. Retrieved 2022-10-15. [1]
  22. ^ "IBM HIGH LEVEL ASSEMBLER/MVS & VM & VSE". Announcement letters. IBM Corporation. May 5, 1992. 292-244. Retrieved October 8, 2012.
  23. ^ IBM High Level Assembler for MVS & VM & VSE Release 2 Presentation Guide (PDF). Redbooks. IBM. December 1995. SG24-3910-01. Archived from the original (PDF) on 2016-01-23. Retrieved September 29, 2023.
  24. ^ IBM Corporation. "Toolkit Feature components". IBM. Retrieved September 5, 2023.
  25. ^ IBM 7090/7094 Support Package for IBM System/360 (PDF). IBM Systems Reference Library. IBM Corporation. November 1964. C28-6501-2. Retrieved April 5, 2022.
  26. ^ a b IBM Corporation (April 1970). IBM System/360 Model 20 Disk and Tape Programming Systems Assembler Language (PDF). Retrieved October 2, 2023.
  27. ^ a b IBM Corporation (May 1969). IBM System/360 Model 20 Card Programming Support Basic Assembler Language (PDF). Retrieved October 2, 2023.
  28. ^ IBM Corporation (1966). IBM System/360 Model 44 Programming System Assembler Language (PDF). p. 73. Retrieved July 2, 2019.
  29. ^ a b IBM Corporation (1966). IBM System/360 Model 44 Programming System Assembler Language (PDF).
  30. ^ IBM Corporation (1976). IBM Time Sharing System Assembler Programmer's Guide (PDF).
  31. ^ Stanford Linear Accelerator Center. "GENERALIZED IBM SYSTEM 360 SOFTWARE MEASUREMENT (SLAC-PUB-715)" (PDF). Retrieved October 8, 2012.
  32. ^ Alcock, David. "Dave's z/Architecture Assembler FAQ". Planet MVS. Retrieved December 15, 2012.
  33. ^ Fujitsu ASSEMH 설명서는 http://manuals.ts.fujitsu.com/index.php?id=1-2-2926-15435 에서 구할 수 있습니다(검색된 2016-02-27).
  34. ^ Dignus, LLC. "Systems/ASM". Retrieved December 15, 2012.
  35. ^ Tachyon Software LLC. "Tachyon Software". Retrieved December 15, 2012.

외부 링크