【フラグ】
| OF
| DF
| IF
| TF
| SF
| ZF
| ??
| AF
| ??
| PF
| ??
| CF
|
| −
| −
| −
| −
| −
| −
| −
| −
| −
| −
| −
| −
|
|
【動作】
この命令の直後に位置する命令のアドレス(現在のCSとIPまたはEIP)の内容をスタックにプッシュして、dest に分岐します。
| near CALL
|
| [SP+0]
| ←
| IPまたはEIP
|
| far CALL
|
| [SP+0]
| ←
| IPまたはEIP
|
| [SP+2(4)]
| ←
| CS |
|
|
- オペランドと実行モードに依存して分岐方法が決まります。
| near imm16,imm32, reg16,reg32, mem16,mem32
|
| セグメントの変更を伴わない分岐で呼び出し元へ戻るときは、RETN命令を使用します。 imm16,imm32は直後の命令のアドレスに相対の符号付きオフセット値でIP(EIP)に加算されます。 それ以外ではIP(EIP)に新しくロードされる値、または値の格納されているアドレス(間接指定)を表わします。
|
| far imm32,imm48,mem32,mem48
|
| セグメントを変更する分岐で呼び出し元へ戻るときはRETF命令を使用します。 新しくCSとIP(EIP)にロードされる値または値の格納されているアドレス(間接指定)を表わします。
|
| プロテクト モード
|
| ディスクリプタのアクセス権に依存して次の何れかとなります。
|
- far CALL (同一レベル)
- far CALL (異なるレベル)
- タスクの切り替え
|
|
- 通常、CALL命令に対する上記のRETN, RETF命令は、アセンブラが自動判定しますので、RET命令を記述します。
- 32ビット セグメントからの16ビット セグメントへのCALL命令でプッシュされるのは、EIPではなくてIPの内容なので注意が必要です。
|