● 関数リファレンス
レジスタスタックの取得
PREGSTACK __stdcall floatex_get_regstack(PREGSTACK pdest);
引数
引数名 | 意味 |
pdest | 結果を格納する REGSTACK 構造体の実体の先頭アドレス |
戻り値
pdest を返します。
説明
FPU のレジスタスタックを取得します。
関数を実行すると、pdest が指す領域に、タグワードとレジスタスタックの内容を返します。
形式は REGSTACK 構造体です。
REGSTACK 構造体.
typedef struct {
int stacktop;
int stackfault;
int tag;
int reserved;
FLOATEX reg[8];
} REGSTACK,*PREGSTACK;
この構造体は floatex.h 内で定義されています。
メンバ名 | 意味 |
stacktop | スタックトップ |
stackfault | スタックフォルト |
tag | タグワード |
reserved | (予約) |
reg | レジスタスタックの内容 |
- メンバstacktop には、スタックトップ位置を指す物理レジスタのインデックスが返されます。
値の範囲は 0 〜 7 になります。
- メンバstackfault には、スタックフォルトの状態が 3 ステートで返されます。
正 | … | スタック・オーバーフロー |
0 | … | 正常 |
負 | … | スタック・アンダーフロー |
- メンバtag にはタグワードが返されます。
この構造体に格納されるタグワードの仕様は、 floatex_get_stacktag と同じです。
- メンバreg にはレジスタスタックの内容が返されます。
レジスタスタックは、最下位が ST(0) 、最上位が ST(7) に対応しています。
この関数は、eax 以外の汎用レジスタの内容を変えません。また、EFLAGS の内容を保存します。
FPU のスタックフォルトフラグは、一度セットされると例外フラグのリセットを行う命令を実行しない限り残り続けます。そのため、例外フラグをクリアしない処理では、メンバ stackfault の内容が正確ではない場合があります。
スタックフォルトを検出した時は floatex_clear87 等によりフラグをリセットしてください。
|