2017-09-03 1 views
1

JCL (F, FB, V, VB)에있는 모든 파일을 읽으려면 Assembly 모듈을 구현해야합니다. 이 모듈은 COBOL 프로그램 내에서 호출됩니다. 이미 열기, 읽기 및 닫기 기능을 구현할 수있었습니다.COBOL과 HLASM (어셈블리) 사이의 링크 (32Kbyte 이상 포함)

CALL MOD01 USING LNK-MOD. 

다른 사람이 COBOL < <에 대한 연결 사용의 몇 가지 예를 --- >> 있습니까 어셈블리 : 모듈이 folow라고한다

01 LNK-MOD.  
    05 LNK-MOD-OPTION PIC X(01)  VALUE SPACE.  
    05 LNK-MOD-STATUS PIC X(01)  VALUE SPACE. 
    05 LNK-MOD-LINE PIC X(32676) VALUE SPACES. 

:

링크가 뭔가처럼 ?

추신. 실행 시간에 파일 크기 (LRECL)가 없으므로 모듈은 Assembly 여야합니다.

미리 감사드립니다.

+0

[매뉴얼 읽기] (https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.ceea400/ilcasm.htm)를 제안합니다. 32KB의 관련성과 관련하여 궁금한 점이 있습니까? –

답변

2

가능한 관심 분야는 Language Environment (LE) Assembler Considerations입니다. COBOL에서 호출 되었기 때문에 LE 영역에서 실행됩니다.

COBOL 컴파일러가 Working-Storage (또는 이것을 사용하는 경우에는 Local-Storage) 크기로 설정 한 제한 외에도 COBOL 프로그램에서 어셈블러 루틴으로 전달할 수있는 데이터의 양에는 제한이 없습니다.

질문에 표시되는 CALL은 모듈 이름 주위에 작은 따옴표가 필요하다는 점을 제외하고는 코드화 된대로 잘 작동합니다.

CALL 'MOD01' USING LNK-MOD.

아마도 당신은 기본 레지스터는 당신이 4K를 해결할 수 있기 때문에 스토리지의 32K를 해결하는 문제 있습니다. 첫 번째 4K를 처리하려면 에만이 필요합니다. GETPUT 매크로는 데이터 영역의 주소 만 필요합니다.

32K 영역 전체를 처리해야하는 경우 4K 블록마다 기본 레지스터를 할당해야합니다. 포기할 레지스터가 너무 많습니다. 절대적으로 필요한 경우가 아니라면 그렇게하지 않는 것이 좋습니다.

어셈블러 루틴을 사용하는 대신 C runtime routinesfopen, fread, fwrite, fclose을 사용하는 것이 좋습니다. C 런타임 루틴은 COBOL 프로그램에서 직접 호출 할 수 있습니다. 이것은 언어 환경에서 제공하는 기능입니다.

COBOL 프로그램과 어셈블러 프로그램을 연결하는 데 문제가있는 경우 링크 할 때 INCLUDE 어셈블러 모듈이 필요합니다. 이 예에서는 ddname

INCLUDE ddname(MOD01)

link step JCL 정의되어야하며, 그 DSN는 MOD01 함유 PDS 또는 PDSE이어야한다.

몇 년 전에 IBM은 JCL에서 PGM=IEWL이라고하는 것을 변경했습니다. 그것은 이전에는 링키지 에디터라고 불 렸습니다. 그들은 이제 이것을 바인더라고 부릅니다. 이것은 때때로 혼란 스럽습니다. JCL은 동일하게 유지됩니다. 나는 노인입니다. 그래서 나는 여전히 링키지 에디터 또는 링커라고 부릅니다.나는 또한 1980 년대 중반 이후로 펀치 카드를 사용하지 않았지만 때때로 "제어 명령문"대신 "제어 카드"라고 말합니다.

+0

감사합니다. @cschneid. 귀하의 설명은 매우 도움이됩니다. –