newがRustにはないので、カーネル自身が動的なアロケーションについてカーネルの制御を利用できるかどうかはわからないが、代替手段になるかもしれないメモリ管理を先に進めてみる。OS起動直後のメインメモリの未使用領域についての情報は、ブートサービス停止時に返されるメモリマップの情報がまさにそれである。同じようにmainの引数に加えて渡す。(使用可能領域上にUEFIによって準備されたデータが存在する)、これをカーネルの制御下に移動しておかないと、データが上書きされたときにCPUが誤動作する原因となる。セグメンテーションの設定を集めたもの。レジスタに設定すればよい。呼び出しが返ってきたらループしておく。今回はスタック領域もアセンブリのbssセクションに書いてみた。シンプルにコンパイルしてリンク対象に含めるのが良いだろう。println!("cargo:rustc-link-lib=static=asm");}GDTGDTの設定は本書通り行う。ビットフィールドにはmodular-bitfieldが良さそうだったので使った。B8,}セグメントレジスタGDTもそうだがこの辺はx86からの歴史的な事情が多い。セグメントレジスタは使用されず、ページングが用いられるが、一部値は使われる。ESレジスタは使用されない。Storage)を指すのに使われたりする。版は、GSセグメントレジスタがスレッド局所記憶へのポインタを指すようになっている。LinuxカーネルではGSがCPU単位のデータを指している。limitとbaseは無視されるが、CSの指すディスクリプタの設定内容に基づいてアクセス権限の検査が行われる。