「オペレーティングシステム」の版間の差分

削除された内容 追加された内容
1,613 行
プロテクトモードにいこうするためのコードの一部を抜粋すると、おおむね書きのような感じになる<ref>白崎博生 著『Linuxのブートプロセスをみる』、株式会社KADOKAWA(発行)、アスキー・メディアワークス(プロデュース)、2014年10月2日 初版、98ページ </ref>。
 
;コード例
<source lang="asm">
mov eax, cr0 ;
or eaxax, 1 ;
mov cr0, eax ; 最下位ビットに1を設定
jmp ジャンプ先のラベル
 
1,628 ⟶ 1,629行目:
</source>
 
;解説
わざわざジャンプ jmp を通す理由は、CPUの先読みした命令を破棄するためである<ref>白崎博生 著『Linuxのブートプロセスをみる』、株式会社KADOKAWA(発行)、アスキー・メディアワークス(プロデュース)、2014年10月2日 初版、98ページ </ref><ref>林高勲 著『X86系コンピュータを動かす理論と実装 作って理解するOS』、技術評論社、2019年10月9日 初版 第1刷 発行、471ページ</ref> 。ジャンプ命令には、先読みを破棄する機能がある。
cr0レジスタの最下位ビット(PEビットという)が1だとプロテクトモードである、という仕様である。
<source lang="asm">
mov eax, cr0
or ax, 1
mov cr0, eax
</source>
の3行の処理で、cr0レジスタの最下位ビットを1に設定している。
 
 
設定後にわざわざジャンプ jmp を通す理由は、CPUの先読みした命令を破棄するためである<ref>白崎博生 著『Linuxのブートプロセスをみる』、株式会社KADOKAWA(発行)、アスキー・メディアワークス(プロデュース)、2014年10月2日 初版、98ページ </ref><ref>林高勲 著『X86系コンピュータを動かす理論と実装 作って理解するOS』、技術評論社、2019年10月9日 初版 第1刷 発行、471ページ</ref> 。ジャンプ命令には、先読みを破棄する機能がある。
 
なお、パイプラインという仕組みにより、CPUは先読みしている。このパイプラインの先読みを破棄することをフラッシュという。