現在、「作りながら学ぶOSカーネル 保護モードプログラミングの基本と実践」という本でOSの仕組みについて学んでいます。
そこで、x86プロセッサについてリアルモードから保護モードへ移行する際にCR0の最下位ビット(PEビット)を1にすることでCPUが保護モードとして動作するようになるという記載がありました。
しかし、その後の32ビットコード部分へのジャンプ命令では、prefix(0x66, 0x67)をつけているようです。
CPUはすでに保護モード(32ビット)として動いているはずなのでprefixは不要と思えるのですが、なぜ必要となるのでしょうか?
確かに、prefixを外して実行するとうまくいきませんでした。
実際のNASMのコードは下記となります。
mov eax, cr0 or eax, 0x00000001 mov cr0, eax jmp $+2 nop nop db 0x66 # <- ここ db 0x67 # <- ここ db 0xEA dd PM_Start dw SysCodeSelector
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/07 19:28
2018/06/07 23:45
2018/06/08 02:03
2018/06/08 02:26 編集
2018/06/08 03:12
2018/06/08 03:19
2018/06/08 03:26
2018/06/08 04:58 編集
2018/06/08 05:07
2018/06/08 15:36