다음과 같은 이유 때문에 "나는 이것을 사용하여 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까지, 여기서 더 구체적인 질문을 할만한 좋은 장소가 될 수 있습니다.
LIST, NOOFFSET을 컴파일 옵션으로 사용하십시오. 만약 옵션을 직접 바꿀 수 없다면, 프로그램 시작 부분 (ID DIVISION 또는 IDENTIFICATION DIVISION이 7 열 뒤에 시작하기 전에 CBL LIST, NOOFFSET을 추가하십시오.) –
@BillWoodger는리스트가 정말로 어셈블리스트를 인쇄 할 것입니다. COBOL 소스 목록 만)? 예,이 질문은 대답이 아니라 주석이어야합니다. –
@SimonSobisch 아니요, 대답이 아닙니다. 동료에게 물어 보는 데 2 초가 걸리며, 기업 COBOL에 문의하는 데 5 초가 걸립니다. Pogramming Guide.'LIST 컴파일러 옵션을 사용하여 소스 코드의 어셈블러 언어 확장 목록을 작성하십시오. '지정한 소스 목록을 원하면 ...'SOURCE'. 대답으로, 아무도 이익을 얻지 못합니다. –