2

問題は、BIOS メモリから「コンピューター」タイプを取得する必要があることです。私はfasmでそのようにできることを知っています(私のプログラムとすべてのセグメントは16ビットです):

mov al, [0xF000FFFE]

しかし、それはゼロを返し、正しくありません。turbo c++ 3.1 の同等のコードのためです。

UCHAR pcType = *((UCHAR*)0xF000FFFE);

(コード生成設定で) LARGE モデルを使用している場合、自分のコンピューターの正しい「タイプ」を返します。それで、 fasm でそれを修正する方法は?(たとえば、masm には .model ディレクティブがあることは知っていますが、fasm にはそのようなものはありません)。助けてください...

4

2 に答える 2

1

これは、32ビット値をフラットポインタとしてではなく、セグメントとオフセットのペアとして解釈するため、TurboCで機能します。フラットポインタを使用する場合は、アドレス0xFFFFFFFE(フラッシュメモリマッピングがBIOSによって無効にされていない場合)、またはポインタF000:FFFEに対応する線形メモリアドレスである0xFFFFEを使用する必要があります。これらは両方とも、64Kを超えるオフセットを使用するため、非リアルモードでのみ機能します。これは、プレーンリアルモードでは不可能です。最も簡単なのは、コメントで述べたように、プレーンな16ビットのsegment:offsetアドレッシングを使用することです。これは常に機能するためです。

于 2013-02-18T15:52:43.637 に答える