x86.h static inline uchar inb(ushort port)
トップページ
jupiteroak.hatenablog.com
x86.h
https://github.com/mit-pdos/xv6-public/blob/master/x86.h#L3
static inline uchar inb(ushort port) { uchar data; asm volatile("in %1,%0" : "=a" (data) : "d" (port)); return data; }
inb関数は、引数port(I/Oポートアドレス)で指定される入出力装置から1バイトのデータを読み取ります。
引数 ushort port
入出力装置を指定するI/Oポートアドレスです。
戻り値 uchar data
in命令(ポート入力命令)で入出力装置から読み取った1バイトのデータです。
処理の内容
インラインアセンブラ
asm volatile("in %1,%0" : "=a" (data) : "d" (port));
関数内のインラインアセンブラを解釈すると以下のようになります。
アセンブリ言語命令
in %edx, %eax
インラインアセンブラの命令を実行する前の状態
入出力装置から読み取った1バイトのデータを戻り値としてリターン
return data;
インラインアセンブラの命令実行後は、eaxレジスタの値がdataに格納されているので、その値を戻り値としてリターンします。