x86.h static inline uint readeflags(void)
トップページ
jupiteroak.hatenablog.com
x86.h
https://github.com/mit-pdos/xv6-public/blob/master/x86.h#L94
static inline uint readeflags(void) { uint eflags; asm volatile("pushfl; popl %0" : "=r" (eflags)); return eflags; }
readeflags関数は、EFLAGSレジスタの値を取得します。
戻り値 uint eflags
取得したEFLAGSレジスタの値です。
処理の内容
インラインアセンブラ
asm volatile("pushfl; popl %0" : "=r" (eflags));
関数内のインラインアセンブラを解釈すると以下のようになります。
pushfl
pushfl命令により、EFLAGSレジスタの値をスタックへ退避させます。
取得したEFLAGSレジスタの値を戻り値としてリターン
return eflags;
インラインアセンブラの命令実行後は、レジスタの値がeflagsに格納されているので、その値を戻り値としてリターンします。