アセンブラー サブプログラムの呼び出し例

制約事項: 次の説明はネイティブ COBOL にのみ該当します。

標準の COBOL 呼び出し規則に従うアセンブラー サブプログラムは、次のような形式をとります。

アセンブラー サブプログラムは、複数のコードおよびデータ セグメントで構成できます。初期コードのエントリ ポイントが最初のコード セグメントの開始点に定義されていることを確認するか、End 指令の後に明示的にエントリ ポイントのラベルを定義しているかを確認する必要があります。

注:
  • 各コード セグメントは、CODE のクラス名を持つように定義されるか、サフィックス CODE を持つ class-name を持つことが必要です。そうでない場合は、リンカーは、実行を許可するアクセス権をそのセグメントに与えることはできません。
  • 動的にリンクする場合、サブプログラムのエントリ ポイントは、リンク時に与える .def ファイルの中に定義されなければなりません。たとえば、上記の .def ファイルは、次のような行を含んでいます。
    LIBRARY libname
    EXPORTS entry-point-name @1
;---------------------------------------------------------
; Example skeleton assembler subprogram
;---------------------------------------------------------
;---------------------------------------------------------
; Declare local data segment(s)
;---------------------------------------------------------

.386 
.MODEL FLAT ;
_DATA   segment dword use32 public 'DATA'
        ...
    data used by subprogram
        ...
_DATA ends

;---------------------------------------------------------
; Declare local code segment(s)
;---------------------------------------------------------

_TEXT   segment dword use32 public 'CODE'

assume cs:flat, ds:flat, ss:flat, es:flat

;---------------------------------------------------------
; Declare public entry point
;---------------------------------------------------------

PUBLIC EXAMPLE

;---------------------------------------------------------
; Declare equates for accessing params(COBOL convention)
;---------------------------------------------------------

param1 equ  ebp+8
param2  equ  ebp+12

EXAMPLE proc  near
    push  ebp              ; preserve ebp 
    mov   ebp,esp          ; address params on stack  
    push  esi              ; preserve esi, edi  
    push  edi

    ...
    program code
    ...

    mov  esi,[param1]      ; access parameter 1
    ...
    mov  esi,[param2]      ; access parameter 2 
    ...
    mov  eax,{return-code} ; set up 
                           ; return code
    ...

    pop  edi
    pop  esi               ; restored esi,edi
    pop  ebp               ; restored ebp
    ret

EXAMPLE endp

    _TEXT    ends
    end