3

WinXPDOSボックスで実行されている16ビットのTurboPascal7プログラム(質問しないでください...)で高性能カウンターを使用しようとしています。インライン$0F、$ 31でRDTSC命令を実行でき、AXとDXの内容は適切な値のように設定されていますが、EAX、EDXの上半分にアクセスして、結果を2つのロングワードグローバル変数に書き込むにはどうすればよいですか?

4

2 に答える 2

4

ドキュメントを正しく読めば、オペコードに 0x66 プレフィックスを使用することで、リアル モードから 32 ビット レジスタにアクセスできます。したがって、「$66 $50」をインライン化すると、次のような効果が得られます: EAX が 32 ビット値としてスタックにプッシュされます。次に、下半分と上半分を 2 つの通常の (16 ビット)popオペコードとしてポップします (最初に下半分を取得します)。EDX の場合、「$50」ではなく「$52」を使用します。

(私はこれを試していません。)

于 2011-04-07T13:34:26.667 に答える
0

DOS で 32 ビット レジスタを使用するには、DOS エクステンダまたはフラット リアル モードが必要です。前者はプロテクト モード (コード生成モデルをどこかで切り替える必要があります) 用のプログラムを作成できるようになり、後者は一種の 32 ビット リアル モードになります。DOS ボックスで動作するとは思えませんが、DOS エミュレーターで動作する可能性があります。

私の知る限り (15 年...) Borland Pascal には、独自の DOS エクステンダ、RTM.EXE などがあります。

フラットリアルモードへの切り替え: http://www.assembly.happycodings.com/code54.html

于 2011-04-07T07:19:49.300 に答える