2017-04-06 1 views
3

최근에 메인 프레임에서 z/OS 어셈블러에서 작업 한 적이있는 COBOL로 일부 작업을 시작했습니다.IBM의 Enterprise COBOL 컴파일러가 생성 한 코드보기

COBOL이 메인 프레임 기계 코드로 변환된다는 것을 알고 있지만 생성 된 코드를 볼 수 있는지 궁금합니다.

COBOL의 작동 원리를 더 잘 이해하기 위해 이것을 사용하고 싶습니다.

예를 들어, COBOL 프로그램을 컴파일하려면 컴파일 결과의 어셈블리를보고 싶습니다. 이게 가능한가?

+2

LIST, NOOFFSET을 컴파일 옵션으로 사용하십시오. 만약 옵션을 직접 바꿀 수 없다면, 프로그램 시작 부분 (ID DIVISION 또는 IDENTIFICATION DIVISION이 7 열 뒤에 시작하기 전에 CBL LIST, NOOFFSET을 추가하십시오.) –

+2

@BillWoodger는리스트가 정말로 어셈블리스트를 인쇄 할 것입니다. COBOL 소스 목록 만)? 예,이 질문은 대답이 아니라 주석이어야합니다. –

+1

@SimonSobisch 아니요, 대답이 아닙니다. 동료에게 물어 보는 데 2 ​​초가 걸리며, 기업 COBOL에 문의하는 데 5 초가 걸립니다. Pogramming Guide.'LIST 컴파일러 옵션을 사용하여 소스 코드의 어셈블러 언어 확장 목록을 작성하십시오. '지정한 소스 목록을 원하면 ...'SOURCE'. 대답으로, 아무도 이익을 얻지 못합니다. –

답변

8

다음과 같은 이유 때문에 "나는 이것을 사용하여 Cobol의 기능을 더 잘 이해하고 싶습니다."

간단히 대답하면 z/OS의 Enterprise COBOL에는 컴파일러 옵션 LIST가 있습니다. LIST는 컴파일 목록에있는 "의사 어셈블러"출력 (그리고 실행 가능한 프로그램을 이해하는 데 유용한 다른 것들)을 제공합니다. 다른 컴파일러 옵션 인 OFFSET은 각 COBOL verb에 대해 생성 된 코드의 프로그램 시작 부분에서의 변위를 표시합니다. LIST (본질적으로 이미 오프셋이 있음)와 OFFSET은 상호 배타적입니다. 따라서 LIST 및 NOOFFSET을 지정해야합니다.

컴파일러 옵션은 컴파일러의 EXEC PGM = PARM에 지정할 수 있습니다. PARM은 100 자로 제한되기 때문에 컴파일러 옵션은 SYSOPTF의 DDName (다시 말해 컴파일러 옵션을 사용하여 지정)을 사용하여 데이터 세트에 지정할 수 있습니다.

컴파일러 옵션을 지정하는 세 번째 방법은 PROCESS 또는 (더 일반적이기 때문에 더 짧아서) CBL 문을 사용하여 프로그램 소스에 포함시키는 것입니다.

"패널"을 사용하여 프로그램을 컴파일 할 가능성이 있습니다. 옵션을 지정할 수있는 필드가있을 수 있습니다.

그러나 컴파일러를 설치할 때 "응용 프로그램 프로그래머가 변경할 수 없음"이라는 컴파일러 옵션을 사용할 수 있습니다. 컴파일러를 설치할 때 PROCESS/CBL 문을 사용하지 못하게 할 수 있습니다.

위의 이유는 표준화입니다. 코드 생성에 영향을주는 컴파일러 옵션이 있으며 동일한 시스템 내에서 다른 코드 생성 옵션을 사용하면 원하지 않는 영향을 줄 수 있습니다. 시스템 에서조차도, 프로그래머가 "정상적인"옵션을 기대하기 쉽다면 다른 코드 생성 옵션이 바람직하지 않을 수 있습니다.

목록 전용 옵션은 "못 박는"것은 아니지만 옵션을 지정할 수 없으면 특별한 요청을해야 할 수도 있습니다. 이것은 흔한 일은 아니지만 재수가 될 수 있습니다. 그것이 당신을 위해 작동하지 않으면 내 잘못이 아니야.

