本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。
サポート技術情報

[HOW TO] C から MASM に文字を渡し、文字を返す方法

文書番号: 104618

最終更新日: 2003/01/17


この資料は以下の製品について記述したものです。


この記事は、以前は次の ID で公開されていました: JP104618

概要

以下のサンプル コードは、Microsoft C で記述したプログラムから Microsoft Macro Assembler (MASM) で記述したプロシージャに文字 (char) を渡す方法を示したものです。また、この MASM 関数は C プログラムに 文字 (char) を返します。

単純データ型の値を返すには、レジスタが使用されます。MS-DOS プログラムなどの 16 ビット コードで C プログラムにデータを返す場合には、次の規則に従ってください。
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 モジュールにリンクしてください。

Windows NT のフラット モデル バージョンをビルドするには、MASM 6.1 以降または 32 ビット版の Visual C++ に付属する 32 ビット C/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));
}

MS-DOS スモール モデル バージョンのサンプル コード

; ファイル名 : 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

Windows NT フラット モデル バージョンのサンプル コード

; ファイル名 : 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

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 104618 (最終更新日 2001-11-14) をもとに作成したものです。

この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。

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

inserted by FC2 system