IBM Macro Assembler를위한 "고급 프로그래밍"매크로 패키지가 있었습니까?

Nov 21 2020

IBM / 360 매크로 어셈블리 언어는 매우 강력하여 사소한 컴파일 시간 문자열 조작이 가능했습니다.

중위 형식으로 표현식을 작성하고, 구조화 된 프로그래밍 형식을 허용하고, 서브 루틴 호출 규칙을 표준화하고, 비트 필드에 편리하게 액세스하는 등 (약간) 상위 수준에서 프로그래밍을 용이하게하는 매크로 패키지가 있었습니까?


BESM-6 어셈블리 언어 중 하나가 매크로 언어를 포함하여 IBM / 360 어셈블러의 구문 수준 포트 였는지 묻는 이유는 다음과 같습니다.

 macro
 mnop &a,&b,&c,&d,&e,&f,&g,&h
 aif (&a eq '').x
 gbla &cnt  global arith. variable
 mnote * comment &cnt
&cnt seta &cnt+1 
 nop &a
 mnop &b,&c,&d,&e,&f,&g,&h
.x anop
 mend
 MNOP  FIRST,SECOND,THIRD,FOURTH

확장

 0001  0001        MACRO
 0002  0002        MNOP  &A,&B,&C,&D,&E,&F,&G,&H
 0003  0003        AIF   (&A EQ ’’).X
 0004  0004        GBLA  &CNT GLOBAL ARITH. VARIABLE
 0005  0005        MNOTE * COMMENT &CNT
 0006  0006 &CNT   SETA  &CNT+1
 0007  0007        NOP   &A
 0008  0008        MNOP  &B,&C,&D,&E,&F,&G,&H
 0009  0009 .X     ANOP
 0010  0010        MEND
 0011  0011        MNOP  FIRST,SECOND,THIRD,FOURTH
 0012  0005 * COMMENT 0
 0013 +0007+       NOP   FIRST
 0014  0005 * COMMENT 1
 0015 +0007+       NOP   SECOND
 0016  0005 * COMMENT 2
 0017 +0007+       NOP   THIRD
 0018  0005 * COMMENT 3
 0019 +0007+       NOP   FOURTH

그러나 "상위 수준"프로그래밍을위한 사전 컴파일 된 매크로 패키지 (아마도 적절한 아키텍처에 따라 수정 된 IBM / 360에서 이식 된 것 같음)가 없습니다.

다음은 패키지의 매크로를 사용하는 몇 가지 예입니다.

RЕG (М1 = 1,М2 = 2,М3 = 3,М4 = 4,М5 = 5)
КТ1 ВINDА (А(PAGE1)+KMD+М14)
FКТ3 SТRIТ (NCMD,0,0,8),(NARCH,0,40,8),(SND,0,16,8)
ЕХРR (FNM = $) FILE NAME
ЕХРR (SND = (OWNER,ADDR)) SENDER
ЕХРR (NUMREQ = (OWNER,REQ)) REQUEST NUMBER
IFА (QUEUE),Z=DISCRD NO REQUEST

가장 독특한 매크로 이름에 대한 웹 검색 BINDA하고하는 것은 STRIT도움이되지 않습니다.

IBM / 360 매크로 어셈블러에 대해 이러한 매크로 또는 유사한 매크로가 포함 된 매크로 패키지가있는 경우 소스 코드에 액세스하는 것이 큰 도움이 될 것입니다.

답변

5 Raffzahn Nov 21 2020 at 05:37

IBM / 360 매크로 어셈블리 언어는 매우 강력하여 사소한 컴파일 시간 문자열 조작이 가능했습니다.

글쎄, 일반적인 문자열 조작 언어와 유사성이 없기 때문에 "문자열 조작"으로 줄이면 부족할 수 있습니다. 다소 완전한 명령형 프로그래밍 언어입니다. 프로그램은 '어셈블'될 때 실행됩니다. 형식화 된 전역 및 지역 변수 (bool, 정수, 문자열), 배열 (어셈블러 버전에 따라 다름) 등을 제공합니다.

