• 検索結果がありません。

IA-32 インテル ®

4.9.2. 浮動小数点例外の優先順位

格納されたステート情報をチェックして、エラーの性質を判定する。

エラーの原因となった条件を修正するための処置をとる。

例外フラグをクリアする。

割り込みをかけられたプログラムに戻り、通常の実行を再開する。

例外ハンドラは、上記の回復手続きの代わりに、以下の処置を実行することもできる。

後で表示または印刷できるように、ソフトウェア内で例外カウンタをインクリメントする。

診断情報(ステート情報など)を印刷または表示する。

プログラムの実行を停止する。

5

命令セットの要約

命令セットの要約

本章では、すべてのIA-32命令の概要を示す。IA-32命令は、以下の主要グループに分けられる。

汎用命令

x87 FPU命令

x87 FPU命令とSIMDステート管理

MMXテクノロジ命令

SSE

SSE2

システム命令

表5-1.は、各命令グループと、そのグループをサポートするIA-32プロセッサを示している。各主要 グループの命令は、さらに機能別のサブグループに分けられる。

以下の各節では、各主要グループおよびサブグループの命令の一覧を示す。各命令のニーモニック と記述名が示される。2つ以上のニーモニック(例えば、CMOVA/CMOVNBE)は、同じ命令オペコー ドを表す異なるニーモニックである。いくつかの命令については、コード・リストが読みやすくな るように、アセンブラが冗長ニーモニックをサポートしている。例えば、CMOVA (Conditional move if above)とCMOVNBE (Conditional move if not below or equal)は、同じ条件を表している。

表5-1. 命令グループとIA-32プロセッサ

命令セット・

アーキテクチャ サポートするIA-32プロセッサ

汎用命令 すべてのIA-32プロセッサ

x87 FPU命令 Intel486、Pentium、MMXテクノロジPentium、インテルCeleron、Pentium Pro、Pentium II、Pentium II Xeon、Pentium III、Pentium III Xeon、Pentium 4 プロセッサ

x87 FPU命令とSIMD ステート管理

Pentium II、Pentium II Xeon、Pentium III、Pentium III Xeon、Pentium 4プロ セッサ

MMXテクノロジ命令 MMXテクノロジPentium、インテルCeleron、Pentium II、Pentium II Xeon、

Pentium III、Pentium III Xeon、Pentium 4プロセッサ SSE Pentium III 、Pentium III Xeon、Pentium 4プロセッサ

SSE2 Pentium 4プロセッサ

システム命令 すべてのIA-32プロセッサ

5 .1 . 汎用命令

汎用命令は、IA-32プロセッサ上で動作するアプリケーションとシステム・ソフトウェアを作成する ときにプログラマがよく使用する、基本的なデータ転送操作、算術演算、論理演算、プログラム・

フロー操作、およびストリング操作を実行する。汎用命令は、メモリ内、汎用レジスタ(EAX、EBX、

ECX、EDX、EDI、ESI、EBP、およびESP)内、およびEFLAGSレジスタ内のデータを操作する。ま

た、汎用命令は、メモリ内、汎用レジスタ内、およびセグメント・レジスタ(CS、DS、SS、ES、FS、

およびGS)内のアドレス情報も操作する。この命令グループには、データ転送命令、2進整数算術命

令、10進算術命令、論理演算命令、シフト命令とローテート命令、ビット命令とバイト命令、プロ グラム制御命令、ストリング命令、フラグ制御命令、セグメント・レジスタ命令、およびその他の 命令の各サブグループが含まれる。

5.1.1. データ転送命令

データ転送命令は、メモリと汎用レジスタ/セグメント・レジスタの間でデータを転送する。また、

データ転送命令は、条件付き転送、スタック・アクセス、およびデータ変換などの特殊な操作も実 行する。

MOV Move data between general-purpose registers; move data between memory and general-purpose or segment registers; move immediates to general-purpose registers

CMOVE/CMOVZ Conditional move if equal/Conditional move if zero CMOVNE/CMOVNZ Conditional move if not equal/Conditional move if not zero CMOVA/CMOVNBE Conditional move if above/Conditional move if not below or equal CMOVAE/CMOVNB Conditional move if above or equal/Conditional move if not below CMOVB/CMOVNAE Conditional move if below/Conditional move if not above or equal CMOVBE/CMOVNA Conditional move if below or equal/Conditional move if not above CMOVG/CMOVNLE Conditional move if greater/Conditional move if not less or equal CMOVGE/CMOVNL Conditional move if greater or equal/Conditional move if not less CMOVL/CMOVNGE Conditional move if less/Conditional move if not greater or equal CMOVLE/CMOVNG Conditional move if less or equal/Conditional move ifnot greater CMOVC Conditional move if carry

CMOVNC Conditional move if not carry CMOVO Conditional move if overflow CMOVNO Conditional move if not overflow CMOVS Conditional move if sign (negative) CMOVNS Conditional move if not sign (non-negative)

CMOVP/CMOVPE Conditional move if parity/Conditional move if parity even CMOVNP/CMOVPO Conditional move if not parity/Conditional move if parity odd

XCHG Exchange

BSWAP Byte swap

XADD Exchange and add

CMPXCHG Compare and exchange

CMPXCHG8B Compare and exchange 8 bytes

PUSH Push onto stack

POP Pop off of stack

PUSHA/PUSHAD Push general-purpose registers onto stack POPA/POPAD Pop general-purpose registers from stack

IN Read from a port

OUT Write to a port

CWD/CDQ Convert word to doubleword/Convert doubleword to quadword CBW/CWDE Convert byte to word/Convert word to doubleword in EAX register

MOVSX Move and sign extend

MOVZX Move and zero extend

5.1.2. 2 進算術命令

2進算術命令は、メモリまたは汎用レジスタ内のバイト整数、ワード整数、およびダブルワード整数 の基本的な2進整数計算を実行する。

ADD Integer add

ADC Add with carry

SUB Subtract

SBB Subtract with borrow

IMUL Signed multiply

MUL Unsigned multiply

IDIV Signed divide

DIV Unsigned divide

INC Increment

DEC Decrement

NEG Negate

CMP Compare

5.1.3. 10 進算術命令

10進算術命令は、2進化10進数(BCD)データの10進算術演算を実行する。

DAA Decimal adjust after addition DAS Decimal adjust after subtraction

AAA ASCII adjust after addition

AAS ASCII adjust after subtraction AAM ASCII adjust after multiplication

AAD ASCII adjust before division

5.1.4. 論理命令

論理命令は、バイト値、ワード値、およびダブルワード値の基本的なAND、OR、XOR、およびNOT 論理演算を実行する。

AND Perform bitwise logical AND

OR Perform bitwise logical OR

XOR Perform bitwise logical exclusive OR

NOT Perform bitwise logical NOT

5.1.5. シフト命令とローテート命令

シフト命令とローテート命令は、ワード・オペランドおよびダブルワード・オペランド内のビット のシフトとローテートを実行する。

SAR Shift arithmetic right

SHR Shift logical right

SAL/SHL Shift arithmetic left/Shift logical left

SHRD Shift right double

SHLD Shift left double

ROR Rotate right

ROL Rotate left

RCR Rotate through carry right

RCL Rotate through carry left