IBM Macro Assembler를위한 "고급 프로그래밍"매크로 패키지가 있었습니까?
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 매크로 어셈블러에 대해 이러한 매크로 또는 유사한 매크로가 포함 된 매크로 패키지가있는 경우 소스 코드에 액세스하는 것이 큰 도움이 될 것입니다.
답변
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에 사용할 수 있었지만 코드 생성은 전처리기에 의해 수행되었습니다.
IBM Federal Systems 직원 인 Marvin Kessler가 작성한 Concept 14 라는 매크로 그룹이 있습니다 . IFOX00 (F 어셈블러)에서 실행되었으며 HLASMTK SPM의 기반으로 사용되었습니다.
전 동료였던 Paul Scott이 IEBUPDTE 형식으로 제공합니다. 그는 또한 문서 스캔을 가지고 있습니다. 안타깝게도 페이지가 없습니다.
나는 그들이 또한 그것을 Hercules와 z390 세계로 만들었다 고 믿는다.