| ア | イ | ウ | エ | オ |
| カ | キ | ク | ケ | コ |
| サ | シ | ス | セ | ソ |
| タ | チ | ツ | テ | ト |
| ナ | ニ | ヌ | ネ | ノ |
| ハ | ヒ | フ | ヘ | ホ |
| マ | ミ | ム | メ | モ |
| ヤ | ユ | ヨ | ||
| ラ | リ | ル | レ | ロ |
| ワ | ヰ | ヴ | ヱ | ヲ |
| ン |
| A | B | C | D | E |
| F | G | H | I | J |
| K | L | M | N | O |
| P | Q | R | S | T |
| U | V | W | X | Y |
| Z | 数字 | 記号 | ||
システムの機能を呼び出すこと。及び、それをするための機構のこと。
システム、一般にはオペレーティングシステム(OS)であるが、その機能の呼び出し方はOSによって大きく違いがある。
OSに求められる機能の差や、OSの設計方針の差などが反映されるからである。
かくして、あるOS用に書かれたプログラムは、別のOSで動かすことができない(実際の理由はそれだけではないが)。
呼び出し方法は、出来るだけ無理がなく、簡単であるほうが望ましい。
そこでどのようなOSでも、そのCPUの種類に応じ、最も自然な方法が選択されている。
x86系でありがちなOSでは、16ビット/32ビット/64ビットの環境を問わず、ソフトウェア割り込み機能が使われている。
| OS名 | 呼び出し方法 | 概要 |
|---|---|---|
| MS-DOS | INT 21h | AHまたはAXにファンクション番号。引数はレジスター。 |
| Windows VxD | INT 20h | CD20FFFFNNNN (int 20h, <ファンクション番号>, <VxD識別番号>) |
| Windows NT | INT 2Eh | EAXにファンクション番号 |
| Windows 2000 | ||
| Windows XP(x86) | sysenter | |
| Windows XP(64) | syscall | |
| FreeBSD | INT 80h | EAXにファンクション番号。引数はスタック。 |
| Linux | INT 80h | EAXにファンクション番号。引数はレジスター。 |
| sysenter |
Linuxの場合、Linux 2.6からsysenterによる呼び出しにも対応した。
Windows 9xの場合、アプリケーションソフトは通常、ring3で動作する。このためINT 30hでリングレベルをring0に変更し、VxD層にある機能を呼ぶことになる。後はWindows 3.xと同様である。
VxD層の機能は、INT 20hで呼ぶ。引数込みで6バイトで構成される。
CD 20 FF FF NN NN
FFFFがファンクション番号、NNNNが呼び出すVxD識別番号である。
FreeBSDのx86版は、int 80hソフトウェア割り込みで行なわれる。
引数はスタックにpushし、システムコール番号をEAXレジスターに入れ、int 80hを実行する。
Linuxのx86版は、二通り方法がある。
基本はFreeBSDと同様にソフトウェア割り込みで行なわれる。但し呼び方は若干異なり、引数はレジスターに入れ、システムコール番号をEAXレジスターに入れ、int 80hを実行する。各レジスターの使われ方は、次のとおり。
Linuxカーネル2.6からはsysenterによる呼び出しにも対応した。int 80h命令でのシステムコールは既に古く、sysenterの方が高速である。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます