OpenFrame ASM 검증

본 장에서는 OpenFrame ASM을 설치한 후 ASM 파일을 컴파일하는 방법과 컴파일 명령어 옵션에 대하여 기술한다. 또한 외부 프로그램을 호출하는 경우 필요한 인터페이스 모듈 생성 툴을 이용하는 방법과 명령어 옵션과 g++를 인터페이스 모듈 컴파일 방법에 대하여 기술한다.

1. 컴파일

OpenFrame ASM을 설치한 후 ofasm 명령어를 사용하여 ASM 샘플을 컴파일하는 방법에 대한 설명이다.

  1. $OFASM_HOME의 다음 위치에서 ASM 샘플을 확인한다.

    $OFASM_HOME/sample
  2. sample.asm 샘플을 컴파일한다.

    ofasm ADD.asm
  3. 컴파일 결과 .asmo 파일로 출력 파일이 생성된 것을 확인할 수 있다. asmo 파일은 $LD_LIBRARY_PATH에 지정된 곳에 위치해야 한다.

    ADD.asmo

1.1. ofasm 명령어

다음은 OpenFrame ASM에서 컴파일 명령어를 사용하는 방법이다.

ofasm 소스 파일 ... [명령 옵션...]
  • 소스 파일

    반드시 파일의 확장자가 asm으로 되어야 ASM 소스 파일로 인식한다.

  • 명령 옵션

    다음은 소스 파일을 컴파일하는 기본 명령어 옵션에 대한 설명이다.

    옵션 설명

    -o <파일이름>

    오브젝트 파일의 이름을 지정한다. 본 옵션을 사용하지 않으면 오브젝트 파일의 이름은 <입력 파일 이름>.asmo 로 지정된다.

    --debug

    전처리 및 컴파일에 관련된 로그 메시지를 출력한다.

    -L <dir>

    매크로 라이브러리 경로를 설정한다.

    -h(H) 또는 --help

    도움말을 출력한다.

    --version

    OpenFrame ASM의 버전 정보를 출력한다.

    -E

    전처리 과정만 수행한다. 입력으로는 .asm 파일을 받으며, 출력으로는 .asmi 파일을 생성한다.

    -S

    어셈블리 과정만 수행한다. 입력으로는 .asmi 파일을 받으며, 출력으로는 .asmo 파일을 생성한다.

    --enable-cics

    CICS 라이브러리를 활성화한다.

    --list

    OpenFrame ASM에서 지원 가능한 macro, copybook과 machine 및 assembler instruction, outdated instruction 을 출력한다.

    -x <params..>

    command line에서 사용자가 지정한 매개변수에 대해 즉시 어셈블러 프로그램을 실행한다. 매개변수는 16진수 값만 사용할 수 있다.

    -f <filepath>

    이 옵션은 -x 옵션이 사용될 때만 함께 사용할 수 있다. 매개변수의 정보를 정의한 JSON 형식의 파일을 지정한다.

    -r <reg_no> <value>

    이 옵션은 -x 옵션이 사용될 때만 함께 사용할 수 있다. 실행하기 전의 레지스터 값을 지정한다.

    --entry <entryname>

    이 옵션은 -x 옵션이 사용될 때만 함께 사용할 수 있다. 실행할 entry 이름을 지정한다.

    --save-punch

    PUNCH 레코드 정보에 대한 출력 파일을 생성한다.

    --enable-spm

    Structured programming 매크로를 허용한다.

    --license

    라이선스 정보를 출력한다.

    --force-rmode31

    대상 프로그램의 오브젝트 코드는 31비트 RMODE가 강제 적용된다.

    --no-reuse

    대상 프로그램은 OpenFrame ASM에 로드될 때마다 프로그램 인스턴스가 새로 생성된다.

    --sysparm <string>

    대상 프로그램에 대해 전처리 시 사용되는 &SYSPARM의 값을 지정한다.

    --enable-outdated

    대상 프로그램에 대해 과거 버전의 명령어를 사용하도록 설정한다. 대상 명령어는 --list 옵션을 사용했을 때 출력되는 outdated instruction 을 참고한다.

    --amode <24,31,ANY>

    컴파일 시 사용할 Address Mode 를 지정한다. 이 값은 대상 파일에 정의된 AMODE 값을 덮어씌운다.

    --rmode <24,31,ANY>

    컴파일 시 사용할 Residence Mode 를 지정한다. 이 값은 대상 파일에 정의된 RMODE 값을 덮어씌운다.

2. 인터페이스 모듈 생성

OpenFrame ASM을 설치한 후 ofasmif 명령어를 사용하여 인터페이스 모듈을 생성하는 방법에 대한 설명이다.

  1. $OFASM_HOME의 다음 위치에서 JSON 샘플을 확인한다.

    $OFASM_HOME/sample
  2. ADD.json을 가지고 인터페이스 모듈을 생성한다.

    ofasmif -i ADD.json
  3. 인터페이스 모듈인 ADD_OFASM_VM_ENTRY.cpp 및 so 파일이 생성된 것을 확인할 수 있다.

    ADD_OFASM_VM_ENTRY.cpp

