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