(약간) 더 높은 수준에서 프로그래밍을 용이하게하는 매크로 패키지가 존재 했습니까?

단지 '약간'더 높은 것이 아닙니다.

중위 형식으로 표현식을 작성하고, 구조화 된 프로그래밍 형식을 허용하고, 서브 루틴 호출 규칙을 표준화하고, 비트 필드에 편리하게 액세스하는 등의 작업을 수행 할 수 있습니다.

구조화 된 프로그래밍 (호출 규칙 및 데이터 구조 포함)의 경우 스택리스 머신의 스택에 대한 질문에 이미 답변이 있습니다.

하드웨어 스택이없는 아키텍처에 C를 어떻게 이식 했습니까?


더미 프로그램의 예, 함수 호출 및 결과 확인, 답변에서 복사 :

    @ENTR TYPE=M,NAME=MAIN  ** Main programm, execution starts here
    ...
    @PASS NAME=FUBAR,PLIST=(FCB,RECORD)
    @IF   NE
    LTR   R15,R15         * Return Code Not Zero?
    @THEN
    @EXIT RC=#UNSATISFIED * Finish Program with Return Code UNSATISFIED
    @BEND
    ...
    @EXIT RC=#HAPPYENDING * Finish Program with Return Code HAPPYENDING
    @END


    @ENTR TYPE=L,NAME=FUBAR,PLIST=(FCB,RECORD)  * Function FUBAR, called by MAIN
    ...
    (do whatever needed with FCB and RECORD)
    ...
    @EXIT RC=0            * Finish Function with Return Code Zero
    @END

언급 된 COLUMBUS Assembler (* 1) 패키지는 Siemens 특정 개발 인 AFAIK 였지만 100 % F-Assembler 매크로 코드였습니다. 매크로 라이브러리 외에도 직접적인 어셈블러 목록을 의도 된 목록 또는 Nassi / Shneiderman 목록으로 바꾸는 목록 형식 지정 자도있었습니다 .

그 외에도 프로젝트 / 회사는 물론 더 복잡한 문제를 쉽게 처리 할 수 ​​있도록 매크로 패키지를 구축했습니다. 또한 물론 모든 OS는 그들이 가지고있는 모든 서비스에 대한 매크로를 제공했습니다.


소스 코드에 액세스하는 것은 큰 도움이 될 것입니다.

글쎄, 나는 여전히 어딘가에 여러 버전의 테이프를 가지고 있습니다 (원래 버전에서 상당히 많이 수정했습니다). 또한 오래 전에 Apple II 용 ORCA / M으로 이식했습니다. 둘 중 하나를 찾는 데 시간이 걸릴 수 있습니다.

그런 다음 다시 구조화 된 프로그래밍을 위해 이러한 lib를 구축하는 것은 F-Assembler (또는 더 나은) 매크로 또는 더 높은 / 호환성을 가진 구문을 확인하고 레이블을 생성하기 위해 구문 분석 스택을 구축하는 가장 간단한 작업입니다. 힌트가 마음에 들면 메모를 남겨주세요.


D / E / F-Assembler (및 매크로 언어)는 F가 '전체'버전 인 / 360이 소개 된 직후에 게시되었지만 64KiB의 엄청난 RAM 요구 사항도 함께 제공됩니다. :)) 패키지의 기초.


* 1-동일한 패키지를 COBOL에 사용할 수 있었지만 코드 생성은 전처리기에 의해 수행되었습니다.

2 zarchasmpgmr Nov 22 2020 at 08:42

IBM Federal Systems 직원 인 Marvin Kessler가 작성한 Concept 14 라는 매크로 그룹이 있습니다 . IFOX00 (F 어셈블러)에서 실행되었으며 HLASMTK SPM의 기반으로 사용되었습니다.

전 동료였던 Paul Scott이 IEBUPDTE 형식으로 제공합니다. 그는 또한 문서 스캔을 가지고 있습니다. 안타깝게도 페이지가 없습니다.

나는 그들이 또한 그것을 Hercules와 z390 세계로 만들었다 고 믿는다.