기계 명령어

본 부록에서는 OpenFrame ASM에서 추가로 지원하고 있는 기계 명령어를 소개한다.

1. OFATOE

  • 사용 방법

    OFATOE D1(L1,B1),D2(B2)

다음은 OFATOE에 대한 자세한 설명이다.

개요

  • 형식: SS format

  • 명령 코드(Opcode): 0xF6

  • 길이: 6바이트

설명

첫 번째 피연산자가 가리키는 영역은 ASCII 문자열을 적재하고 있다고 가정한다.
해당 문자열을 properties.conf 파일의 USE_CODE_CONVERSION에 정의된 ASCII_TO_EBCDIC에 지정된 cpm 파일을 사용하여 ASCII 문자열에서 EBCDIC 문자열로 변환하여 덮어씌운다.

상태 코드 (Condition Code)

  • 0: 성공

  • 1: 정의되지 않음

  • 2: 정의되지 않음

  • 3: 코드 변환 실패

2. OFETOA

  • 사용 방법

    OFETOA D1(L1,B1),D2(B2)

다음은 OFETOA에 대한 자세한 설명이다.

개요

  • 형식: SS format

  • 명령 코드(Opcode): 0xF7

  • 길이: 6바이트

설명

첫 번째 피연산자가 가리키는 영역은 EBCDIC 문자열을 적재하고 있다고 가정한다.
해당 문자열을 properties.conf 파일의 USE_CODE_CONVERSION에 정의된 EBCDIC_TO_ASCII에 지정된 cpm 파일을 사용하여 EBCDIC 문자열에서 ASCII 문자열로 변환하여 덮어씌운다.

상태 코드 (Condition Code)

  • 0: 성공

  • 1: 정의되지 않음

  • 2: 정의되지 않음

  • 3: 코드 변환 실패

3. OFADBGREG

  • 사용 방법

    OFADBGREG I1

다음은 OFADBGREG에 대한 자세한 설명이다.

개요

  • 형식: I format

  • 명령 코드(Opcode): 0xFE

  • 길이: 2바이트

설명

첫 번째 피연산자에 전달되는 숫자에 따라 기능이 달라진다. 상세 기능은 아래를 참조한다.

  • 0~15: 각 번호에 해당하는 레지스터에 적재 되어 있는 값 및 현재 CC 값을 stdout으로 출력한다. 아래와 같은 포맷을 가진다.

    Reg=[<정수값>], Hex=[<8바이트 16진수 값>], CC=[<정수값>]
  • 16: 모든 레지스터 값을 출력한다.

  • 100~115: 뒤의 두 자리 수에 해당하는 레지스터에 대해 watch 기능을 활성화한다. 해당 레지스터의 값이 변동될 때마다 stdout으로 이전 값과 새로운 값을 출력한다. 해당 명령어가 처음 실행되면 아래와 같은 포맷을 가진다.

    OFASM: OFADBGREG[<피연산자 값>], ADD WATCH REGISTER [<레지스터 값>]
    OFASM: WATCHING REGISTER = <레지스터값>

    이후 레지스터값이 변경될 때마다 아래와 같은 메시지를 출력한다

    REG=[<레지스터값>]
    OLD=[<8바이트 16진수 값>]
    NEW=[<8바이트 16진수 값>]
  • 180~189: 내부 STOPWATCH를 초기화하고 새로 시작한다. 맨 끝자리 숫자(0~9)의 ID를 가지는 STOPWATCH가 활성화된다.

  • 190~199: 가장 마지막으로 사용된 18X로부터 지난 시간을 출력한다. 맨 끝자리 숫자(0~9)의 ID를 가지는 STOPWATCH가 중단된다. 여러 번 사용할 수도 있다.

    OFADBGREG 180   // 0번째 STOPWATCH 초기화 한다.
    OFADBGREG 181   // 1번째 STOPWATCH 초기화 한다.
    OFADBGREG 190   // 0번째 STOPWATCH를 사용한 이후 경과 시간을 출력한다.
    OFADBGREG 191   // 1번째 STOPWATCH를 사용한 이후 경과 시간을 출력한다.

    19X 명령어의 경우 아래와 같이 여러 번 사용할 수 있다.

    OFADBGREG 182   // 2번째 STOPWATCH 초기화
    OFADBGREG 192   // 시간 경과 출력 1번째
    OFADBGREG 192   // 시간 경과 출력 2번째
    OFADBGREG 192   // 시간 경과 출력 3번째
    OFADBGREG 192   // 시간 경과 출력 4번째

    이 경우 가장 마지막에 사용된 18X 명령어로부터 경과된 시간을 차례로 출력한다.

    출력되는 메시지는 다음과 같으며 19X 명령어를 사용하는 시점에 출력된다.

    OFASM STOPWATCH IDX[X]: 28.954337ms // [X]는 ID 번호
  • 200~209: 디버그 바이너리만 해당하며, 뒤의 한 자리 수에 해당하는 값에 따라 로그 레벨을 활성화 한다. 단, properties.conf에 OFASM_LOG_AFTER 값이 0이면 출력되지 않는다. 해당 명령어가 실행되면 아래와 같은 포맷을 가진다.

    OFASM: OFADBGREG[<피연산자 값>], SET OFASM_LOG_LEVEL[<로그 레벨>]