이 컴파일러 옵션과이를 지정할 수있는 방법은 특정 릴리스의 Enterprise COBOL 프로그래밍 안내서에 설명되어 있습니다. 여기서도 의사 - 어셈블러의 문서를 찾을 수 있습니다 (문서화 된 "pseudo-assembler", "pseudoassembler"및 "pseudo assembler"는 별다른 이유가 없습니다).

의사 - 어셈블러가 보이면 Assembler 문과 같은 형식이 아닌 것을 볼 수 있습니다. (나는 왜 그런지 알지 못했지만, 40 가지 이상에 대해 그렇게 생각했습니다. 연령). 의사 어셈블러의 행에는 어셈블러 출력에서 ​​이미 익숙한 형식의 기계 코드도 포함됩니다.

작성한 어셈블러 프로그램처럼 보이는 컴파일 된 COBOL 프로그램을 기대하지 마십시오. Enterprise COBOL은 IBM Extensions를 사용하여 언어 표준 (1985)을 준수합니다. "왜 그렇게 할 것인가"에 대한 대답은 최적화를 제외하고는 "때문에"될 것입니다 (나중에 볼 수 있습니다).

2013 년 여름 IBM은 완전히 새로운 코드 생성 및 최적화 기능을 갖춘 V5를 도입 했으므로 컴파일러 버전에 크게 의존하게됩니다. V4.2까지, 코드 생성기는 "ESA"로 거슬러 올라갔습니다. ESA 이후 도입 된 600 개가 넘는 기계 명령어가 Enterprise COBOL 프로그램 및 확장 레지스터에서 사용할 수 없었 음을 의미합니다. V4.2와 V6.1 (작성 시점에서 최신 버전)을 사용하여 컴파일 된 동일한 COBOL 프로그램은 다른 지침으로 인해뿐만 아니라 실행 가능 COBOL 프로그램의 구조가 다시 설계 되었기 때문에 현저하게 다릅니다.

그러면 불법화가 있습니다. V4.2에서는 가능한 한 최적화 수준이 있었으며 최적화 된 코드는 일반적으로 "인식 가능"했습니다. V5 +에는 세 가지 최적화 레벨이 있습니다 (요구하지 않고 레벨을 0으로 설정). 최적화는 훨씬 극단적입니다. V5 +가 있고 무슨 일이 일어나고 있는지 좀 더 알고 싶다면 OPT (0)를 사용하여 무슨 일이 일어나고 있는지 파악한 다음 OPT (1) 및 OPT (2)의 효과를 확인하십시오 (그리고 컴파일 시간이 늘어남에 따라 최적화 작업에 어느 정도의 작업이 투입되는지).

내부에 대한 공식적인 문서는 실제로 많지 않습니다. 검색 엔진을 사용하면 몇 가지 정보가 공개됩니다. IBM's Compiler Cafe:COBOL Cafe Forum - IBM은 V5 + 내부에 대한 더 많은 지식을 원한다면 좋은 장소입니다. V4.2까지, 여기서 더 구체적인 질문을 할만한 좋은 장소가 될 수 있습니다.

+1

고마워요. 알 수있는 좋은 정보입니다! – GrapeSoda3

+0

내 대학 다우 ys, 이것이 System/370 (당시)이 가장 잘 작동하는 방법을 배웠던 방법입니다. 특히 최적화되지 않은 코드와 최적화되지 않은 코드를 비교할 때 더욱 그렇습니다. (이것은 OS Full ANS COBOL V4로 저를 인용했습니다.) 생성 된 코드에서 컴파일러에 대해 많은 것을 배울 수 있기 때문에 어셈블러뿐만 아니라 COBOL도 가능했습니다. 나는 이미 어셈블러 강조가있는 sysprog 커리어로 향하고 있었고 LIST는 COBOL, PL/I, C보다 나은 어셈블러 프로그래머가 될 수있었습니다. C 컴파일러에 액세스 할 수 있다면 더 많은 통찰력을 얻을 수 있습니다 특히 튜닝과 아키텍처에 관한 것입니다. – zarchasmpgmr

+0

@ GrapeSoda3 나는 이런 종류의 것이 당신에게 흥미 있다는 사실에 관심이 있습니다. Gmail의 Stack Exchange 사용자 이름으로 이메일을 보내주십시오. 요즘에는 당신에 대한 관심이 매우 희귀하며, 이것을 키우는 것을 좋아할 사람들이 있습니다. – zarchasmpgmr

관련 문제