This domain may be for sale!
Twitterでうっかり"GCCインラインアセンブラ拡張構文の解説でもするか"と発言したら、二人くらいに期待ageされたので、とりあえずCPUIDを例にインラインアセンブラの解説をします。 環境はi486(x86,IA-32)上のGCCが動く環境を想定しています。80386はCPUIDが無いのでごめんなさい。 x86_64(x64,AMD64)の人もそのまま遊べます。MIPSやPPC動かしている人は回れ右。今回はOSは関係ありません。 コンパイラは当然GCC(gcc/g++)です。3.2以降または4.0以降で動くと思います。MSVCやdmdの人は回れ右。最適化は特記の無い限りしてもかまいません。 単純な例から。 とりあえずcpuid命令を発行してみます。 int main() { asm volatile ( "xor %eax, %eax\n\t" "cpuid" ); return 0
3.3.2 タスク状態セグメント タスク状態セグメント(TSS) - 80x86アーキテクチャで用意されているハードウェアコンテキスを格納するためのセグメント。 LinuxではTSSの初期化はしているが、ハードウェアコンテキストの切り替えには使用していない。 [質問] Q1. なぜTSSを使用しないのか? A1. 複数のCPUに対応していないため Q2. 使用しないTSSをなぜ初期化するのか? A2. TSSの役割はハードウェアコンテキストだけではない。 = カーネルモードのスタックの読み込み = I/Oパーミッションビットマップ TSSの実装 init_tss配列 - CPUの数だけtss_struct構造体の要素数を持つ配列 tss_struct構造体 - TSSの実体 TSSD( Task State Segment Descriptor ) - 8byte長のディスクリプタ inc
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く