x86.h static inline void lcr3(uint val)

トップページ
jupiteroak.hatenablog.com


x86.h
https://github.com/mit-pdos/xv6-public/blob/master/x86.h#L141

static inline void lcr3(uint val)
{
  asm volatile("movl %0,%%cr3"
                : 
                : "r" (val));
}

lcr3関数は、引数valで指定されたページディレクトリの先頭物理アドレスをCR3に設定します。

引数 uint val
ページディレクトリの先頭物理アドレスです。


処理の内容

インラインアセンブラ

asm volatile("movl %0,%%cr3"
                : 
                : "r" (val));

関数内のインラインアセンブラを解釈すると以下のようになります。

アセンブリ言語命令

movl %レジスタ, %CR3

インラインアセンブラの命令を実行する前の状態

・eax,ebx,ecx,edx,esi,ediレジスタのいずれか(入力レジスタのリストにrで表記されている)
引数valの値が設定されています。

movl %レジスタ, %CR3

movl命令により、レジスタに設定されている値(ページディレクトリの先頭物理アドレス)がCR3にロードされます。