syscall
読み:シス-コール
外語:syscall

 AMDx86系プロセッサーの命令の一つで、システムコール用に用意された命令。
目次

概要
 AMD K6以降で利用できる。また、AMD64 ISA互換機能として搭載されたIntel 64でも利用できる。
 オペコードは「0fh 05h」の2バイトである。
 元の処理に戻る場合の命令はsysretで、こちらのオペコードは「0fh 07h」の2バイトである。

特徴

由来
 従来、システムコールの実装にはソフトウェア割り込み機能が使われていた(Windows NT系ならint 2eh、Linuxならint 80h)が、ソフトウェア割り込みは処理が煩雑であるため遅かった。
 そこで、高速なシステムコールを実現するために、この命令が追加された。

対応判定
 未対応のCPUで利用すると無効命令例外が発生するので、CPUがこの命令に対応しているかどうかは、CPUID命令で判定する。
 EAX=80000000HでCPUID命令を実行し、返却値EAXの最上位ビットが1となる拡張CPUID対応環境で、かつEAX=80000001HでCPUIDを実行した結果得られたEDXレジスターのビット11が1のとき、命令に対応している。

挙動
 syscall命令は、次のような動作をする。

再検索