私はx86リアルモードで動作するオプションROM(拡張ROM)のINT 13Hディスクサービスルーチンを開発中です。 DS(DS = CS)にあるグローバル変数にアクセスする必要がありますが、ルーチンは実行されていますが、グローバル変数は読み取り専用になります。 SS(SS!= DS)に位置するローカル変数だけが正常にアクセスできますが、スタックのサイズは十分ではありません。 必要なサイズはルーチンで約2KBです。私の質問は以下の通りです:x86リアルモードでグローバル変数にデータを格納する方法ISR?
- ルーチン内のグローバル変数にデータを保存することはできますか?
- ルーチンで2KBの使用可能なメモリを見つけて見つける方法は?
ありがとうございます。オプションROM(拡張ROM) の
int global_var;
void __far int13h_isr(void)
{
int local_var;
__asm
{
push ds
push es
mov bx, cs
mov ds, bx
mov es, bx
};
global_var = 0x22; // global variable can NOT store 0x22 in the routine.
local_var = 0x22; // local variable can store 0x22 correctly.
__asm
{
pop es
pop ds
};
}
ここで「できない」とは何ですか?それはいけません?コンパイルエラーまたはランタイムエラーが発生しますか?このようにCとアセンブリを混在させることはできますか?生成されたアセンブラコードを確認しましたか? – usr2564301
@ usr2564301:メモリアクセスは別の場所に移動します。 – Joshua
ここにデバッグヘルプを表示するには[mcve]を投稿する必要があります。質問自体に問題を再現するすべてのコード、コードをビルドするために行った手順、コードの実行方法、予想された動作、実際にどのような動作を含める必要があります。 –