• Imagix 4D ユーザガイド
  • 目次

アセンブラ・コード

Imagix 4D では FORTRAN やアセンブラのように、他の言語で実装されたコードとあわせて使用される、C / C++ および Java ソースコードを調べることが可能です。

Imagix 4D アナライザは、インクルードもしくはインポートする関連ファイルとともに、C / C++ および Java ソースファイルを処理します。他の言語を利用して別のファイルで実装された関数への呼び出しは、ライブラリ関数への呼び出しと同様に処理されます。関数の宣言ならびに呼び出されたインスタンスすべてを検査するこができますが、関数そのものの定義や関数配下の階層構造を調べることはできません。

適切な設定が行われている場合(「言語拡張」のページを参照)、Imagix 4D C / C++ アナライザは、キーワード asm または _asm で識別されたインライン・アセンブラを処理します。アナライザはアセンブラ・コードをスキップし、アセンブラ・ブロックの終わりから解析を続行します。

アセンブラ・コードは通常、呼び出し階層の最下部でパフォーマンスを重視する関数の実行に使用されるため、前述の動作で特に問題はありません。しかし、C / C++ ソースコードから呼び出される関数に使用する、実際のアセンブラ・コードをブラウジングする必要が生じることあります。この場合、ブラウジングに必要な情報を含むデータファイルを作成し、このデータファイルを Imagix 4D にインポートしてください。

例として、次のようなアセンブラ・コードを取りあげます。

PFPROC          TRAP08
                PUSHF
                CALL    DWORD PTR CS:[OLD08]
                CLI
                PUSHM   <ES,BX>
                LES     BX,CS:InDOS
                CMP     BPTR ES:[BX],0
                POPM    <BX,ES>
                IRET
ENDPROC
PFPROC          TRAP28
                MOV     CS:TryPop,FALSE
                MOV     CS:InPop,TRUE
                STI
                CALL    START
                CLI
                MOV     CS:AllowPop,TRUE
                MOV     CS:InPop,FALSE
                JMP     DWORD PTR CS:OLD28
ENDPROC
ブラウジングを有効にするには、アセンブラ・コードに記述された関数定義の場所を示すファイルや行番号を明示する必要があります。TRAP08 および TRAP28 がC コードの中で as _asm_Trap08 ならびに _asm_Trap28 として呼び出され、以下の行からなる .vdb ファイルを作成するとします。

GD /#root/usr/examples
GD /#root/usr/examples/asm
GF /#root/usr/examples/asm/foo.asm
SP /usr/examples/asm
</#root/usr/examples/asm/foo.asm
Gf ./_asm_Trap08
Sl 2
Gf ./_asm_Trap28
Sl 13
>
1行目は、新しいシンボルが生成(G)され、このシンボルはディレクトリ(D)であり、同シンボルはカレントシンボル /#root/usr の配下に存在し、シンボル名が examples であることを示します。2行目は次のディレクトリ・レベル asm について、1行目と同様のことを繰り返しています。

3行目も、シンボルがファイル(F)で、その名前が foo.asm であることを除き、同じことを繰り返しています。

4行目は、カレントシンボル foo.asm のパス(P)の属性 を /usr/examples/asm へセット(S)します。

< で始まる5行目は、新しい置換のセクションの開始と、このセクションがシンボル /#root/usr/examples/asm/foo.asm に焦点を当てることを示しています。/#root はパスの開始を意味し、その後に通常のパス名が続きます。Windows 環境では、/#rootc:/examples/func_ptr/foo.c のようなパスとなることがあります。

6行目は、新しいシンボルが生成(G)され、このシンボルは関数(f)であり、同シンボルは、シンボル foo.asm (./)のカレントセクションの配下に存在し、新しいシンボル名は _asm_Trap08 であることを意味します。

7行目はカレントシンボル _asm_Trap08 の行番号(l)の属性を2にセット(S)し、 _asm_Trap08 が定義される場合は、どのようなファイルでも 2 行目に定義されることを意味します。

8行目と9行目は、6行目と7行目の繰り返しとなり、次の関数の定義と行番号を指定します。

10行目は、カレントセクション foo.asm の終了を示します。