상태 코드 (Condition Code)

  • 변하지 않음

4. OFADBGMEM

  • 사용 방법

    OFADBGMEM D1(L1,B1),D2(B2)

다음은 OFADBGMEM에 대한 자세한 설명이다.

개요

  • 형식: SS format

  • 명령 코드(Opcode): 0xFF

  • 길이: 6바이트

설명

첫 번째 피연산자가 가리키는 영역에 대해 메모리 덤프를 수행한다. 두 번째 피연산자에 전달되는 포맷에 따라 아래의 기능을 제공한다.

  • 0: 아래와 같은 포맷으로 메모리 덤프를 수행한다.

    Length=[<길이값>], Hex=[<16진수 값>]
  • 1: 아래와 같은 포맷으로 메모리 덤프를 수행한다.

    Addr=[<메모리 주소값>], Length=[<길이값>], Hex=[<16진수 값>]
  • 2: 아래와 같은 포맷으로 메모리 덤프를 수행한다.

    Addr=[<메모리 주소값>], Length=[<길이값>], Hex=[<16진수 값>], Char=[<문자로 변환한 값>]
  • 3: 아래와 같은 포맷으로 메모리 덤프를 수행한다.

    Program=[<프로그램이름>], Symbol=[<심볼 이름>], Length=[<길이값>], Hex=[<16진수 값>]
  • 4/5: 아래와 같은 포맷으로 메모리 덤프를 수행 하며, 첫 번째 피연산자가 가리키는 영역에 HFP(Hexadecimal Floating Point)값이 적재되어 있다고 가정한다. 해당 영역의 값을 BFP(Binary Floating Point) 값으로 변경하여 출력한다. 4는 Short BFP, 5는 Long BFP 포맷으로 출력한다.

    Addr=[<메모리 주소값>], Length=[<길이값>], Hex=[<16진수 값>], BFP=[<변환된 BFP값>]
  • 리터럴: 리터럴 값으로 지정한 길이만큼 메모리 Watch 기능을 활성화 한다. 첫 번째 피연산자가 가리키는 영역에 대해 업데이트가 발생하면 이전 값과 새로운 값을 출력한다.

    Addr=[<메모리 주소값>], Length=[<길이값>], Hex=[<16진수 값>]
    OFASM: WATCHING LOCATION:LENGTH = <메모리 주소값>:<길이값>

    이후 해당 메모리값이 변경될 때마다 아래와 같은 포맷으로 출력한다.

    Addr = [<메모리 주소값>], SIZE = [길이값]
    OLD=[<16진수 값>]
    NEW=[<16진수 값>]

상태 코드 (Condition Code)

  • 변하지 않음

5. OFNUMCHK

  • 사용 방법

    OFNUMCHK D2(B2)

다음은 OFNUMCHK에 대한 자세한 설명이다.

개요

  • 형식: S format

  • 명령 코드(Opcode): 0x0203

  • 길이: 4바이트

설명

피연산자는 1바이트 메모리 주소를 가리킨다.
해당 메모리 주소에 적재되어 있는 값이 0x30 ~ 0x39 범위(ASCII 문자 중 숫자)내의 값인지 아닌지 검사한다.

상태 코드 (Condition Code)

  • 0 : 대상 값이 0x30 ~ 0x39 범위에 해당하지 않는다.

  • 1 : 대상 값이 0x30 이다.

  • 2 : 대상 값이 0x31 ~ 0x39 이다.

  • 3 : 정의 되지 않음