2.1. ofasmif 명령어

다음은 OpenFrame ASM에서 제공하는 ofasmif 명령어의 사용 방법이다.

ofasmif [명령 옵션...]
  • 명령 옵션

    다음은 소스 파일을 컴파일하는 기본 명령어 옵션에 대한 설명이다.

    옵션 설명

    -i <파일이름>

    입력 파일을 설정한다. cpp 파일을 생성하고 g++로 컴파일을 수행한다. 파일의 확장자가 'json’으로 되어야 인터페이스 명세 파일로 인식한다.

    --cpp-only

    cpp 파일만 생성한다. -i 옵션과 함께 사용해야 한다.

    --comp-only

    cpp 파일을 g++로 컴파일한다. -i 옵션과 함께 사용해야 한다.

    -g <인터페이스 타입>

    생성할 JSON 파일의 인터페이스 타입을 지정한다.

    -n <프로그램 이름>

    프로그램 이름으로 사용될 JSON 파일 이름을 지정한다. -g 옵션과 함께 사용해야 한다.

    -e <엔트리 이름>

    생성할 JSON 파일의 엔트리명을 지정한다. -g 옵션과 함께 사용해야 하며 생략될 경우 프로그램 이름이 엔트리 이름으로 사용된다.

    -t <파라미터 타입>

    파라미터 타입(V, F, PCB, JCL)을 지정한다. -e 옵션과 함께 사용해야 한다.

    -m <파라미터 개수>

    파라미터의 최대 개수를 지정한다. -t V(가변 파라미터)일 경우 사용한다.

    -s <사이즈 리스트>

    파라미터의 사이즈 리스트를 지정한다. -t F(고정 파라미터)일 경우 사용한다.

    --ptr-offset <포인터 파라미터 오프셋 리스트>

    -t F(고정 파라미터)이고 포인터 파라미터가 존재하는 경우 포인터 파라미터의 오프셋 리스트를 지정한다. --ptr-size 옵션과 함께 사용해야 하며 리스트의 배열이 동일해야 한다.

    --ptr-size <포인터 파라미터 사이즈 리스트>

    -t F(고정 파라미터)이고 포인터 파라미터가 존재하는 경우 포인터 파라미터의 사이즈 리스트를 지정한다. --ptr-offset 옵션과 함께 사용해야 하며 리스트의 배열이 동일해야 한다.

    -p <파일이름>

    입력 파일의 단락을 자동으로 맞춘다.

    -h(H)

    도움말을 출력한다.

인터페이스 생성 예시

다음은 ofasmif -g 옵션을 사용하여 다양한 인터페이스를 파라미터 타입 별로 생성하는 예시이다.

  • 기본적인 가변 파라미터 엔트리 인터페이스를 생성한다. 파라미터는 최대 10개까지 지정할 수 있다.

    ofasmif -g entry -n TEST -e TEST
  • 가변 파라미터 ENTRY 인터페이스를 생성한다. 파라미터 최대 개수를 지정해야 한다.

    ofasmif -g entry -n TEST -e TEST -t V -m 10
  • 고정 파라미터 ENTRY 인터페이스를 생성한다. 포인터 파라미터가 없는 경우에 대한 예시이다.

    ofasmif -g entry -n TEST -e TEST -t F -s 100,200,300
  • 고정 파라미터 ENTRY 인터페이스를 생성한다. 포인터 파라미터가 있는 경우에 대한 예시이다.

    ofasmif -g entry -n TEST -e TEST -t F -s 100,14,24 --ptr-offset “[(),(0,4),(4,8)]” --ptr-size “[(),(100,200),(200,300)]”
  • PCB 파라미터 ENTRY 인터페이스를 생성한다. 최대 PCB 파라미터 개수를 지정한다.

    ofasmif -g entry -n TEST -e TEST -t PCB -m 100
  • JCL 파라미터 ENTRY 인터페이스를 생성한다.

    ofasmif -g entry -n TEST -e TEST -t JCL
  • EXIT 인터페이스를 생성한다. 포인터 파라미터가 없는 경우에 대한 예시이다.

    ofasmif -g exit -n TEST -e TEST -m 10
  • EXIT 인터페이스를 생성한다. 포인터 파라미터가 있는 경우에 대한 예시이다.

    ofasmif -g exit -n TEST -e TEST -t F -s 100,14,24 --ptr-offset “[(),(0,4),(4,8)]” --ptr-size “[(),(100,200),(200,300)]”
  • LOAD 인터페이스를 생성한다. 고정 파라미터 ENTRY 인터페이스 생성 방법과 동일하다.

    ofasmif -g exit -n TEST -e TEST -t F -s 1024
  • ENTRY가 여러 개일 경우에 대한 인터페이스 생성 예시이다.

    ofasmif -g entry -n TEST -e ENTRY_1 -t F -s 100,200 -e ENTRY_2 -t V -m 10