MASM 手続の呼び出し規約は,PROTO および PROC 命令で指定します。PROTO および PROC 命令の STDCALL オプションは,手続に対して STDCALL 呼び出し規約を使用するように指示します。PROTO および PROC 命令の C オプションは,手続に対して C 呼び出し規約を使用するように指示します。PROC 命令の USES オプションは,呼び出された MASM ルーチン中で,どのレジスタを保存し復元するのかを指定します。PROTO および PROC 命令の VARARG オプションは,手続が可変個の引数を受け付けることを指定します。
例として,次の Fortran と MASM の文は,Visual Fortran から STDCALL 呼び出し規約を使って呼び出せる MASM 関数を設定しています。
Fortran コード:
! Fortran STDCALL インタフェース・プロトタイプ INTERFACE INTEGER FUNCTION forfunc(I1, I2) !DEC$ ATTRIBUTES STDCALL :: forfunc INTEGER I1 INTEGER(2) I2 END INTERFACE WRITE (*,*) forfunc(I1,I2)
MASM コード:
;MASM STDCALL プロトタイプ .MODEL FLAT, STDCALL forfunc PROTO STDCALL, forint: SDWORD, shorti: ptr SWORD .CODE forfunc PROC STDCALL, forint: SDWORD, shorti: ptr SWORD ... forfunc ENDP END
次の Fortran と MASM の文は,C 呼び出し規約を使って,Fortran から呼び出せる MASM 関数を設定しています。
Fortran コード:
! Fortran C インタフェース・プロトタイプ INTERFACE INTEGER FUNCTION Forfunc (I1, I2) !DEC$ ATTRIBUTES C, ALIAS:'Forfunc' :: Forfunc INTEGER I1 INTEGER(2) I2 END FUNCTION END INTERFACE WRITE(*,*) Forfunc (I1, I2) END
MASM コード:
;MASM C プロトタイプ .MODEL FLAT, C Forfunc PROTO C, forint:SDWORD, shorti: ptr SWORD .CODE Forfunc PROC C, forint:SDWORD, shorti: ptr SWORD ... Forfunc ENDP END