0

このコードを説明できる人はいますか? これは古い試験問題で、ネット上で答えを見つけることができません。

 void (*x)();
 x=0xFFFF0000;
 printf("1"); x();
 printf("2"); x();
 printf("3"); x();
4

2 に答える 2

3

従来のリアルモード x86 アーキテクチャでは、アドレス 0xFFFF0000 に対して無条件の JMP を実行することで、システムの起動をトリガーできました。

コードは基本的に関数として定義x()し、関数のメモリ内アドレスを 0xFFFF0000 に設定しています。関数を呼び出すと、システムはCALL 0xFFFF000アセンブラー レベルで実行または同様の処理を行い、BIOS ブート コードに直接ジャンプして、システムの再起動をトリガーします。

于 2012-04-09T16:00:17.073 に答える
0

あなたが持っている

void (*x)();

これは、void を返し、void を入力として受け入れる関数へのポインターです。試験によると、コールド ブート機能が配置されているメモリ位置 0xFFFF0000 をポイントします。

次に、3 つの printfs() に続いて、そこにある関数を 3 回呼び出します。しかし、私は本当に要点がわかりません。質問はありますか?試験問題はこれだけですか?

于 2012-04-09T16:02:22.350 に答える