文書番号: 104618
最終更新日: 2003/01/17
char AL short, int, near * AX long, far * DX: 上位部分 (セグメント) AX: 下位部分 (オフセット)Windows NT プログラムなどの 32 ビット コードで C プログラムにデータを返す場合には、次の規則に従ってください。
char AL short AX long, int, * EAX以下のサンプルには、1 つの C ファイルと 2 つのアセンブリ ファイルが含まれています。これら 2 つのアセンブリ ファイルは、MS-DOS のスモール モデルおよび Windows NT のフラット モデルで変数を引き渡す方法を示したものです。必要なアセンブリ モジュールだけを C モジュールにリンクしてください。
// ファイル名 : CMAIN.C // 必要なコンパイル オプション : /c #include <stdio.h> #ifdef __cplusplus extern "C" { #endif char MasmSub (char); #ifdef __cplusplus } #endif main () { char var = 'a'; printf ("%c\n", var); printf ("%c", MasmSub(var)); }
; ファイル名 : MASMSUB.ASM ; MASM に必要なアセンブル オプション : /MX ; ML に必要なアセンブル オプション : /c /Cx .MODEL small, C .286 .CODE MasmSub PROC, \ cVar:BYTE mov al, cVar ; char を ALに読み込みます。 add al, 25 ; この関数は char (1 バイト値) を返すため、 ret ; C では AL から戻り値を取得します。 MasmSub ENDP END
; ファイル名 : MASMSUB.ASM ; ML に必要なアセンブル オプション : /c /Cx /coff .386 .MODEL flat, C .CODE MasmSub PROC, \ cVar:BYTE mov al, cVar ; char を AL に読み込みます。 add al, 25 ; この関数は char (1 バイト値) を返すため、 ret ; C では AL から戻り値を受け取ります。 MasmSub ENDP ENDこのプログラムからの出力は次のようになります。
a z
Keywords: JPTRF kbcode kbhowto kbHOWTOmaster kbLangC kbVC100 kbVC150 kbVC200 kbVC210 kbVC400 kbVC500 kbVC600 KB104618
Technology: kbAudDeveloper kbCCompSearch kbvc100 kbvc150 kbVC200 kbVC210 kbVC32bitSearch kbVC400 kbVC500 kbVC500Search kbVC600 kbVCsearch kbZNotKeyword3 kbZNotKeyword8