概要

x86は8086から始めっています。
ここでは8086~Core i7の第1世代のNehalemまでの命令セットの概要を示します。

8086

1978年にIntelが発表した16bit CPUである。外部バスが8bitの8088が1979年に発表されIBM PCに採用された。
アドレスバスは20bitである。
アドレスバスの拡張に伴い4本の16bit長のセグメントレジスタを採用している。
8086が外部データーバスが16bit、8088が外部データーバスが8bitでありアドレスバスとマルチプレックスされている。
8bit CPUである8085と比べて、インデックスなど大幅なアドレッシングモードの追加、8/16bit演算命令、乗除算命令の追加など大幅に拡張されている。
トランジスタ 2万9千個 プロセス3μ
8086 5MHz
8086-2 8MHz
8086-1 10MHz
40ピンDIP

レジスタ

16bitレジスタが8本、そのうち4本は分割して8bitレジスタとして使用可能。
8086
AXAHALAccumulator
BXBHBLBase
CXCHCLCount
DXDHDLData
SPStack Pointer
BPbase Pointer
SISource Index
DIDestination Index
IPInstruction Pointer
FlagsHFlagsLStatus Flags
CSCode Segment
DSData Segment
SSStack Segment
ESExtra Segment
SPはSSがディフォルト
IPはCSがディフォルト

FLAGS

下位8bitのフラグのビット配置は8080と互換性があります。
1514131211109876543210
xxxxOFDFIFTFSFZFxAFxPFxCF
OF オーバーフローフラグ
1 演算結果が符号ありの最大範囲を超えた
0 上記以外
DF 方向フラグ
1:ストリング命令でデクリメント
0:ストリング命令でインクリメント
IFフラグ
1 割り込み禁止
0 割り込み許可
TF ENTIREフラグ
1:全レジスタを保存
0:PC,CCを保存
S ネガティブフラグ
1 演算結果の最上位ビットが1 0 上記以外
ZF ゼロフラグ
1 演算結果、またはロード時の値が0
0 上記以外
AF ハーフキャリー
BCD演算の1桁目が桁あふれかどうかを示す。
8bitのADA,ADCの後にAAA,DAA,AAS,DASを使用すると1桁に桁あふれが生じているときに1,2桁目を補正できる。
PF パリティキャリー
1のビットが偶数個の時セットされる。
C キャリーフラグ
1 加算命令実行時:演算結果を超えた(キャリーあり)
0 加算命令実行時:演算結果を超えていない(キャリーなし)

メモリー

メモリー
FFFF0hRESET時のジャンプ先
00000h~003FFh割込みポインター(255個)
割込みベクター
番号内容
0除算エラー
1予約済みフォルト
2NMI 割り込み
3ブレークポイント INT 3命令
4オーバーフロー、INTO命令

命令

基本的に8bit/16bit命令がそれぞれほぼ対象に存在しています。
基本的な命令にレジスタやアドレッシングモードの情報を付加するバイト(mod-r/m)が付属しています。

8086/8088命令一覧

8086/8088
instop 76543210 76543210
movr/m,reg r/m←reg 1 0 0 0 1 0 0w modregr/m
movreg,r/m reg←r/m 1 0 0 0 1 0 1w modregr/m
movreg,imm reg←imm 1 0 1 1wreg
movA,(ads) A←(ads) 1 0 1 0 0 0 0w
mov(ads),A (ads)←A 1 0 1 0 0 0 1w
movsreg,r/m sreg←r/m 1 0 0 0 1 1 1 0 mod0sregr/m
movr/m,sreg r/m←sreg 1 0 0 0 1 1 0 0 mod0sregr/m
pushr/m --SP,[SP]←r/m 1 1 1 1 1 1 1 1 mod1 1 0r/m
pushreg --SP,[SP]←reg 0 1 0 1 0reg
pushsreg --SP,[SP]←sreg 0 0 0sreg1 1 0
popr/m r/m←[SP],++SP 1 0 0 0 1 1 1 1 mod0 0 0r/m
popreg reg←[SP],++SP 0 1 0 1 1reg
popsreg sreg←[SP],++SP 0 0 0sreg1 1 1
xchgr/m,reg r/m⇄reg 8bit 1 0 0 0 0 1 1 w modregr/m
xchgA,reg A⇄reg 16bit 1 0 0 1 0reg
inA,imm8 A←imm8 1 1 1 0 0 1 0w
inA,DX A←DX 1 1 1 0 1 1 0w
outimm8,A imm8←A 1 1 1 0 0 1 1w
outDX,A DX←A 1 1 1 0 1 1 1w
xlat DS:[BX+AL]←AL 1 1 0 1 0 1 1 1
leareg,r/m reg←実行アドレス r/m 1 0 0 0 1 1 0 1 modregr/m
ldsreg reg←r/m[0],DS←r/m[2] 1 1 0 0 0 1 0 1 modregr/m
lesreg reg←r/m[0],ES←r/m[2] 1 1 0 0 0 1 0 0 modregr/m
lahf AH←flagの下位バイト(SZ,ZF,AF,PF,CF) 1 0 0 1 1 1 1 1
sahf flagの下位バイト(SZ,ZF,AF,PF,CF)←AH 1 0 0 1 1 1 1 0
pushf --SP,[SP]←flags 1 0 0 1 1 1 0 0
popf flags←[SP],++SP 1 0 0 1 1 1 0 1
addr/m,reg r/m←r/m+reg 0 0 0 0 0 0 0w modregr/m
addreg,r/m reg←reg+r/m 0 0 0 0 0 0 1w modregr/m
addr/m,imm r/m←r/m+imm 1 0 0 0 0 0 Sw mod0 0 0r/m
addimm A←imm 0 0 0 0 0 1 0w
adcr/m,reg r/m←r/m+reg+C 0 0 0 1 0 0 0w modregr/m
adcreg,r/m reg←reg+r/m+C 0 0 0 1 0 0 1w modregr/m
adcr/m,imm r/m←r/m+imm+C 1 0 0 0 0 0 Sw mod0 1 0r/m
adcimm A←imm 0 0 0 1 0 1 0w
incr/m r/m←r/m+1 1 1 1 1 1 1 1 w mod0 0 0r/m
increg reg←reg+1 reg16 0 1 0 0 0reg
aaa 加算後のアンパックBCDの補正 0 0 1 1 0 1 1 1
daa 加算後のパックBCDの補正 0 0 1 0 0 1 1 1
subr/m,reg r/m←r/m-reg 0 0 1 0 1 0 0w modregr/m
subreg,r/m reg←reg-r/m 0 0 1 0 1 0 1w modregr/m
subr/m,imm r/m←r/m-imm 1 0 0 0 0 0 Sw mod1 0 1r/m
subimm A←imm 0 0 1 0 1 1 0w
sbbr/m,reg r/m←r/m-reg-C 0 0 0 1 1 0 0w modregr/m
sbbreg,r/m reg←reg-r/m-C 0 0 0 1 1 0 1w modregr/m
sbbr/m,imm r/m←r/m-imm-C 1 0 0 0 0 0 Sw mod0 1 1r/m
sbbimm A←imm 0 0 0 1 1 1 0w
decr/m r/m←r/m-1 1 1 1 1 1 1 1 w mod0 0 1r/m
decreg reg←reg-1 reg16 0 1 0 0 1reg
negr/m r/m←r/m-1 1 1 1 1 0 1 1 w mod0 1 1r/m
cmpr/m,reg r/m-reg 0 0 1 1 1 0 0w modregr/m
cmpreg,r/m reg-r/m 0 0 1 1 1 0 1w modregr/m
cmpr/m,imm r/m-imm 1 0 0 0 0 0 Sw mod1 1 1r/m
cmpimm A-imm 0 0 1 1 1 1 0w
aas 減算後のアンパックBCDの補正 0 0 1 1 1 1 1 1
das 減算後のパックBCDの補正 0 0 1 0 1 1 1 1
mulr/m AX or DX:AX←AL or AX*r/m unaigned 1 1 1 1 0 1 1w mod1 0 0r/m
imulr/m AX or DX:AX←AL or AX*r/m signed 1 1 1 1 0 1 1w mod1 0 1r/m
divr/m AL or AX←AX or DX:AX % r/m unsigned
AH or DX←DX:AX or AX % r/m unsigned
1 1 1 1 0 1 1w mod1 1 0r/m
idivr/m AL or AX←AX or DX:AX % r/m signed
AH or DX←DX:AX or AX % r/m signed
1 1 1 1 0 1 1w mod1 1 1r/m
aam 乗算後のアンパックBCDの補正(AX) 1 1 0 1 0 1 0 0 0 0 0 0 1 0 1 0
aad 除算後のアンパックBCD値の補正(AL) 1 1 0 1 0 1 0 1 0 0 0 0 1 0 1 0
cbw AX←AL signed 1 0 0 1 1 0 0 0
cwd DX:AX←AX signed 1 0 0 1 1 0 0 1
notr/m r/m←¬r/m 1 1 1 1 0 1 1w mod0 1 0r/m
shl/salr/m r/m←r/m<<1 論理左シフト 1 1 0 1 0 0 10w mod1 0 0r/m
shl/salr/m,CL r/m←r/m<<CL 論理左シフト 1 1 0 1 0 0 11w mod1 0 0r/m
shrr/m r/m←r/m>>1 論理右シフト 1 1 0 1 0 0 10w mod1 0 1r/m
shrr/m,CL r/m←r/m>>CL 論理右シフト 1 1 0 1 0 0 11w mod1 0 1r/m
sarr/m r/m←r/m<<1 算術右シフト 1 1 0 1 0 0 10w mod1 1 1r/m
sarr/m,CL r/m←r/m<<CL 算術右シフト 1 1 0 1 0 0 11w mod1 1 1r/m
rolr/m 左ローテート 1 1 0 1 0 0 10w mod0 0 0r/m
rolr/m,CL 左ローテオート 1 1 0 1 0 0 11w mod0 0 0r/m
rorr/m 右ローテート 1 1 0 1 0 0 10w mod0 0 1r/m
rorr/m,CL 右ローテート 1 1 0 1 0 0 11w mod0 0 1r/m
rclr/m キャーりを含めた左シフト 1 1 0 1 0 0 10w mod0 1 0r/m
rclr/m,CL キャーりを含めた左シフト 1 1 0 1 0 0 11w mod0 1 0r/m
rcrr/m キャリーを含めた右シフト 1 1 0 1 0 0 10w mod0 1 1r/m
rcrr/m,CL キャリーを含めた右シフト 1 1 0 1 0 0 11w mod0 1 1r/m
andr/m,reg r/m←r/m∧reg 0 0 1 0 0 0 0w modregr/m
andreg,r/m reg←reg∧r/m 0 0 1 0 0 0 1w modregr/m
andr/m,imm r/m←r/m∧imm 1 0 0 0 0 0S w mod1 0 0r/m
andimm A←A∧imm 0 0 1 0 0 1 0w
testr/m,reg r/m∧reg 0 0 0 1 0 0 0w modregr/m
testreg,r/m reg∧r/m 0 0 0 1 0 0 1w modregr/m
testr/m,imm r/m∧imm 1 0 1 0 1 0 0 w mod0 0 0r/m
testimm A∧imm 0 0 1 0 0 1 0w
orr/m,reg r/m←r/m∨reg 0 0 0 0 1 0 0w modregr/m
orreg,r/m reg←reg∨r/m 0 0 0 0 1 0 1w modregr/m
orr/m,imm r/m←r/m∨imm 1 0 0 0 0 0 Sw mod0 0 1r/m
orimm A←A∨imm 0 0 0 0 1 1 0w
xorr/m,reg r/m←r/m⊻reg 0 0 0 0 1 0 0w modregr/m
xorreg,r/m reg←reg⊻r/m 0 0 0 0 1 0 1w modregr/m
xorr/m,imm r/m←r/m⊻imm 1 0 0 0 0 0 Sw mod0 0 1r/m
xorimm A←A⊻imm 0 0 1 1 0 1 0w
repnz/repne ゼロでない間は次のストリング命令をリピート(CX回数) 1 1 1 1 0 0 10
rep/repz/repe 次のストリング命令をリピート(CX回数) 1 1 1 1 0 0 11
movs ES:[DI]←DS:[SI],オートインクリメント又はオートデクリメント 1 0 1 0 0 1 0w
cmps DS:[SI]-ES:[DI],オートインクリメント又はオートデクリメント 1 0 1 0 0 1 1w
scas AL or AX - ES:[DI],オートインクリメント又はオートデクリメント 1 0 1 0 1 1 1w
lods AL or AX - DS:[SI],オートインクリメント又はオートデクリメント 1 0 1 0 1 1 0w
stos ES:[DI]←AL or AX,オートインクリメント又はオートデクリメント 1 0 1 0 1 0 1w
call near 1 1 1 0 1 0 0 0
callr/m r/m near 1 1 1 1 1 1 1 1 mod0 1 0r/m
call far 1 0 0 1 1 0 1 0
callr/m r/m far 1 1 1 1 1 1 1 1 mod0 1 1r/m
jmp near 1 1 1 0 1 0 0 1
jmp short 1 1 1 0 1 0 1 1
jmpr/m r/m near 1 1 1 1 1 1 1 1 mod1 0 0r/m
jmp far 1 1 1 0 1 0 1 0
jmpr/m r/m far 1 1 1 1 1 1 1 1 mod1 0 1r/m
ret near return 1 1 0 0 0 0 1 1
retimm near return,SP←SP+imm16 1 1 0 0 0 0 1 0
ret far return 1 1 0 0 1 0 1 1
retimm far return,SP←SP+imm16 1 1 0 0 1 0 1 0
j????short near 0 1 1 1cc
loopshort --CX,if cx≠0 jmp 1 1 1 0 0 0 1 0
loopz/loopeshort --CX,if cx≠0 ∧ ZF=1 jmp 1 1 1 0 0 01
loopnz/loopneshort --CX,if cx≠0 ∧ ZF=0 jmp 1 1 1 0 0 00
jcxzshort if cx=0 jmp 1 1 1 0 0 0 1 1
intimm immで指定した番号のソフトウェア割込み 1 1 0 0 1 1 0 1
into if ZO=1 int4 1 1 0 0 1 1 1 0
iret 割込み復帰 1 1 0 0 1 1 1 1
clc CF←0 1 1 1 1 1 0 0 0
cmc CF←¬CF 1 1 1 1 0 1 0 1
stc CF←1 1 1 1 1 1 0 0 1
cld DF←0 ++ 1 1 1 1 1 1 0 0
std DF←1 -- 1 1 1 1 1 1 0 1
cli IF←0 1 1 1 1 1 0 1 0
sti IF←1 1 1 1 1 1 0 1 1
hlt HALT 1 1 1 1 0 1 0 0
nop 1 0 0 1 0 0 0 0
wait 未処理のマスクされていない浮動小数点例外をチェックする 1 0 0 1 1 0 1 1
esc FPU用の命令 アドレッシング等を8086が行う 1 1 0 1 1X X X modY Y Yr/m
lock 後の命令の実行中LOCK信号をアサートする。 1 1 1 1 0 0 0 0
ES:/CS:/SS:/DS: セグメントオーバーライドプリフィックス 0 0 1sreg1 1 0
≠ 等しくない
∨Boolean OR
⊻Boolean exclusive OR
∧ Boolean AND
¬ Boolean Not
% 余
>> 右シフト
<< 左シフト
⇄ 交換

80286

特徴

80286は1982年に発表されIBM PC/ATに採用され広く普及。
リアルモードは基本的に8086/8088と互換性あり。
セグメント方式のMMUを搭載し、プロテクトモード時には物理アドレス24bit/論理アドレス30bitに拡張している。
プロテクトモードを搭載し、4階層の特権レベル、メモリ保護機能、仮想記憶、タスクスイッチなどをサポート
80286-6 6MHz
80286-8 8MHz
80286-10 10MHz
80286-12 12.5MHz

最大バス速度 12.5Mbyte/Sec
134,000個のトランジスタ 1.5μmのNMOSプロセス
68ピン PLCC LCC PGA
割込みベクター
番号内容
0除算エラー
1予約済みフォルト
2NMI 割り込み
3ブレークポイント INT 3命令
4オーバーフロー、INTO命令
5BOUNDの範囲外
6無効オペコード(未定義オペコード)
7デバイス使用不可(マス・コプロセッサがない)フォルトなし浮動小数点命令またはWAIT/FWAIT 命令
8ダブルフォルトアボートあり 例外、NMI またはINTR を生成できる任意の命令
9コプロセッサ・セグメント・オーバーラン(予約済み)フォルトなし浮動小数点命令
10無効TSS フォルトありタスクスイッチまたはTSSアクセス
11セグメント不在
12スタック・セグメント・フォルトフォルトありスタック操作およびSS レジスタのロード。
13一般保護フォルトあり任意のメモリ参照およびその他の保護チェック

一般命令

80286
instop 76543210 76543210
enterimm1,imm2 スタックフレームの作成 1 1 0 0 1 0 0 0
level スタックフレームの解放 1 1 0 0 1 0 0 1
pusha AX,CX,DX,BX,SP,BP,SI,DIをプッシュ 0 1 1 0 0 0 0 0
popa DI,SI,BP,SP,BX,DX,CX,AXをポップ 0 1 1 0 0 0 0 1
boundreg,r/m regがr/mで指定される上限及び下限の範囲かチェック 0 1 1 0 0 0 1 0 modregr/m
ins ES:[DI]←IO DX,DI++ or DI-- 0 1 1 0 1 1 0w
outs IO DX←DS[ESI],SI++ or SI-- 0 1 1 0 1 1 1w
imulr/m,imm r/m←r/m / imm 0 1 1 0 1 0S1 modregr/m
pushimm --SP,[SP]←imm 0 1 1 0 1 0 S 0
rclr/m,imm CFを含む左ローテート 1 1 0 0 0 0 0w mod0 1 0r/m
rcrr/m,imm CFを含む右ローテート 1 1 0 0 0 0 0w mod0 1 1r/m
rolr/m,imm 左ローテート 1 1 0 0 0 0 0w mod0 0 0r/m
rorr/m,imm 右ローテート 1 1 0 0 0 0 0w mod0 0 1r/m
salr/m,imm 算術左シフト 1 1 0 0 0 0 0w mod1 0 0r/m
shlr/m,imm 論理左シフト 1 1 0 0 0 0 0w mod1 0 0r/m
sarr/m,imm 算術右シフト 1 1 0 0 0 0 0w mod1 1 1r/m
shrr/m,imm 論理右シフト 1 1 0 0 0 0 0w mod1 0 1r/m

プロテクト命令

80286
instop 76543210 76543210 76543210
instop 76543210 76543210 76543210
LGDTr/m GDTR←r/m 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 mod0 1 0r/m
SGDTr/m r/m←GDTR 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 mod0 0 0r/m
LIDTr/m IDTR←r/m 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 mod0 1 1r/m
SIDTr/m r/m←IDTR 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 mod0 0 1r/m
LLDTr/m LDTR←r/m 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 mod0 1 0r/m
SLDTr/m r/m←LDTR 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 mod0 0 0r/m
LARreg,r/m reg←r/m セグメントディスクリプタのアクセス権をチェック 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 0 modregr/m
LSLreg,r/m reg←r/m セグメントディスクリプタのアクセス権をチェック 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 modregr/m
ARPLr/m,reg,r/m r/m to reg セグメント・セレクタのRPLフィールドを比較 0 1 1 0 0 0 1 1 modregr/m
VERRr/m セグメントが読み取り可能かチェック 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 mod1 0 0r/m
VERWreg,r/m セグメントが書き込み可能かチェック 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 mod1 0 1r/m
LTRr/m タスクレジスタにロード 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 mod0 1 1r/m
STRr/m タスクレジスタからストア 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 mod0 0 1r/m
CLTS CR0のTSフラグをクリア 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 0
LMSWr/m CR0のマシンステータスワード←r/m 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 mod1 1 0r/m
SMSWr/m r/m←CR0のマシンステータスワード 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 mod1 0 0r/m

80386

特徴

1985年にIntelから発表、80286の上位互換で32bitに拡張。
アドレッシングモードも追加されている。
32bitレジスタへ拡張。
レジスタの直行性が増している。例えばEAXをポインターとして使用可能。
32bit命令の追加。(従来の16bit命令が、32bitに切り替わる。)
16MHz
20MHz
25MHz
33MHz
66MByte/Sec
アドレスバスが32bitに拡張。
物理アドレス32bit/論理アドレス32bit
仮想86モードの追加
ページング方式のMMU搭載
プロセスルール 1.5μm から 1μm
トランジスタ 27万5千個
16bitデーターバス、24bit外部アドレスバスの80386SXもある。
パッケージ
132ピンPGA・PQFP
100ピン PQFP
割込みベクター
番号内容
0除算エラー
1予約済みフォルト
2NMI 割り込み
3ブレークポイント INT 3命令
4オーバーフロー、INTO命令
5BOUNDの範囲外
6無効オペコード(未定義オペコード)
7デバイス使用不可(マス・コプロセッサがない)フォルトなし浮動小数点命令またはWAIT/FWAIT 命令
8ダブルフォルトアボートあり 例外、NMI またはINTR を生成できる任意の命令
9コプロセッサ・セグメント・オーバーラン(予約済み)フォルトなし浮動小数点命令
10無効TSS フォルトありタスクスイッチまたはTSSアクセス
11セグメント不在
12スタック・セグメント・フォルトフォルトありスタック操作およびSS レジスタのロード。
13一般保護フォルトあり任意のメモリ参照およびその他の保護チェック
14ページフォルトフォルトあり任意のメモリ参照
15— (インテルがすでに予約済み。使用禁止)なし
16x87 FPU 浮動小数点エラー(マスフォルト)フォルトなしx87 FPU 浮動小数点命令またはWAIT/FWAIT 命令

レジスタ

80386
31 16 158 70
AH AXAL EAX
BH BXBL EBX
CH CXCL ECX
DH DXDL EDX
SIESI
DIEDI
BPEBP
SPESP
SPESP
CS
SS
DS
ES
FS
GS
IPEIP
FLAGSEFLAGS

フラグ

EFLAGS Hi
31302928272625242322212019181716
RESERVED FOR INTELVMRF
FLAGS Low
1514131211109876543210
0NTIOPLOFDFIFTFSFZFxAFxPFxCF
コードセグメントディスクリプタ内のDフラグにより従来の16bitデータを対象とする命令が32bitデーターを扱う命令になります。
また、アドレスも32bitモードになります。
オペランドサイズプリフィクスにより現在のデーターサイズを反転(16bit⇄32bit)されることができます。
アドレスサイズプリフィクスにより現在のアドレスサイズを反転(16bit⇄32bit)されることができます。
32bitアドレッシングモードが選択されているとき、 mod-r/mフィールドが示すアドレッシングモードが変更されています。 また、mod-r/mフィールドの値により更にs-i-bフィルードが追加されスケールドインデックス等が使用できます。

一般命令

80386
instop 76543210 76543210 76543210
instop 76543210 76543210 76543210
movr/m,imm r/m←imm 1 1 0 0 0 1 1w mod0 0 0r/m
movsreg3,r/m sreg3←r/m 1 0 0 0 1 1 1 0 modsreg3r/m
movr/m,serg3 r/m←sreg3 1 0 0 0 1 1 0 0 modsreg3r/m
movsxreg,r/m reg←r/m 上位は符号拡張 0 0 0 0 1 1 1 11 0 1 1 1 1 1w modregr/m
movzxreg,r/m reg←r/m 上位は0拡張 0 0 0 0 1 1 1 11 0 1 1 0 1 1w modregr/m
pushserg3 --SP,[SP]←sreg3 0 0 0 0 1 1 1 1 1 0sreg30 0 0
popserg3 sreg3←[SP],SP++ 0 0 0 0 1 1 1 1 1 0sreg30 0 1
imulreg,r/m reg←reg /  r/m 0 0 0 0 1 1 1 1 1 0 1 0 1 1 1 1 mod0 0 0r/m
imulr/m,imm reg←r/m / imm 0 1 1 0 1 0S 1 modregr/m
shldr/m.reg.imm r/mを上位、regを下位としてimm回左シフトをする。 0 0 0 0 1 1 1 1 1 0 1 0 0 1 0 0 mod0 0 0r/m
shldr/m,reg,CL r/mを上位、regを下位としてCL回左シフトをする。 0 0 0 0 1 1 1 1 1 0 1 0 0 1 0 1 mod0 0 0r/m
shrdr/m,reg,imm regを上位、r/mを下位としてimm回右シフトをする。 0 0 0 0 1 1 1 1 1 0 1 0 1 1 0 0 mod0 0 0r/m
shrdr/m,reg,CL regを上位、r/mを下位としてCL回右シフトをする。 0 0 0 0 1 1 1 1 1 0 1 0 1 1 0 1 mod0 0 0r/m
bsfreg,r/m reg←r/mの最も最下位の1のビットの位置 0 0 0 0 1 1 1 11 0 1 1 1 0 0 wmodregr/m
bsrreg,r/m reg←r/mの最も最上位の1のビットの位置 0 0 0 0 1 1 1 11 0 1 1 1 0 1 wmodregr/m
btr/m,imm CF←r/mのimmビットの値 0 0 0 0 1 1 1 11 0 1 1 1 0 1 0 mod1 0 0r/m
btr/m,reg CF←r/mのregビットの値 0 0 0 0 1 1 1 11 0 1 0 0 0 1 1 modregr/m
btcr/m,imm r/mのimmビット←¬CF←r/mのimmビットの値 0 0 0 0 1 1 1 11 0 1 1 1 0 1 0 mod1 1 1r/m
btcr/m,reg r/mのregビット←¬CF←r/mのregビットの値 0 0 0 0 1 1 1 11 0 1 1 1 0 1 1 modregr/m
btrr/m,imm CF←r/mのimmビットの値,r/mのimmビット←0 0 0 0 0 1 1 1 11 0 1 1 1 0 1 0 mod1 1 0r/m
btrr/m,reg CF←r/mのregビットの値,r/mのregビット←0 0 0 0 0 1 1 1 11 0 1 1 0 0 1 1 modregr/m
btsr/m,imm CF←r/mのimmビットの値,r/mのimmビット←1 0 0 0 0 1 1 1 11 0 1 1 1 0 1 0 mod1 0 1r/m
btsr/m,reg CF←r/mのregビットの値,r/mのregビット←1 0 0 0 0 1 1 1 11 0 1 0 1 0 1 1 modregr/m
set????r/m r/m←CC ? 1 : 0 0 0 0 0 1 1 1 11 0 0 1CC modregr/m
j????rel16/32 0 0 0 0 1 1 1 1 1 0 0 0CC
lfsreg reg←r/m[0],FS←r/m[2] 0 0 0 0 1 1 1 1 1 0 1 1 0 1 0 0 modregr/m
lgsreg reg←r/m[0],GS←r/m[2] 0 0 0 0 1 1 1 1 1 0 1 1 0 1 0 1 modregr/m
lssreg reg←r/m[0],GS←r/m[2] 0 0 0 0 1 1 1 1 1 0 1 1 0 0 1 0 modregr/m
Address Size Prefix アドレスサイズの変更 16bit⇄32bit 0 1 1 0 0 1 1 1
Operand Size Prefix オペランドサイズの変更 16bit⇄32bit 0 1 1 0 0 1 1 0
GS: セグメントオーバーライドプリフィックス 0 1 1 0 0 1 0 1
FS: セグメントオーバーライドプリフィックス 0 0 1 1 0 1 1 0

プロテクト命令

80386
instop 76543210 76543210 76543210
movCRn,reg CRn←reg 0 0 0 0 1 1 1 1 0 0 1 0 0 0 1 0 1 1eeereg
movreg,CRn reg←CRn 0 0 0 0 1 1 1 1 0 0 1 0 0 0 0 0 1 1eeereg
movDRn,reg DRn←reg 0 0 0 0 1 1 1 1 0 0 1 0 0 0 1 1 1 1eeereg
movreg,DRn reg←DRn 0 0 0 0 1 1 1 1 0 0 1 0 0 0 0 1 1 1eeereg
movTRn,reg TRn←reg 0 0 0 0 1 1 1 1 0 0 1 0 0 1 1 0 1 1eeereg
movreg,TRn reg←TRn 0 0 0 0 1 1 1 1 0 0 1 0 0 1 0 0 1 1eeereg

80486

特徴

1989年、Intelが発表
80386の上位互換
CPU周波数
16 MHz から 100 MHz
プロセスルール
1μm から 0.6μm
命令セット x86 (IA-32)
ソケット
Socket 1, Socket 2, Socket 3
パッケージ
196ピン PQFP
486DXはFPUを内蔵しており80387命令をサポート。(80486SXを除く)
内部クロックは外部クロックの2倍の速度で動作する、486DX2、3倍で動作可能な486DX4がある。
ほとんどの命令をワイヤードロジックとし、5段パイプライン等を搭載。
1次キャッシュ(8k/16k(DX4))を内蔵
480DX トランジスタ 120万個 25,33MHzは1μ、50 MHzは0.8μ
480DX2 トランジスタ 120万個 0.8μ 50MHz,66MHz
486DX4 トランジスタ 160万個 0.6μ 75MHz,100MHz(L1 4way 8k line size 16byte)
最高バス速度 50MHz -> 160MByte/Sec
割込みベクター
0除算エラー
1予約済みフォルト
2NMI 割り込み
3ブレークポイント INT 3命令
4オーバーフロー、INTO命令
5BOUNDの範囲外
6無効オペコード(未定義オペコード)
7デバイス使用不可(マス・コプロセッサがない)フォルトなし浮動小数点命令またはWAIT/FWAIT 命令
8ダブルフォルトアボートあり 例外、NMI またはINTR を生成できる任意の命令
9コプロセッサ・セグメント・オーバーラン(予約済み)フォルトなし浮動小数点命令
10無効TSS フォルトありタスクスイッチまたはTSSアクセス
11セグメント不在
12スタック・セグメント・フォルトフォルトありスタック操作およびSS レジスタのロード。
13一般保護フォルトあり任意のメモリ参照およびその他の保護チェック
14ページフォルトフォルトあり任意のメモリ参照
15— (インテルがすでに予約済み。使用禁止)なし
16x87 FPU 浮動小数点エラー(マスフォルト)フォルトなしx87 FPU 浮動小数点命令またはWAIT/FWAIT 命令
17アライメント・チェックフォルトあり メモリ内の任意のデータ参照

追加命令

80486
instop 76543210 76543210 76543210
bswapreg regのバイトの並び順を逆にする 0 0 0 0 1 1 1 1 1 1 0 0 1 reg
xaddr/m,reg r/m⇄reg,r/m←r/m+reg 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0w modregr/m
cmpxchgr/m,reg A==r/m ? ZF=1,r/m←reg:ZF=0,AL←r/m 0 0 0 0 1 1 1 1 1 0 1 1 0 0 0w modregr/m
invd 内部キャッシュをフラッシュ。外部キャッシュを開始させる。 0 0 0 0 1 1 1 1 0 0 0 0 1 0 0 0
wbinvd ライトバックして内部キャッシュをフラッシュ。外部キャッシュのライトバックとフラッシュを開始させる。 0 0 0 0 1 1 1 1 0 0 0 0 1 0 0 1
invlpgm mのTBLページエントリーを無効 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 modregr/m

Pentium

特徴

1993年にIntelから発表。 UとVパイプによる2ウェイのインオーダーのスーパースケーラ構造の最短5ステージパイプライン
浮動小数点パイプラインは8段
64bitデーターバス
Socket 4
Socket 5
Socket 7
60 MHz から 300 MHz
FSB周波数
50 MHz から 66 MHz
トランジスタ 310万個
L1キャッシュ 命令8k,データー8k プロセスルール
0.8 μm から 0.25 μm
割込みベクター
0除算エラー
1予約済みフォルト
2NMI 割り込み
3ブレークポイント INT 3命令
4オーバーフロー、INTO命令
5BOUNDの範囲外
6無効オペコード(未定義オペコード)
7デバイス使用不可(マス・コプロセッサがない)フォルトなし浮動小数点命令またはWAIT/FWAIT 命令
8ダブルフォルトアボートあり 例外、NMI またはINTR を生成できる任意の命令
9コプロセッサ・セグメント・オーバーラン(予約済み)フォルトなし浮動小数点命令
10無効TSS フォルトありタスクスイッチまたはTSSアクセス
11セグメント不在
12スタック・セグメント・フォルトフォルトありスタック操作およびSS レジスタのロード。
13一般保護フォルトあり任意のメモリ参照およびその他の保護チェック
14ページフォルトフォルトあり任意のメモリ参照
15— (インテルがすでに予約済み。使用禁止)なし
16x87 FPU 浮動小数点エラー(マスフォルト)フォルトなしx87 FPU 浮動小数点命令またはWAIT/FWAIT 命令
17アライメント・チェックフォルトあり メモリ内の任意のデータ参照
18マシンチェックアボートなしエラーコード(存在する場合)とソースはモデルに依存

追加命令

Pentium
instop 76543210 7654321076543210
cmpxchg8br/m,reg EDX:EAX==r/m ? ZF=1,r/m←ECX:EBX:ZF=0,EDX:EAX←r/m 0 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 mod0 0 1r/m
cpuid EAXの値に応じてプロセッサの識別情報と機能情報を返す。 0 0 0 0 1 1 1 1 1 0 1 0 0 0 1 0
rdtsc EDX:EAX←タイムスタンプカウンタ 0 0 0 0 1 1 1 1 0 0 1 1 0 0 0 1
rdmsr EDX:EAX←ECXで示すMSR 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 0
wrmsr ECXで示すMSR←EDX:EAX 0 0 0 0 1 1 1 1 0 0 1 1 0 0 0 0

Pentium MMX

特徴

1997年IntelよりMMX対応プロセッサとして発表。
FPUのレジスタをMMXに転用している。
スタック形式ではなくレジスタ番号で指定可能。
L1キャッシュが倍増
L1 inst 4way 16k line size 32byte
L1 data 4way 16k line size 32byte

命令一覧

MMX
instop 76543210 7654321076543210
EMMSEmpty MMX state.MMX ステートをクリア0 0 0 0 1 1 1 10 1 1 1 0 1 1 1
MOVDmmxreg,regダブルワードを転送0 0 0 0 1 1 1 10 1 1 0 1 1 1 01 1mmxregreg
MOVDmmxreg,regダブルワードを転送0 0 0 0 1 1 1 10 1 1 1 1 1 1 01 1mmxregreg
MOVDmmxreg,r/mダブルワードを転送0 0 0 0 1 1 1 10 1 1 0 1 1 1 0modmmxregr/m
MOVDmmxreg,r/mダブルワードを転送0 0 0 0 1 1 1 10 1 1 1 1 1 1 0modmmxregr/m
MOVQmmxreg1,mmxreg2クワッドワードを転送0 0 0 0 1 1 1 10 1 1 0 1 1 1 11 1mmxreg1mmxreg2
MOVQmmxreg1,mmxreg2クワッドワードを転送0 0 0 0 1 1 1 10 1 1 1 1 1 1 11 1mmxreg1mmxreg2
MOVQmmxreg,r/mクワッドワードを転送0 0 0 0 1 1 1 10 1 1 0 1 1 1 1modmmxregr/m
MOVQmmxreg,r/mクワッドワードを転送0 0 0 0 1 1 1 10 1 1 1 1 1 1 1modmmxregr/m
PACKSSDW1mmxreg1,mmxreg2符号付き飽和演算によりダブルワードをワードにパック0 0 0 0 1 1 1 10 1 1 0 1 0 1 11 1mmxreg1mmxreg2
PACKSSDW1mmxreg,r/m符号付き飽和演算によりダブルワードをワードにパック0 0 0 0 1 1 1 10 1 1 0 1 0 1 1modmmxregr/m
PACKSSWB1mmxreg1,mmxreg2符号付き飽和演算によりワードをバイトにパック0 0 0 0 1 1 1 10 1 1 0 0 0 1 11 1mmxreg1mmxreg2
PACKSSWB1mmxreg,r/m符号付き飽和演算によりワードをバイトにパック0 0 0 0 1 1 1 10 1 1 0 0 0 1 1modmmxregr/m
PACKUSWB1mmxreg1,mmxreg2符号なし飽和演算によりワードをバイトにパック0 0 0 0 1 1 1 10 1 1 0 0 1 1 11 1mmxreg1mmxreg2
PACKUSWB1mmxreg,r/m符号なし飽和演算によりワードをバイトにパック0 0 0 0 1 1 1 10 1 1 0 0 1 1 1modmmxregr/m
PADDmmxreg1,mmxreg2整数を加算0 0 0 0 1 1 1 11 1 1 1 1 1gg1 1mmxreg1mmxreg2
PADDmmxreg,r/m整数を加算0 0 0 0 1 1 1 11 1 1 1 1 1ggmodmmxregr/m
PADDSmmxreg1,mmxreg2符号付き飽和演算によりパックド符号付き整数を加算0 0 0 0 1 1 1 11 1 1 0 1 1gg1 1mmxreg1mmxreg2
PADDSmmxreg,r/m符号付き飽和演算によりパックド符号付き整数を加算0 0 0 0 1 1 1 11 1 1 0 1 1ggmodmmxregr/m
PADDUSmmxreg1,mmxreg2符号なし飽和演算によりパックド符号なし整数を加算0 0 0 0 1 1 1 11 1 0 1 1 1gg1 1mmxreg1mmxreg2
PADDUSmmxreg,r/m符号なし飽和演算によりパックド符号なし整数を加算0 0 0 0 1 1 1 11 1 0 1 1 1ggmodmmxregr/m
PANDmmxreg1,mmxreg2ビットごとの AND(論理積)演算0 0 0 0 1 1 1 11 1 0 1 1 0 1 11 1mmxreg1mmxreg2
PANDmmxreg,r/mビットごとの AND(論理積)演算0 0 0 0 1 1 1 11 1 0 1 1 0 1 1modmmxregr/m
PANDNmmxreg1,mmxreg2ビットごとの AND NOT(否定論理積)演算0 0 0 0 1 1 1 11 1 0 1 1 1 1 11 1mmxreg1mmxreg2
PANDNmmxreg,r/mビットごとの AND NOT(否定論理積)演算0 0 0 0 1 1 1 11 1 0 1 1 1 1 1modmmxregr/m
PCMPEQmmxreg1,mmxreg2パックを比較し、一致しているか判定0 0 0 0 1 1 1 10 1 1 1 0 1gg1 1mmxreg1mmxreg2
PCMPEQmmxreg,r/mパックを比較し、一致しているか判定0 0 0 0 1 1 1 10 1 1 1 0 1ggmodmmxregr/m
PCMPGTmmxreg1,mmxreg2パックド符号付き整数を比較し、大小関係を判定0 0 0 0 1 1 1 10 1 1 0 0 1gg1 1mmxreg1mmxreg2
PCMPGTmmxreg,r/mパックド符号付き整数を比較し、大小関係を判定0 0 0 0 1 1 1 10 1 1 0 0 1ggmodmmxregr/m
PMADDWDmmxreg1,mmxreg2パックド整数を乗算および加算0 0 0 0 1 1 1 11 1 1 1 0 1 0 11 1mmxregmmxreg
PMADDWDmmxreg,r/mパックド整数を乗算および加算0 0 0 0 1 1 1 11 1 1 1 0 1 0 1modmmxreg1r/m
PMUL/HUWmmxreg1,mmxreg2パックド符号付きワード整数を乗算してストア0 0 0 0 1 1 1 11 1 1 0 0 1 0 01 1mmxreg1mmxreg2
PMUL/HUWmmxreg,r/mパックド符号付きワード整数を乗算してストア0 0 0 0 1 1 1 11 1 1 0 0 1 0 0modmmxregr/m
PMULHWmmxreg1,mmxreg2パックド符号付き整数を乗算して上位結果をストア0 0 0 0 1 1 1 11 1 1 0 0 1 0 11 1mmxreg1mmxreg2
PMULHWmmxreg,r/mパックド符号付き整数を乗算して上位結果をストア0 0 0 0 1 1 1 11 1 1 0 0 1 0 1modmmxregr/m
PMULLWmmxreg1,mmxreg2パックド符号付き整数を乗算して下位結果をストア0 0 0 0 1 1 1 11 1 0 1 0 1 0 11 1mmxreg1mmxreg2
PMULLWmmxreg,r/mパックド符号付き整数を乗算して下位結果をストア0 0 0 0 1 1 1 11 1 0 1 0 1 0 1modmmxregr/m
PORmmxreg1,mmxreg2ビットごとの OR(論理和)演算0 0 0 0 1 1 1 11 1 1 0 1 0 1 11 1mmxreg1mmxreg2
PORmmxreg,r/mビットごとの OR(論理和)演算0 0 0 0 1 1 1 11 1 1 0 1 0 1 1modmmxregr/m
PSLLmmxreg1,mmxreg2パックドを論理左シフト0 0 0 0 1 1 1 11 1 1 1 0 0gg1 1mmxreg1mmxreg2
PSLLmmxreg,r/mパックドを論理左シフト0 0 0 0 1 1 1 11 1 1 1 0 0ggmodmmxregr/m
PSLLmmxreg,imm8パックドを論理左シフト0 0 0 0 1 1 1 10 1 1 1 0 0gg1 11 1 0mmxreg
PSRAmmxreg1,mmxreg2パックドを算術右シフト0 0 0 0 1 1 1 11 1 1 0 0 0gg1 1mmxreg1mmxreg2
PSRAmmxreg,r/mパックドを算術右シフト0 0 0 0 1 1 1 11 1 1 0 0 0ggmodmmxregr/m
PSRAmmxreg,imm8パックドを算術右シフト0 0 0 0 1 1 1 10 1 1 1 0 0gg1 10 1 0mmxreg
PSRLmmxreg1,mmxreg2パックドを算術右シフト0 0 0 0 1 1 1 11 1 0 1 0 0gg1 1mmxreg1mmxreg2
PSRLmmxreg,r/mパックドを算術右シフト0 0 0 0 1 1 1 11 1 0 1 0 0ggmodmmxregr/m
PSRLmmxreg,imm8,dataパックドを論理右シフト0 0 0 0 1 1 1 10 1 1 1 0 0gg1 11 0 0mmxreg
PSUBmmxreg1,mmxreg2パックドを論理右シフト0 0 0 0 1 1 1 11 1 1 1 1 0gg1 1mmxreg1mmxreg2
PSUBmmxreg,r/mパックドを論理右シフト0 0 0 0 1 1 1 11 1 1 1 1 0ggmodmmxregr/m
PSUBSmmxreg1,mmxreg2符号付き飽和演算によりパックド符号付き整数を減算0 0 0 0 1 1 1 11 1 1 0 1 0gg1 1mmxreg1mmxreg2
PSUBSmmxreg,r/m>符号付き飽和演算によりパックド符号付き整数を減算0 0 0 0 1 1 1 11 1 1 0 1 0ggmodmmxregr/m
PSUBUSmmxreg1,mmxreg2符号なし飽和演算によりパックド符号なし整数を減算0 0 0 0 1 1 1 11 1 0 1 1 0gg1 1mmxreg1mmxreg2
PSUBUSmmxreg,r/m符号なし飽和演算によりパックド符号なし整数を減算0 0 0 0 1 1 1 11 1 0 1 1 0ggmodmmxregr/m
PUNPCKHmmxreg1,mmxreg2上位をアンパック0 0 0 0 1 1 1 10 1 1 0 1 0gg1 1mmxreg1mmxreg2
PUNPCKHmmxreg,r/m上位をアンパック0 0 0 0 1 1 1 10 1 1 0 1 0ggmodmmxregr/m
PUNPCKLmmxreg1,mmxreg2下位をアンパック0 0 0 0 1 1 1 10 1 1 0 0 0gg1 1mmxreg1mmxreg2
PUNPCKLmmxreg,r/m下位をアンパック0 0 0 0 1 1 1 10 1 1 0 0 0ggmodmmxregr/m
PXORmmxreg1,mmxreg2ビットごとの XOR(排他的論理和)演算0 0 0 0 1 1 1 11 1 1 0 1 1 1 11 1mmxreg1mmxreg2
PXORmmxreg,r/mビットごとの XOR(排他的論理和)演算0 0 0 0 1 1 1 11 1 1 0 1 1 1 1modmmxregr/m

Pentium PRO

特徴

1995年、Intelから発表
CPU周波数150 MHz から 200 MHz
FSB周波数
60 MHz から 66 MHz
L1 命令8k,データ8k
L2 256k
プロセスルール
0.50μm から 0.35μm
5.5Mトランジスタ
x86命令を複数の単純化した命令に分割して実行
デコーダは2個のシンプルデコーダと、1個のコンプレックスデコーダを備え命令発行ポートを5つ持ち、6つの実行ユニットを備える。
騰貴実行とアウトオブオーダーとレジスタリネーミングを備える。 分岐予測をサポート
2次キャッシュメモリにアクセスするための内部バスを、メインメモリにアクセスするための外部バスから分離
12ステージパイプライン
L1 命令8,データ8k L2 256k/512k
トランジスタ 550万個 (150MHzは 0.6μ,166MHz以降 0.35μ)

追加命令

Pentium PRO
instop 76543210 7654321076543210
cmovccreg,r/m cc ? reg←r/m : nop 0 0 0 0 1 1 1 1 0 1 0 0CC modregr/m
fcomiST(i) EFLAGS(ZF,PF,CF)←ST(0)とST(i)を比較 1 1 0 1 10 1 1 1 1 1 1 0i
fcomipST(i) EFLAGS(ZF,PF,CF)←ST(0)とST(i)を比較,++TOP 1 1 0 1 11 1 1 1 1 1 1 0i
fucomiST(i) EFLAGS(ZF,PF,CF)←ST(0)とST(i)を比較 1 1 0 1 10 1 1 1 1 1 0 0i
fucomipST(i) EFLAGS(ZF,PF,CF)←ST(0)とST(i)を比較,++TOP 1 1 0 1 11 1 1 1 1 1 0 0i
fcmovccST(i) cc ? ST(0)←ST(1) : fnop 1 1 0 1 10 1C 1 1 0Ci
rdpmc EDX:EAX←ECXで示される性能モニタリングカウンタ 0 0 0 0 1 1 1 1 1 0 1 0 0 0 1 1
ud2 無効命令例外を発生させる 0 0 0 0 1 1 1 1 0 0 0 0 1 0 1 1

Pentium II

特徴

1997年、Intelから発表。Pentium Proの改良版。
MMXを搭載。
233MHz~450MHz
L1 命令16k,データ16k L2 512
7Mトランジスタ

追加命令

Pentium PRO
instop 76543210 7654321076543210
FXSAVEr/m x87 FPU,XMM,MXCSRをセーブ 0 0 0 0 1 1 1 1 1 0 1 0 1 1 1 0 mod0 0 1r/m
FXRSTORr/m x87 FPU,XMM,MXCSRをリストア 0 0 0 0 1 1 1 1 1 0 1 0 1 1 1 0 mod0 0 0r/m
SYSENTER 特権レベル0 のシステム・プロシージャまたはルーチンへの高速コール 0 0 0 0 1 1 1 1 0 0 1 1 0 1 0 0
SYSEXIT <特権レベル3 のユーザコードへの高速リターン/td> 0 0 0 0 1 1 1 1 0 0 1 1 0 1 0 1

Pentium 3

特徴

1999年、Intelから発表。Pentium IIの改良版。
SSEを追加。(128bit*8本のXMMレジスタ)
パックド単精度浮動小数点・MMXレジスタ内のパックド整数 450MHz~1.4GHz
L1 命令16k,データ16k
L2 256k
8.2Mトランジスタ

追加命令

SSE
instop 76543210 7654321076543210
ADDPSxmmreg2,xmmreg1単精度浮動小数点のSIMD加算0 0 0 0 1 1 1 10 1 0 1 1 0 0 01 1xmmreg1xmmreg2
ADDPSxmmreg,mem単精度浮動小数点のSIMD加算0 0 0 0 1 1 1 10 1 0 1 1 0 0 0modxmmregr/m
ADDSSxmmreg2,xmmreg1単精度浮動小数点の加算1 1 1 1 0 0 1 10 0 0 0 1 1 1 11 1xmmreg1xmmreg2
ADDSSxmmreg,mem単精度浮動小数点の加算1 1 1 1 0 0 1 10 0 0 0 1 1 1 1modxmmregr/m
ANDNPSxmmreg2,xmmreg10 0 0 0 1 1 1 10 1 0 1 0 1 0 11 1xmmreg1xmmreg2
ANDNPSxmmreg,mem0 0 0 0 1 1 1 10 1 0 1 0 1 0 1modxmmregr/m
ANDPSxmmreg2,xmmreg1単精度のAND0 0 0 0 1 1 1 10 1 0 1 0 1 0 01 1xmmreg1xmmreg2
ANDPSxmmreg,mem単精度のAND0 0 0 0 1 1 1 10 1 0 1 0 1 0 0modxmmregr/m
CMPPSxmmreg,xmmreg,imm8単精度浮動小数点のSIMD比較0 0 0 0 1 1 1 11 1 0 0 0 0 1 01 1xmmreg1xmmreg2
CMPPSxmmreg,mem,imm8単精度浮動小数点のSIMD比較0 0 0 0 1 1 1 11 1 0 0 0 0 1 0modxmmregr/m
CMPSSxmmreg,xmmreg,imm8単精度浮動小数点のSIMD比較1 1 1 1 0 0 1 10 0 0 0 1 1 1 11 1xmmreg1xmmreg2
CMPSSxmmreg,mem,imm8単精度浮動小数点のSIMD比較1 1 1 1 0 0 1 10 0 0 0 1 1 1 1modxmmregr/m
COMISSxmmreg,xmmreg単精度浮動小数点の比較0 0 0 0 1 1 1 10 0 1 0 1 1 1 11 1xmmreg1xmmreg2
COMISSxmmreg,mem単精度浮動小数点の比較0 0 0 0 1 1 1 10 0 1 0 1 1 1 1modxmmregr/m
CVTPI2PSxmmreg2,xmmreg12つの符号付32bitを2つの単精度に変換0 0 0 0 1 1 1 10 0 1 0 1 0 1 01 1xmmreg1xmmreg2
CVTPI2PSxmmreg,mem2つの符号付32bitを2つの単精度に変換0 0 0 0 1 1 1 10 0 1 0 1 0 1 0modxmmregr/m
CVTPS2PImmreg,xmmreg2つの単精度を2つの符号付32bitに変換0 0 0 0 1 1 1 10 0 1 0 1 1 0 11 1xmmreg1xmmreg2
CVTPS2PImmreg,mem2つの単精度を2つの符号付32bitに変換0 0 0 0 1 1 1 10 0 1 0 1 1 0 1modxmmregr/m
CVTSI2SSxmmreg1,r321つの符号付32bitを1つの単精度に変換1 1 1 1 0 0 1 10 0 0 0 1 1 1 11 1xmmregr/m
CVTSI2SSxmmreg,mem1つの符号付32bitを1つの単精度に変換1 1 1 1 0 0 1 10 0 0 0 1 1 1 1modxmmregr/m
CVTSS2SIr32,xmmreg1つの単精度を1つの符号付32bitに変換1 1 1 1 0 0 1 10 0 0 0 1 1 1 11 1r/mxmmreg
CVTSS2SIr32,mem1つの単精度を1つの符号付32bitに変換1 1 1 1 0 0 1 10 0 0 0 1 1 1 1modr/mr/m
CVTTPS2PImmreg,xmmreg2つの単精度を切り捨てて2つの符号付32bitに変換0 0 0 0 1 1 1 10 0 1 0 1 1 0 01 1xmmreg1xmmreg2
CVTTPS2PImmreg,mem2つの単精度を切り捨てて2つの符号付32bitに変換0 0 0 0 1 1 1 10 0 1 0 1 1 0 0modxmmregr/m
CVTTSS2SIr32,xmmreg1つの浮動小数点を1つの符号付32bitに変換1 1 1 1 0 0 1 10 0 0 0 1 1 1 11 1r/mxmmreg1
CVTTSS2SIr32,mem1つの浮動小数点を1つの符号付32bitに変換1 1 1 1 0 0 1 10 0 0 0 1 1 1 1modr/mr/m
DIVPSxmmreg,xmmreg単精度浮動小数点のSIMID除算0 0 0 0 1 1 1 10 1 0 1 1 1 1 01 1xmmreg1xmmreg2
DIVPSxmmreg,mem単精度浮動小数点のSIMID除算0 0 0 0 1 1 1 10 1 0 1 1 1 1 0modxmmregr/m
DIVSSxmmreg,xmmreg単精度浮動小数点のSIMID除算1 1 1 1 0 0 1 10 0 0 0 1 1 1 11 1xmmreg1xmmreg2
DIVSSxmmreg,mem単精度浮動小数点のSIMID除算1 1 1 1 0 0 1 10 0 0 0 1 1 1 1modxmmregr/m
LDMXCSRMXCSR,m32MXCSRへロード0 0 0 0 1 1 1 11 0 1 0 1 1 1 0modA0 1 0mem
MAXPSxmmreg,xmmreg単精度の最大値を求める0 0 0 0 1 1 1 10 1 0 1 1 1 1 11 1xmmreg1xmmreg2
MAXPSxmmreg,mem単精度の最大値を求める0 0 0 0 1 1 1 10 1 0 1 1 1 1 1modxmmregr/m
MAXSSxmmreg,xmmreg単精度の最大値を求める1 1 1 1 0 0 1 10 0 0 0 1 1 1 11 1xmmreg1xmmreg2
MAXSSxmmreg,mem単精度の最大値を求める1 1 1 1 0 0 1 10 0 0 0 1 1 1 1modxmmregr/m
MINPSxmmreg,xmmreg単精度の最小値を求める0 0 0 0 1 1 1 10 1 0 1 1 1 0 11 1xmmreg1xmmreg2
MINPSxmmreg,mem単精度の最小値を求める0 0 0 0 1 1 1 10 1 0 1 1 1 0 1modxmmregr/m
MINSSxmmreg,xmmreg単精度の最小値を求める1 1 1 1 0 0 1 10 0 0 0 1 1 1 11 1xmmreg1xmmreg2
MINSSxmmreg,mem単精度の最小値を求める1 1 1 1 0 0 1 10 0 0 0 1 1 1 1modxmmregr/m
MOVAPSxmmreg1,xmmreg2単精度のSIMD移動0 0 0 0 1 1 1 10 0 1 0 1 0 0 01 1xmmreg2xmmreg1
MOVAPSxmmreg1,mem単精度のSIMD移動0 0 0 0 1 1 1 10 0 1 0 1 0 0 0modxmmregr/m
MOVAPSxmmreg2,xmmreg1単精度のSIMD移動0 0 0 0 1 1 1 10 0 1 0 1 0 0 11 1xmmreg1xmmreg2
MOVAPSmem,xmmreg1単精度のSIMD移動0 0 0 0 1 1 1 10 0 1 0 1 0 0 1modxmmregr/m
MOVHLPSxmmreg2,xmmreg12つの上位の単精度を2つの下位に移動0 0 0 0 1 1 1 10 0 0 1 0 0 1 01 1xmmreg1xmmreg2
MOVHPSxmmreg,mem2つの単精度を移動0 0 0 0 1 1 1 10 0 0 1 0 1 1 0modxmmregr/m
MOVHPSmem,xmmreg2つの単精度を移動0 0 0 0 1 1 1 10 0 0 1 0 1 1 1modxmmregr/m
MOVLHPSxmmreg2,xmmreg12つの下位単精度を2つの上位単精度へ移動0 0 0 0 1 1 1 10 0 0 1 0 1 1 01 1xmmreg1xmmreg2
MOVLPSxmmreg,mem2つの単精度を移動0 0 0 0 1 1 1 10 0 0 1 0 0 1 0modxmmregr/m
MOVLPSmem,xmmreg2つの単精度を移動0 0 0 0 1 1 1 10 0 0 1 0 0 1 1modxmmregr/m
MOVMSKPSr32,xmmreg4ビットの符号マスクを抽出しregに格納0 0 0 0 1 1 1 10 1 0 1 0 0 0 01 1r/mxmmreg
MOVSSxmmreg1,xmmreg2単精度を移動1 1 1 1 0 0 1 10 0 0 0 1 1 1 11 1xmmreg2xmmreg1
MOVSSxmmreg1,mem単精度を移動1 1 1 1 0 0 1 10 0 0 0 1 1 1 1modxmmregr/m
MOVSSxmmreg2,xmmreg1単精度を移動1 1 1 1 0 0 1 10 0 0 0 1 1 1 11 1xmmreg1xmmreg2
MOVSSmem,xmmreg1単精度を移動1 1 1 1 0 0 1 10 0 0 0 1 1 1 1modxmmregr/m
MOVUPSxmmreg1,xmmreg24つの単精度を移動0 0 0 0 1 1 1 10 0 0 1 0 0 0 01 1xmmreg2xmmreg1
MOVUPSxmmreg1,mem4つの単精度を移動0 0 0 0 1 1 1 10 0 0 1 0 0 0 0modxmmregr/m
MOVUPSxmmreg2,xmmreg14つの単精度を移動0 0 0 0 1 1 1 10 0 0 1 0 0 0 11 1xmmreg1xmmreg2
MOVUPSmem,xmmreg14つの単精度を移動0 0 0 0 1 1 1 10 0 0 1 0 0 0 1modxmmregr/m
MULPSxmmreg2,xmmreg14つの単精度の乗算0 0 0 0 1 1 1 10 1 0 1 1 0 0 11 1xmmreg1xmmreg2
MULPSmem to xmmreg4つの単精度の乗算0 0 0 0 1 1 1 10 1 0 1 1 0 0 1modxmmregr/m
MULSSxmmreg2,xmmreg11つの単精度の乗算1 1 1 1 0 0 1 10 0 0 0 1 1 1 11 1xmmreg1xmmreg2
MULSSxmmreg,mem1つの単精度の乗算1 1 1 1 0 0 1 10 0 0 0 1 1 1 1modxmmregr/m
ORPSxmmreg2,xmmreg14つの単精度のOR0 0 0 0 1 1 1 10 1 0 1 0 1 1 01 1xmmreg1xmmreg2
ORPSxmmreg,mem4つの単精度のOR0 0 0 0 1 1 1 10 1 0 1 0 1 1 0modxmmregr/m
RCPPSxmmreg2,xmmreg14つの単精度の逆数0 0 0 0 1 1 1 10 1 0 1 0 0 1 11 1xmmreg1xmmreg2
RCPPSxmmreg,mem4つの単精度の逆数0 0 0 0 1 1 1 10 1 0 1 0 0 1 1modxmmregr/m
RCPSSxmmreg,xmmreg単精度の逆数1 1 1 1 0 0 1 10 0 0 0 1 1 1 11 1xmmreg1xmmreg2
RCPSSxmmreg,mem単精度の逆数1 1 1 1 0 0 1 10 0 0 0 1 1 1 1modxmmregr/m
RSQRTPSxmmreg2,xmmreg14つの単精度の平方根0 0 0 0 1 1 1 10 1 0 1 0 0 1 01 1xmmreg1xmmreg2
RSQRTPSxmmreg,mem4つの単精度の平方根0 0 0 0 1 1 1 10 1 0 1 0 0 1 0modxmmregr/m
RSQRTSSxmmreg2,xmmreg14つの単精度の平方根1 1 1 1 0 0 1 10 0 0 0 1 1 1 11 1xmmreg1xmmreg2
RSQRTSSxmmreg,mem4つの単精度の平方根1 1 1 1 0 0 1 10 0 0 0 1 1 1 1modxmmregr/m
SHUFPSxmmreg2,xmmreg1,imm4つの単精度をシャッフル0 0 0 0 1 1 1 11 1 0 0 0 1 1 01 1xmmreg1xmmreg2
SHUFPSxmmreg,mem,imm4つの単精度をシャッフル0 0 0 0 1 1 1 11 1 0 0 0 1 1 0modxmmregr/m
SQRTPSxmmreg2,xmmreg14つの単精度の平方根0 0 0 0 1 1 1 10 1 0 1 0 0 0 11 1xmmreg1xmmreg
SQRTPSxmmreg,mem4つの単精度の平方根0 0 0 0 1 1 1 10 1 0 1 0 0 0 1modxmmregr/m
SQRTSSxmmreg2,xmmreg1単精度の平方根0 1 0 1 0 0 1 10 0 0 0 1 1 1 11 1xmmreg1xmmreg
SQRTSSxmmreg,mem単精度の平方根0 1 0 1 0 0 1 10 0 0 0 1 1 1 1modxmmregr/m
STMXCSRmem,MXCSRreg←MXCSR0 0 0 0 1 1 1 11 0 1 0 1 1 1 0modA0 1 1mem
SUBPSxmmreg2,xmmreg14つの単精度の減算0 0 0 0 1 1 1 10 1 0 1 1 1 0 01 1xmmreg1xmmreg2
SUBPSxmmreg,mem4つの単精度の減算0 0 0 0 1 1 1 10 1 0 1 1 1 0 0modxmmregr/m
SUBSSxmmreg2,xmmreg14つの単精度の減算1 1 1 1 0 0 1 10 0 0 0 1 1 1 11 1xmmreg1xmmreg2
SUBSSxmmreg,mem4つの単精度の減算1 1 1 1 0 0 1 10 0 0 0 1 1 1 1modxmmregr/m
UCOMISSxmmreg2,xmmreg10 0 0 0 1 1 1 10 0 1 0 1 1 1 01 1xmmreg1xmmreg2
UCOMISSxmmreg,mem0 0 0 0 1 1 1 10 0 1 0 1 1 1 0modxmmregr/m
UNPCKHPSxmmreg2,xmmreg1単精度のインターリーブ0 0 0 0 1 1 1 10 0 0 1 0 1 0 11 1xmmreg1xmmreg2
UNPCKHPSxmmreg,mem単精度のインターリーブ0 0 0 0 1 1 1 10 0 0 1 0 1 0 1modxmmregr/m
UNPCKLPSxmmreg2,xmmreg1単精度のインターリーブ0 0 0 0 1 1 1 10 0 0 1 0 1 0 01 1xmmreg1xmmreg2
UNPCKLPSxmmreg,mem単精度のインターリーブ0 0 0 0 1 1 1 10 0 0 1 0 1 0 0modxmmregr/m
XORPSxmmreg2,xmmreg14つの単精度のXOR0 0 0 0 1 1 1 10 1 0 1 0 1 1 11 1xmmreg1xmmreg2
XORPSxmmreg,mem4つの単精度のXOR0 0 0 0 1 1 1 10 1 0 1 0 1 1 1modxmmregr/m
PAVGB/PAVGWmmreg,xmmreg平均0 0 0 0 1 1 1 11 1 1 0 0 0 0 01 1xmmreg1xmmreg2
PAVGB/PAVGWmm1 to mem平均0 0 0 0 1 1 1 11 1 1 0 0 0 1 11 1xmmreg1xmmreg2
PAVGB/PAVGWmmreg,mem平均0 0 0 0 1 1 1 11 1 1 0 0 0 0 0modxmmregr/m
PAVGB/PAVGWmem,mm1平均0 0 0 0 1 1 1 11 1 1 0 0 0 1 1modxmmregr/m
PEXTRWreg32,xmmreg,imm8immによって指定されたワードを移動0 0 0 0 1 1 1 11 1 0 0 0 1 0 11 1r/mxmmreg
PINSRWmmreg,reg32,imm8下位ワードをimmで指定されたワード位置に挿入0 0 0 0 1 1 1 11 1 0 0 0 1 0 01 1xmmregreg
PINSRWmmreg,m16,imm8下位ワードをimmで指定されたワード位置に挿入0 0 0 0 1 1 1 11 1 0 0 0 1 0 0modxmmregr/m
PMAXSWmmreg,xmmreg符号ワードの最大値0 0 0 0 1 1 1 11 1 1 0 1 1 1 01 1xmmreg1xmmreg2
PMAXSWmmreg,mem符号ワードの最大値0 0 0 0 1 1 1 11 1 1 0 1 1 1 0modxmmregr/m
PMAXUBmmreg,xmmreg符号無しバイトの最大値0 0 0 0 1 1 1 11 1 0 1 1 1 1 01 1xmmreg1xmmreg2
PMAXUBmmreg,Mmem符号無しバイトの最大値0 0 0 0 1 1 1 11 1 0 1 1 1 1 0modxmmregr/m
PMINSWmmreg,xmmreg符号ワードの最小値0 0 0 0 1 1 1 11 1 1 0 1 0 1 01 1xmmreg1xmmreg2
PMINSWmmreg,mem符号ワードの最小値0 0 0 0 1 1 1 11 1 1 0 1 0 1 0modxmmregr/m
PMINUBmmreg,xmmreg符号無しバイトの最小値0 0 0 0 1 1 1 11 1 0 1 1 0 1 01 1xmmreg1xmmreg2
PMINUBmmreg,mem符号無しバイトの最小値0 0 0 0 1 1 1 11 1 0 1 1 0 1 0modxmmregr/m
PMOVMSKBreg32,xmmregビットマスクを作成0 0 0 0 1 1 1 11 1 0 1 0 1 1 11 1r/mxmmreg
PMULHUWmmreg,xmmregパックド符号無しワードの乗算0 0 0 0 1 1 1 11 1 1 0 0 1 0 01 1xmmreg1xmmreg2
PMULHUWmmreg,memパックド符号無しワードの乗算0 0 0 0 1 1 1 11 1 1 0 0 1 0 0modxmmregr/m
PSADBWmmreg,xmmregパックド符号無しバイトの差の絶対値を合計0 0 0 0 1 1 1 11 1 1 1 0 1 1 01 1xmmreg1xmmreg2
PSADBWmmreg,memパックド符号無しバイトの差の絶対値を合計0 0 0 0 1 1 1 11 1 1 1 0 1 1 0modxmmregr/m
PSHUFWmmreg,xmmreg,imm8ワードのシャッフル0 0 0 0 1 1 1 10 1 1 1 0 0 0 01 1xmmreg1xmmreg2
PSHUFWmmreg,mem,imm8ワードのシャッフル0 0 0 0 1 1 1 10 1 1 1 0 0 0 0modxmmregr/m
MASKMOVQmmreg,xmmregバイトのマスクによりメモリに書き込む0 0 0 0 1 1 1 11 1 1 1 0 1 1 11 1xmmreg1xmmreg2
MOVNTPSmem,xmmreg4つの単精度をキャッシュを使用せずに移動0 0 0 0 1 1 1 10 0 1 0 1 0 1 1modxmmregr/m
MOVNTQmem,xmmreg4つの単精度をキャッシュを使用せずに移動0 0 0 0 1 1 1 11 1 1 0 0 1 1 1modxmmregr/m
PREFETCHT0m8キャッシュ全階層に移動0 0 0 0 1 1 1 10 0 0 1 1 0 0 0modA0 0 1mem
PREFETCHT1m8L1キャッシュに移動0 0 0 0 1 1 1 10 0 0 1 1 0 0 0modA0 1 0mem
PREFETCHT2m8L2キャッシュに移動0 0 0 0 1 1 1 10 0 0 1 1 0 0 0modA0 1 1mem
PREFETCHNTAm8キャッシュに移動0 0 0 0 1 1 1 10 0 0 1 1 0 0 0modA0 0 0mem
SFENCEストア操作をシリアル化する0 0 0 0 1 1 1 11 0 1 0 1 1 1 01 11 1 10 0 0

Pentium 4

Willamette

2000年にIntel発表。
NetBurstマイクロアーキテクチャ
デコーダを1個備え、デコード済みのμopsを格納するトレースキャッシュを搭載
トレースキャッシュ12kμop
L1データ8kB
L2 256kB
4kエントリの分岐ターゲット配列
20段パイプライン
180nmプロセスルール
1.3GHz~2.0GHz
42Mトランジスタ
Socket 423
NetBurstでは、3 uOPs/サイクル
ALUは2個(倍速)
SSE2
パックド倍精度浮動小数点、パックド整数
SSE2
instop 76543210 765432107654321076543210
ANDPDxmmreg2,xmmreg1浮動小数点間でのAND0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 0 1 0 01 1xmmreg1xmmreg2
ANDPDxmmreg,r/m浮動小数点間でのAND0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 0 1 0 0modxmmregr/m
CMPPDxmmreg2,xmmreg1パックド倍精度浮動小数点の比較0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 0 0 0 1 01 1xmmreg1xmmreg2
CMPPDxmmreg,memパックド倍精度浮動小数点の比較0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 0 0 0 1 0modxmmregr/m
CMPSDxmmreg2,xmmreg1ダブルワードと比較1 1 1 1 0 0 1 00 0 0 0 1 1 1 11 1 0 0 0 0 1 01 1xmmreg1xmmreg2
CMPSDxmmreg,r/mダブルワードと比較1 1 1 1 0 0 1 00 0 0 0 1 1 1 11 1 0 0 0 0 1 0modxmmregr/m
COMISDxmmreg2,xmmreg1下位の倍精度浮動小数点値を比較0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 0 1 1 1 11 1xmmreg1xmmreg2
COMISDxmmreg,r/m下位の倍精度浮動小数点値を比較0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 0 1 1 1 1modxmmregr/m
CVTPI2PDxmmreg2,xmmreg12つのパックド符号付32bitをパックド倍精度浮動小数点0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 0 1 0 1 01 1xmmreg1xmmreg2
CVTPI2PDxmmreg,r/m2つのパックド符号付32bitをパックド倍精度浮動小数点0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 0 1 0 1 0modxmmregr/m
CVTPD2PIxmmreg2,xmmreg12つのパックド倍精度小数点を2つのパックド符号32bitに変換0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 0 1 1 0 11 1xmmreg1xmmreg2
CVTPD2PIxmmreg,r/m2つのパックド倍精度小数点を2つのパックド符号32bitに変換0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 0 1 1 0 1modxmmregr/m
CVTSI2SDr32,xmmreg1つの符号付32bit整数を倍精度浮動小数点に変換する1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 0 1 0 1 0 1 01 1xmmregr32
CVTSI2SDxmmreg,r/m1つの符号付32bit整数を倍精度浮動小数点に変換する1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 0 1 0 1 0 1 0modxmmregr/m
CVTSD2SIr32,xmmreg1つの倍精度浮動小数点をregに変換する1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 0 1 0 1 1 0 11 1r32xmmreg
CVTSD2SIr32,r/m1つの倍精度浮動小数点をregに変換する1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 0 1 0 1 1 0 1modr32r/m
CVTTPD2PIxmmreg2,xmmreg12つのパックド倍精度浮動小数点を2つの符号付32bitに変換する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 0 1 1 0 01 1xmmreg1xmmreg2
CVTTPD2PIxmmreg,r/m2つのパックド倍精度浮動小数点を2つの符号付32bitに変換する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 0 1 1 0 0modxmmregr/m
CVTTSD2SIr32,xmmreg1つの倍精度浮動小数点を符号付32bitに変換する1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 0 1 0 1 1 0 01 1r32xmmreg
CVTTSD2SIr32,r/m1つの倍精度浮動小数点を符号付32bitに変換する1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 0 1 0 1 1 0 0modr32r/m
CVTPD2PSxmmreg2,xmmreg12つの倍精度浮動小数点を2つの単精度浮動小数点に変換する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 1 0 1 01 1xmmreg1xmmreg2
CVTPD2PSxmmreg,r/m2つの倍精度浮動小数点を2つの単精度浮動小数点に変換する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 1 0 1 0modxmmregr/m
CVTPS2PDxmmreg2,xmmreg12つの単精度浮動小数点を2つ倍精度浮動小数点に変換する0 0 0 0 1 1 1 10 1 0 1 1 0 1 01 1xmmreg1xmmreg2
CVTPS2PDxmmreg,r/m2つの単精度浮動小数点を2つ倍精度浮動小数点に変換する0 0 0 0 1 1 1 10 1 0 1 1 0 1 0modxmmregr/m
CVTSD2SSxmmreg2,xmmreg11つの倍度浮動小数点を1つの単精度浮動小数点に変換する1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 1 0 1 1 0 1 01 1xmmreg1xmmreg2
CVTSD2SSxmmreg,r/m1つの倍度浮動小数点を1つの単精度浮動小数点に変換する1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 1 0 1 1 0 1 0modxmmregr/m
CVTSS2SDxmmreg2,xmmreg11つの単精度浮動小数点を1つの倍精度浮動小数点に変換する1 1 1 1 0 0 1 10 0 0 0 1 1 1 10 1 0 1 1 0 1 01 1xmmreg1xmmreg2
CVTSS2SDxmmreg,r/m1つの単精度浮動小数点を1つの倍精度浮動小数点に変換する1 1 1 1 0 0 1 10 0 0 0 1 1 1 10 1 0 1 1 0 1 0modxmmregr/m
CVTPD2DQxmmreg2,xmmreg12つの倍精度浮動小数点を符号付32bitに変換する1 1 1 1 0 0 1 00 0 0 0 1 1 1 11 1 1 0 0 1 1 01 1xmmreg1xmmreg2
CVTPD2DQxmmreg,r/m2つの倍精度浮動小数点を符号付32bitに変換する1 1 1 1 0 0 1 00 0 0 0 1 1 1 11 1 1 0 0 1 1 0modxmmregr/m
CVTTPD2DQxmmreg2,xmmreg12つの倍精度浮動小数点を符号付32bitに変換する0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 0 1 1 01 1xmmreg1xmmreg2
CVTTPD2DQxmmreg,r/m2つの倍精度浮動小数点を符号付32bitに変換する0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 0 1 1 0modxmmregr/m
CVTDQ2PDxmmreg2,xmmreg12つの符号付32bitを倍精度浮動小数点1 1 1 1 0 0 1 10 0 0 0 1 1 1 11 1 1 0 0 1 1 01 1xmmreg1xmmreg2
CVTDQ2PDxmmreg,r/m2つの符号付32bitを倍精度浮動小数点1 1 1 1 0 0 1 10 0 0 0 1 1 1 11 1 1 0 0 1 1 0modxmmregr/m
CVTPS2DQxmmreg2,xmmreg14つの単精度浮動小数点を符号付32bitに変換する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 1 0 1 11 1xmmreg1xmmreg2
CVTPS2DQxmmreg,r/m4つの単精度浮動小数点を符号付32bitに変換する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 1 0 1 1modxmmregr/m
CVTTPS2DQxmmreg2,xmmreg14つの単精度浮動小数点を符号付32bitに変換する1 1 1 1 0 0 1 10 0 0 0 1 1 1 10 1 0 1 1 0 1 11 1xmmreg1xmmreg2
CVTTPS2DQxmmreg,r/m4つの単精度浮動小数点を符号付32bitに変換する1 1 1 1 0 0 1 10 0 0 0 1 1 1 10 1 0 1 1 0 1 1modxmmregr/m
CVTDQ2PSxmmreg2,xmmreg14つの符号付32bitを単精度浮動小数点に変換する0 0 0 0 1 1 1 10 1 0 1 1 0 1 11 1xmmreg1xmmreg2
CVTDQ2PSxmmreg,r/m4つの符号付32bitを単精度浮動小数点に変換する0 0 0 0 1 1 1 10 1 0 1 1 0 1 1modxmmregr/m
DIVPDxmmreg2,xmmreg1倍精度浮動小数点の除算0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 1 1 1 01 1xmmreg1xmmreg2
DIVPDxmmreg,r/m倍精度浮動小数点の除算0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 1 1 1 0modxmmregr/m
DIVSDxmmreg2,xmmreg1倍精度浮動小数点の除算1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 1 0 1 1 1 1 01 1xmmreg1xmmreg2
DIVSDxmmreg,r/m倍精度浮動小数点の除算1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 1 0 1 1 1 1 0modxmmregr/m
MAXPDxmmreg2,xmmreg1倍精度浮動小数点の最大値0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 1 1 1 11 1xmmreg1xmmreg2
MAXPDxmmreg,r/m倍精度浮動小数点の最大値0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 1 1 1 1modxmmregr/m
MAXSDxmmreg,xmmreg11つの倍精度浮動小数点の最大値1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 1 0 1 1 1 1 11 1xmmreg1xmmreg2
MAXSDxmmreg,r/m1つの倍精度浮動小数点の最大値1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 1 0 1 1 1 1 1modxmmregr/m
MINPDxmmreg2,xmmreg1倍精度浮動小数点の最小値0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 1 1 0 11 1xmmreg1xmmreg2
MINPDxmmreg,r/m倍精度浮動小数点の最小値0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 1 1 0 1modxmmregr/m
MINSDxmmreg2,xmmreg1倍精度浮動小数点の最小値1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 1 0 1 1 1 0 11 1xmmreg1xmmreg2
MINSDxmmreg,r/m倍精度浮動小数点の最小値1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 1 0 1 1 1 0 1modxmmregr/m
MOVAPDxmmreg2,xmmreg12つの倍精度浮動小数点を移動する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 0 1 0 0 11 1xmmreg1xmmreg2
MOVAPDxmmreg,rm2つの倍精度浮動小数点を移動する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0/ 1 0 1 0 0 1modxmmregr/m
MOVAPDxmmreg2,xmmreg12つの倍精度浮動小数点を移動する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 0 1 0 0 01 1xmmreg1xmmreg2
MOVAPDxmmreg,r/m2つの倍精度浮動小数点を移動する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 0 1 0 0 0modxmmregr/m
MOVHPDxmmreg,r/m倍精度浮動小数点を上位に移動0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 0 1 0 1 1 1modxmmregr/m
MOVHPDxmmreg,r/m倍精度浮動小数点を上位に移動0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 0 1 0 1 1 0modxmmregr/m
MOVLPDxmmreg,r/m倍精度浮動小数点を下位に移動0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 0 1 0 0 1 1modxmmregr/m
MOVLPDxmmreg,r/m倍精度浮動小数点を下位に移動0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 0 1 0 0 1 0modxmmregr/m
MOVLPDr/m,xmmreg倍精度浮動小数点を下位に移動0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 0 0 0 01 1r32xmmreg
MOVSDxmmreg2,xmmreg132bitを転送する1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 0 0 1 0 0 0 11 1xmmreg1xmmreg2
MOVSDr/m,xmmreg32bitを転送する1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 0 0 1 0 0 0 1modxmmregr/m
MOVSDxmmreg2,xmmreg132bitを転送する1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 0 0 1 0 0 0 01 1xmmreg1xmmreg2
MOVSDxmmreg,r/m32bitを転送する1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 0 0 1 0 0 0 0modxmmregr/m
MOVUPDxmmreg2,xmmreg1パックド倍精度浮動小数点を移動する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 0 1 0 0 0 11 1xmmreg1xmmreg2
MOVUPDr/m,xmmregパックド倍精度浮動小数点を移動する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 0 1 0 0 0 1modxmmregr/m
MOVUPDxmmreg2,xmmreg1パックド倍精度浮動小数点を移動する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 0 1 0 0 0 01 1xmmreg1xmmreg2
MOVUPDxmmreg,r/mパックド倍精度浮動小数点を移動する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 0 1 0 0 0 0modxmmregr/m
MULPDパックド浮動小数点の乗算をする0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 1 0 0 11 1xmmreg1xmmreg2
MULPDxmmreg,r/mパックド浮動小数点の乗算をする0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 1 0 0 1modxmmregr/m
MULSDxmmreg2,xmmreg1下位の浮動小数点の乗算をする1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 1 0 1 1 0 0 11 1xmmreg1xmmreg2
MULSDxmmreg,r/m下位の浮動小数点の乗算をする1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 1 0 1 1 0 0 1modxmmregr/m
ORPDxmmreg2,xmmreg1パックド倍精度浮動小数点のOR0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 0 1 1 01 1xmmreg1xmmreg2
ORPDxmmreg,r/mパックド倍精度浮動小数点のOR0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 0 1 1 0modxmmregr/m
SHUFPDxmmreg2,xmmreg1,imm8シャッフルする0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 0 0 1 1 01 1xmmreg1xmmreg2
SHUFPDxmmreg,r/m,imm8シャッフルする0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 0 0 1 1 0modxmmregr/m
SQRTPDxmmreg2,xmmreg1パックド倍精度浮動小数点の平方根を求める0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 0 0 0 11 1xmmreg1xmmreg2
SQRTPDxmmreg,r/mパックド倍精度浮動小数点の平方根を求める0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 0 0 0 1modxmmregr/m
SQRTSDxmmreg2,xmmreg1パックド倍精度浮動小数点の平方根を求める1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 1 0 1 0 0 0 11 1xmmreg1xmmreg2
SQRTSDxmmreg,r/mパックド倍精度浮動小数点の平方根を求める1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 1 0 1 0 0 0 1modxmmregr/m
SUBPDxmmreg2,xmmreg1パックド倍精度浮動小数点の減算0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 1 1 0 01 1xmmreg1xmmreg2
SUBPDxmmreg,r/mパックド倍精度浮動小数点の減算0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 1 1 0 0modxmmregr/m
SUBSDxmmreg2,xmmreg1パックド倍精度浮動小数点の減算1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 1 0 1 1 1 0 01 1xmmreg1xmmreg2
SUBSDパックド倍精度浮動小数点の減算1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 1 0 1 1 1 0 0modxmmregr/m
UCOMISDxmmreg2,xmmreg1下位の倍精度浮動小数点を比較する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 0 1 1 1 01 1xmmreg1xmmreg2
UCOMISDxmmreg,r/m下位の倍精度浮動小数点を比較する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 0 1 1 1 0modxmmregr/m
UNPCKHPDxmmreg2,xmmreg1上位の倍精度浮動小数点をインターリーブする0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 0 1 0 1 0 11 1xmmreg1xmmreg2
UNPCKHPDxmmreg,r/m上位の倍精度浮動小数点をインターリーブする0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 0 1 0 1 0 1modxmmregr/m
UNPCKLPDxmmreg2,xmmreg1下位の倍精度浮動小数点をインターリーブする0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 0 1 0 1 0 01 1xmmreg1xmmreg2
UNPCKLPDxmmreg,r/m下位の倍精度浮動小数点をインターリーブする0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 0 1 0 1 0 0modxmmregr/m
XORPDxmmreg2,xmmreg1倍精度のXOR0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 0 1 1 11 1xmmreg1xmmreg2
XORPDxmmreg,r/m倍精度のXOR0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 0 1 0 1 1 1modxmmregr/m
MOVDxmmreg,reg32bitを転送する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 0 1 1 1 01 1xmmregreg
MOVDreg,xmmreg32bitを転送する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 1 1 1 1 01 1xmmregreg
MOVDr/m,xmmreg32bitを転送する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 0 1 1 1 0modxmmregr/m
MOVDr/m,xmmreg32bitを転送する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 1 1 1 1 0modxmmregr/m
MOVDQAxmmreg2,xmmreg132bitを転送する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 0 1 1 1 11 1xmmreg1xmmreg2
MOVDQAxmmreg,reg32bitを転送する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 1 1 1 1 11 1xmmreg1xmmreg2
MOVDQAxmmreg,r/m32bitを転送する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 0 1 1 1 1modxmmregr/m
MOVDQAr/m,xmmreg32bitを転送する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 1 1 1 1 1modxmmregr/m
MOVDQUxmmreg2,xmmreg1アライメントの合わないダブル・クワッドワードを転送する1 1 1 1 0 0 1 10 0 0 0 1 1 1 10 1 1 0 1 1 1 11 1xmmreg1xmmreg2
MOVDQUxmmreg2,xmmreg1アライメントの合わないダブル・クワッドワードを転送する1 1 1 1 0 0 1 10 0 0 0 1 1 1 10 1 1 1 1 1 1 11 1xmmreg1xmmreg2
MOVDQUxmmreg,r/mアライメントの合わないダブル・クワッドワードを転送する1 1 1 1 0 0 1 10 0 0 0 1 1 1 10 1 1 0 1 1 1 1modxmmregr/m
MOVDQUr/m,xmmregアライメントの合わないダブル・クワッドワードを転送する1 1 1 1 0 0 1 10 0 0 0 1 1 1 10 1 1 1 1 1 1 1modxmmregr/m
MOVQ2DQxmmreg,mmregmmxのクワッドワードを下位ワードに移動する1 1 1 1 0 0 1 10 0 0 0 1 1 1 11 1 0 1 0 1 1 01 1xmmregmmreg
MOVDQ2Qmmreg,xmmregmmxのクワッドワードを下位ワードに移動する1 1 1 1 0 0 1 00 0 0 0 1 1 1 11 1 0 1 0 1 1 01 1mmregmmreg
MOVQxmmreg2,xmmreg1クワッドワードを移動する1 1 1 1 0 0 1 10 0 0 0 1 1 1 10 1 1 1 1 1 1 01 1xmmreg1xmmreg2
MOVQxmmreg2,xmmreg1クワッドワードを移動する0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 1 0 1 1 01 1xmmreg1xmmreg2
MOVQxmmreg,r/mクワッドワードを移動する1 1 1 1 0 0 1 10 0 0 0 1 1 1 10 1 1 1 1 1 1 0modxmmregr/m
MOVQr/m,xmmregクワッドワードを移動する0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 1 0 1 1 0modxmmregr/m
PACKSSDWxmmreg2,xmmreg1符号付飽和処理を使用して符号付32bit4つを符号付16bitに変換する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 0 1 0 1 11 1xmmreg1xmmreg2
PACKSSDWxmmreg,r/m符号付飽和処理を使用して符号付32bit4つを符号付16bitに変換する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 0 1 0 1 1modxmmregr/m
PACKSSWB符号付飽和処理を使用して符号付16bit4つを符号付8bitに変換する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 0 0 0 1 11 1xmmreg1xmmreg2
PACKSSWBxmmreg,r/m符号付飽和処理を使用して符号付16bit4つを符号付8bitに変換する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 0 0 0 1 1modxmmregr/m
PACKUSWBxmmreg2,xmmreg1符号付飽和処理を使用して符号付16bit4つを符号付8bitに変換する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 0 0 1 1 11 1xmmreg1xmmreg2
PACKUSWBxmmreg,r/m符号付飽和処理を使用して符号付16bit4つを符号付8bitに変換する0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 0 0 1 1 1modxmmregr/m
PADDQxmmreg2,xmmreg1クワッドワード整数を加算0 0 0 0 1 1 1 11 1 0 1 0 1 0 01 1xmmreg1xmmreg2
PADDQxmmreg,r/mクワッドワード整数を加算0 0 0 0 1 1 1 11 1 0 1 0 1 0 0modxmmregr/m
PADDQxmmreg2,xmmreg1クワッドワード整数を加算0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 1 0 1 0 01 1xmmreg1xmmreg2
PADDQxmmreg,r/mクワッドワード整数を加算0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 1 0 1 0 0modxmmregr/m
PADDxmmreg2,xmmreg1ラップアラウンド付き加算0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 1 1 1gg1 1xmmreg1xmmreg2
PADDラップアラウンド付き加算0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 1 1 1ggmodxmmregr/m
PADDSxmmreg2,xmmreg1ラップアラウンド付き符号付整数加算0 1 1 0 0 1 1 00 0 0 0 1 1 1 1 1 1 1 0 1 1gg1 1xmmreg1xmmreg2
PADDSxmmreg,r/mラップアラウンド付き符号付整数加算0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 1 1ggmodxmmregr/m
PADDUSxmmreg2,xmmreg1ラップアラウンド付き符号無整数加算0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 1 1 1gg1 1xmmreg1xmmreg2
PADDUSxmmreg,r/mラップアラウンド付き符号無整数加算0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 1 1 1ggmodxmmregr/m
PANDAND0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 1 1 0 1 11 1xmmreg1xmmreg2
PANDxmmreg,r/mAND0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 1 1 0 1 1modxmmregr/m
PANDNxmmreg,r/mAND NOT0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 1 1 1 1 11 1xmmregxmmreg2
PANDNxmmreg,r/mAND NOT0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 1 1 1 1 1modxmmregr/m
PAVGBxmmreg2,xmmreg1丸めを利用してパックド符号なしバイト整数の平均0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 0 0 0 01 1xmmreg1xmmreg2
PAVGBxmmreg,r/m丸めを利用してパックド符号なしバイト整数の平均0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 0 0 0 0modxmmregr/m
PAVGWxmmreg2,xmmreg1丸めを利用してパックド符号なしワード整数の平均0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 0 0 1 11 1xmmreg1xmmreg2
PAVGWxmmreg,r/m丸めを利用してパックド符号なしワード整数の平均0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 0 0 1 1modxmmregr/m
PCMPEQxmmreg2,xmmreg1等しいか比較0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 1 0 1gg1 1xmmreg1xmmreg2
PCMPEQxmmreg,r/m等しいか比較0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 1 0 1ggmodxmmregr/m
PCMPGTxmmreg2,xmmreg1符号付の比較0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 0 0 1gg1 1xmmreg1xmmreg2
PCMPGTxmmreg,r/m符号付の比較0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 0 0 1ggmodxmmregr/m
PEXTRWr32,m,imm8指定されたワードを抽出0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 0 0 1 0 11 1r32xmmreg
PINSRWxmmreg,reg,imm8指定されたワード位置に挿入0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 0 0 1 0 01 1xmmregreg
PINSRWxmmreg,r/m,imm8指定されたワード位置に挿入0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 0 0 1 0 0modxmmregr/m
PMADDxmmreg2,xmmreg1パックドワードの乗算0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 1 0 1 0 11 1xmmreg1xmmreg2
PMADDxmmreg,r/mパックドワードの乗算0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 1 0 1 0 1modxmmregr/m
PMAXSWxmmreg2,xmmreg1符号付ワード整数の最大値0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 1 1 1 01 1xmmreg1xmmreg2
PMAXSWxmmreg,r/m符号付ワード整数の最大値0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 1 1 1 0modxmmregr/m
PMAXUBxmmreg2,xmmreg1符号無バイト整数の最大値0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 1 1 1 1 01 1xmmreg1xmmreg2
PMAXUBxmmreg2,xmmreg1符号無バイト整数の最大値0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 1 1 1 1 01 1xmmreg1xmmreg2
PMAXUBxmmreg,r/m符号無バイト整数の最大値0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 1 1 1 1 0modxmmregr/m
PMINSWxmmreg2,xmmreg1符号付」ワード整数の最小値0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 1 0 1 01 1xmmreg1xmmreg2
PMINSWxmmreg,r/m符号付」ワード整数の最小値0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 1 0 1 0modxmmregr/m
PMINUBxmmreg2,xmmreg1符号無バイト整数の最小値0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 1 1 0 1 01 1xmmreg1xmmreg2
PMINUBxmmreg,r/m符号無バイト整数の最小値0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 1 1 0 1 0modxmmregr/m
PMOVMSKBr32,xmmreg2バイトマスクの移動0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 1 0 1 1 11 1r32xmmreg
PMULHUWxmmreg2,xmmreg1パックド符号無しワード整数の乗算0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 0 1 0 01 1xmmreg1xmmreg2
PMULHUWxmmreg,r/mパックド符号無しワード整数の乗算0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 0 1 0 0modxmmregr/m
PMULHWxmmreg2,xmmreg1符号付ワード整数を乗算 上位に格納0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 0 1 0 11 1xmmreg1xmmreg2
PMULHWxmmreg,r/m符号付ワード整数を乗算 上位に格納0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 0 1 0 1modxmmregr/m
PMULLWxmmreg2,xmmreg1符号付ワード整数を乗算 下位に格納0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 1 0 1 0 11 1xmmreg1xmmreg2
PMULLWxmmreg,r/m符号付ワード整数を乗算 下位に格納0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 1 0 1 0 1modxmmregr/m
PMULUDQxmmreg2,xmmreg1符号無ワード整数の乗算0 0 0 0 1 1 1 11 1 1 1 0 1 0 01 1xmmreg1xmmreg2
PMULUDQxmmreg,r/m符号無ワード整数の乗算0 0 0 0 1 1 1 11 1 1 1 0 1 0 0modxmmregr/m
PMULUDQxmmreg2,xmmreg1符号無ワード整数の乗算0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 1 0 1 0 01 1xmmreg1xmmreg2
PMULUDQxmmreg,r/m符号無ワード整数の乗算0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 1 0 1 0 0modxmmregr/m
PORxmmreg2,xmmreg1OR0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 1 0 1 11 1xmmreg1xmmreg2
PORxmmreg,r/mOR0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 1 0 1 1modxmmregr/m
PSADBWxmmreg,xmmreg1符号無しパックドバイト整数の差の絶対値0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 1 0 1 1 01 1xmmreg1xmmreg2
PSADBWxmmreg,r/m符号無しパックドバイト整数の差の絶対値0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 1 0 1 1 0modxmmregr/m
PSHUFLWxmmreg2,xmmreg1下位ワードをシャッフル1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 1 1 1 0 0 0 01 1xmmreg1xmmreg2
PSHUFLWxmmreg,r/m下位ワードをシャッフル1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 1 1 1 0 0 0 0modxmmregr/m
PSHUFHWxmmreg2,xmmreg1上位ワードをシャッフル1 1 1 1 0 0 1 10 0 0 0 1 1 1 10 1 1 1 0 0 0 01 1xmmreg1xmmreg2
PSHUFHWxmmreg,r/m上位ワードをシャッフル1 1 1 1 0 0 1 10 0 0 0 1 1 1 10 1 1 1 0 0 0 0modxmmregr/m
PSHUFDxmmreg2,xmmreg1ダブルワードをシャッフル0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 1 0 0 0 01 1xmmreg1xmmreg2
PSHUFDxmmreg,r/mダブルワードをシャッフル0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 1 0 0 0 0modxmmregr/m
PSLLDQxmmreg左シフト0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 1 0 0 1 11 11 1 1xmmreg
PSLLxmmreg,xmmreg1左シフト0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 1 0 0 gg1 1xmmreg1xmmreg2
PSLLxmmreg,r/m左シフト0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 1 0 0 ggmodxmmregr/m
PSLLxmmreg2,xmmreg1左シフト0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 1 0 0 gg1 11 1 0xmmreg
PSRAxmmreg2,xmmreg1右シフト0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 0 0gg1 1xmmreg1xmmreg2
PSRAxmmreg,r/m右シフト0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 0 0ggmodxmmregr/m
PSRAxmmreg右シフト0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 1 0 0gg1 11 0 0xmmreg
PSRLDQxmmreg右シフト0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 1 0 0 1 11 10 1 1xmmreg
PSRLxmmreg2,xmmreg1右シフト0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 1 0 0gg1 1xmmreg1xmmreg2
PSRLxmmreg,r/m右シフト0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 0 1 0 0ggmodxmmregr/m
PSRLxmmreg右シフト0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 1 0 0gg1 10 1 0 xmmreg
PSUBQxmmreg2,xmmregクワッドワード整数の減算0 0 0 0 1 1 1 11 1 1 1 1 0 1 11 1xmmreg1xmmreg2
PSUBQxmmreg,r/mクワッドワード整数の減算0 0 0 0 1 1 1 11 1 1 1 1 0 1 1modxmmregr/m
PSUBQxmmreg2,xmmreg1クワッドワード整数の減算0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 1 1 0 1 11 1xmmreg1xmmreg2
PSUBQxmmreg,r/mクワッドワード整数の減算0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 1 1 0 1 1modxmmregr/m
PSUBxmmreg2,xmmreg1パックドバイト整数の減算0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 1 1 0gg1 1xmmreg1xmmreg2
PSUBxmmreg,r/mパックドバイト整数の減算0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 1 1 0ggmodxmmregr/m
PSUBSxmmreg2,xmmreg1符号付パックドバイトの減算 飽和付き0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 1 0gg1 1xmmreg1xmmreg2
PSUBSxmmreg,r/m符号付パックドバイトの減算 飽和付き0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 1 0ggmodxmmregr/m
PSUBUSxmmreg2,xmmreg1符号無パックドバイトの減算 飽和付き0 0 0 0 1 1 1 11 1 0 1 1 0gg1 1xmmreg1xmmreg2
PSUBUSxmmreg,r/m符号無パックドバイトの減算 飽和付き0 0 0 0 1 1 1 11 1 0 1 1 0ggmodxmmregr/m
PUNPCKHxmmreg2,xmmreg1上位ワードをインターリーブ0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 0 1 0gg1 1xmmreg1xmmreg2
PUNPCKHxmmreg,r/m上位ワードをインターリーブ0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 0 1 0ggmodxmmregr/m
PUNPCKHQDQxmmreg2,xmmreg1上位ワードをインターリーブ0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 0 1 1 0 11 1xmmreg1xmmreg2
PUNPCKHQDQxmmreg上位ワードをインターリーブ0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 0 1 1 0 1modxmmregr/m
PUNPCKLxmmreg2,xmmreg1下位ワードをインターリーブ0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 0 0 0gg1 1xmmreg1xmmreg2
PUNPCKLxmmreg,r/m下位ワードをインターリーブ0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 0 0 0ggmodxmmregr/m
PUNPCKLQDQxmmreg2,xmmreg1下位ワードをインターリーブ0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 0 1 1 0 01 1xmmreg1xmmreg2
PUNPCKLQDQxmmreg,r/m下位ワードをインターリーブ0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 1 1 0 1 1 0 0modxmmregr/m
PXORxmmreg2,xmmreg1XOR0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 1 1 1 11 1xmmreg1xmmreg2
PXORxmmreg,r/mXOR0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 1 1 1 1modxmmregr/m
MASKMOVDQUxmmreg2,xmmreg1バイトマスクを使用してメモリ・ロケーションに書き込む0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 1 0 1 1 11 1xmmreg1xmmreg2
CLFLUSHr/mキャッシュ・ラインをフラッシュ0 0 0 0 1 1 1 11 0 1 0 1 1 1 0mod1 1 1r/m
MOVNTPDxmmreg,r/mパックド倍精度浮動小数点を移動0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 0 1 0 1 1modxmmregr/m
MOVNTDQxmmreg,r/mキャッシュを使用せずに移動0 1 1 0 0 1 1 00 0 0 0 1 1 1 11 1 1 0 0 1 1 1modxmmregr/m
MOVNTIr/m,regキャッシュを使用せずに32bit整数を移動0 0 0 0 1 1 1 11 1 0 0 0 0 1 1modregr/m
PAUSEスピンループのヒントを提供1 1 1 1 0 0 1 11 0 0 1 0 0 0 01 1 1 1 0 0 1 11 0 0 1 0 0 0 0
LFENCEロード操作をシリアル化0 0 0 0 1 1 1 11 0 1 0 1 1 1 01 0 1 0 1 1 1 0
MFENCEロード操作とストア操作をシリアル化0 0 0 0 1 1 1 11 0 1 0 1 1 1 01 1 1 1 0 0 0 0

Prescott

90nmプロセスルール
SSE3
Intel(R) Pentium(R) 4 CPU 3.40GHzの例
L1 Trace 8way 12kμOps line size 64byte
L1 Data 8way 16k line size 64byte
L2 8way 2Mbyte line size 64byte
31段パイプライン
Hyper-Threading搭載

x64搭載

データー及びアドレスを64bit化
汎用レジスタの追加 R8~R15 8本
128bitのXMMレジスタの追加 8本
Long 64bit-modeにするとアドレスが64bitになる。
REXプリフィクスで64bitを指定すると

追加命令

64bit命令
instop 76543210 7654321076543210
SWAPGSGSレジスタのベース値を交換0 0 0 0 1 1 1 10 0 0 0 0 0 0 11 1 1 1 1 0 0 0
SYSCALL高速なシステムコール0 0 0 0 1 1 1 10 0 0 0 0 1 0 1
SYSRET高速なシステムコールからの復帰0 0 0 0 1 1 1 10 0 0 0 0 1 1 1
SSE3
instop 76543210 765432107654321076543210
MONITOReax, ecx, edxアドレス・モニタリング・ハードウェアを使用可能な状態にする0 0 0 0 1 1 1 10 0 0 0 0 0 0 11 1 0 0 1 0 0 0
MWAITeax, ecx, edx最適化へのヒント0 0 0 0 1 1 1 10 0 0 0 0 0 0 11 1 0 0 1 0 0 1
FISTTPm int16bit,ST++STを符号付整数(切り捨て)てストアしポップ1 1 0 1 1 1 1 1modA0 0 1r/m
FISTTPm int32bit,ST++STを符号付整数(切り捨て)てストアしポップ1 1 0 1 1 0 1 1modA0 0 1r/m
FISTTPm int64bit,ST++STを符号付整数(切り捨て)てストアしポップ1 1 0 1 1 1 0 1modA0 0 1r/m
LDDQUxmm,r/mロード1 1 1 1 0 0 1 00 0 0 0 1 1 1 11 1 1 1 0 0 0 0modAxmmregr/m
MOVDDUPxmmreg,r/m下位の倍精度浮動小数点を移動複製1 1 1 1 0 0 1 00 0 0 0 1 1 1 10 0 0 0 1 0 1 0modxmmregr/m
MOVSHDUPxmmreg2,xmmreg1上位の単精度浮動小数点を移動複製1 1 1 1 0 0 1 10 0 0 0 1 1 1 10 0 0 0 1 1 1 01 1xmmreg1xmmreg2
MOVSHDUPxmmreg2,r/m上位の単精度浮動小数点を移動複製1 1 1 1 0 0 1 10 0 0 0 1 1 1 10 0 0 0 1 1 1 0modxmmregr/m
MOVSLDUPxmmreg2,xmmreg1パックド単精度データを下位の要素を複製1 1 1 1 0 0 1 10 0 0 0 1 1 1 10 0 0 0 1 0 1 01 1xmmreg1xmmreg2
MOVSLDUPxmmreg,r/mパックド単精度データを下位の要素を複製1 1 1 1 0 0 1 10 0 0 0 1 1 1 10 0 0 0 1 0 1 0modxmmregr/m

Intel Core 2

Conroe

2007年、Intelから発表。
65nmプロセスルール
1.06~3.33GHz
LGA775
4個のデコーダ
ALUは3個
6つの命令発行ポート
14段パイプライン
デュアルコア
Intel(R) Core(TM)2 CPU 6320 @ 1.86GHzの例
L1 inst 8way 32k*2 line size 64byte
L1 data 8way 32k*2 line size 64byte
L2 16way 4Mbyte line size 64byte
SSSE3を追加
SSSE3
instop 76543210 765432107654321076543210 76543210
PABSBmmreg2,mmreg1パックドバイトの絶対値0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 1 1 1 0 01 1mmreg1mmreg2
PABSBr/m,mmregパックドバイトの絶対値0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 1 1 1 0 0modmmregr/m
PABSBxmmreg2,xmmreg1パックドバイトの絶対値0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 1 1 1 0 01 1xmmreg1xmmreg2
PABSBxmmreg,r/mパックドバイトの絶対値0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 1 1 1 0 0modxmmregr/m
PABSDmmreg2,mmreg1パックドダブルワードの絶対値0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 1 1 1 1 01 1mmreg1mmreg2
PABSDr/m,mmregパックドダブルワードの絶対値0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 1 1 1 1 0modmmregr/m
PABSDxmmreg2,xmmreg1パックドダブルワードの絶対値0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 1 1 1 1 01 1xmmreg1xmmreg2
PABSDxmmreg,r/mパックドダブルワードの絶対値0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 1 1 1 1 0modxmmregr/m
PABSWmmreg2,mmreg1パックドワードの絶対値0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 1 1 1 0 11 1mmreg1mmreg2
PABSWr/m,mmregパックドワードの絶対値0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 1 1 1 0 1modmmregr/m
PABSWxmmreg2,xmmreg1パックドワードの絶対値0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 1 1 1 0 11 1xmmreg1xmmreg2
PABSWxmmreg,r/mパックドワードの絶対値0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 1 1 1 0 1modxmmregr/m
PALIGNRmmreg2,mmreg1,imm8バイト右シフト0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 0 1 1 1 11 1mmreg1mmreg2
PALIGNRmmreg,r/m,imm8バイト右シフト0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 0 1 1 1 1modmmregr/m
PALIGNRxmmreg2,xmmreg1バイト右シフト0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 0 1 1 1 11 1xmmreg1xmmreg2
PALIGNRxmmreg2,xmmreg1バイト右シフト0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 0 1 1 1 1modxmmregr/m
PHADDDmmreg2,mmreg1パックドダブルワード水平加算0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 0 1 01 1mmreg1mmreg2
PHADDDr/m,mmregパックドダブルワード水平加算0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 0 1 0modmmregr/m
PHADDDxmmreg2,xmmreg1パックドダブルワード水平加算0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 0 1 01 1xmmreg1xmmreg2
PHADDDxmmreg ,modパックドダブルワード水平加算0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 0 1 0modxmmregr/m
PHADDSWmmreg2,mmreg1パックドワード飽和付水平加算0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 0 1 11 1mmreg1mmreg2
PHADDSWr/m,mmregパックドワード飽和付水平加算0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 0 1 1modmmregr/m
PHADDSWxmmreg2,xmmreg1パックドワード飽和付水平加算0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 0 1 11 1xmmreg1xmmreg2
PHADDSWxmmreg,r/mパックドワード飽和付水平加算0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 0 1 1modxmmregr/m
PHADDWmmreg2,mmreg1 パックドワード水平加算0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 0 0 11 1mmreg1mmreg2
PHADDWr/m,mmregパックドワード水平加算0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 0 0 1modmmregr/m
PHADDWxmmreg2,xmmreg1パックドワード水平加算0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 0 0 11 1xmmreg1xmmreg2
PHADDWr/m,mmregパックドワード水平加算0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 0 0 0modmmregr/m
PHADDWxmmreg,r/mパックドワード水平加算0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 0 0 1modxmmregr/m
PHSUBDmmreg2,mmreg1パックドダブルワード水平加算0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 1 1 01 1mmreg1mmreg2
PHSUBDr/m,mmregパックドダブルワード水平加算0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 1 1 0modmmregr/m
PHSUBDxmmreg2,xmmreg1パックドダブルワード水平加算0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 1 1 01 1xmmreg1xmmreg2
PHSUBDxmmreg,r/mパックドダブルワード水平加算0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 0modxmmregr/m
PHSUBSWmmreg2,mmreg1パックドワード飽和付水平加算0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 1 1 11 1mmreg1mmreg2
PHSUBSWr/m,mmregパックドワード飽和付水平加算0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 1 1 1modmmregr/m
PHSUBSWxmmreg1,r/mパックドワード飽和付水平加算0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 1 1 11 1xmmreg1xmmreg2
PHSUBSWxmmreg,r/mパックドワード飽和付水平加算0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 1 1 1modxmmregr/m
PHSUBWmmreg2,mmreg1パックドワード飽和付水平加算0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 1 0 11 1mmreg1mmreg2
PHSUBWr/m,mmregパックドワード飽和付水平加算0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 1 0 1modmmregr/m
PHSUBWxmmreg2,xmmreg1パックドワード飽和付水平加算0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 1 0 11 1xmmreg1xmmreg2
PHSUBWxmmreg,r/mパックドワード飽和付水平加算0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 1 0 1modxmmregr/m
PMADDUBSWmmreg2,mmreg1パックドバイト積和0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 1 0 01 1mmreg1mmreg2
PMADDUBSWr/m,mmregパックドバイト積和0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 1 0 0modmmregr/m
PMADDUBSWxmmreg3,xmmreg1パックドバイト積和0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 1 0 01 1xmmreg1xmmreg2
PMADDUBSWxmmreg,r/mパックドバイト積和0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 1 0 0modxmmregr/m
PMULHRSWmmreg2,mmreg1パックドワードの乗算0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 1 0 1 11 1mmreg1mmreg2
PMULHRSWr/m,mmregパックドワードの乗算0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 1 0 1 1modmmregr/m
PMULHRSWxmmreg2,xmmreg1パックドワードの乗算0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 1 0 1 11 1xmmreg1xmmreg2
PMULHRSWxmmreg,r/mパックドワードの乗算0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 1 0 1 1modxmmregr/m
PSHUFBmmreg2,mmreg1パックドバイトのシャッフル0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 0 0 01 1mmreg1mmreg2
PSHUFBr/m,mmregパックドバイトのシャッフル0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 0 0 0modmmregr/m
PSHUFBxmmreg2,xmmreg1パックドバイトのシャッフル0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 0 0 01 1xmmreg1xmmreg2
PSHUFBxmmreg,r/mパックドバイトのシャッフル0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 0 0 0 0modxmmregr/m
PSIGNBmmreg2,mmreg1パックドバイト符号処理0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 1 0 0 01 1mmreg1mmreg2
PSIGNBr/m,mmregパックドバイト符号処理0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 1 0 0 0modmmregr/m
PSIGNBxmmreg2,xmmreg1パックドバイト符号処理0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 1 0 0 01 1xmmreg1xmmreg2
PSIGNBxmmreg ,r/mパックドバイト符号処理0 1 1 0 0 1 1 00 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 1 0 0 0modxmmregr/m
PSIGNDmmreg2,mmreg1パックドダブルワード符号処理0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 1 0 1 01 1mmreg1mmreg2
PSIGNDr/m,mmregパックドダブルワード符号処理0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 0 1 0 1 0modmmregr/m

Penryn

45nm プロセルルール
2007年にIntelから発表
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHzの例
クワッドコア
L1 inst 8way 32k*4 line size 64byte
L1 data 8way 32k*4 line size 64byte
L2 8way 2Mbyte line size 64byte
SSE 4.1を追加
SSE4.1
instop 76543210 765432107654321076543210 76543210
BLENDPDxmmreg2,xmmreg1倍精度浮動小数点のブレンド0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 0 1 1 0 11 1xmmreg1xmmreg2
BLENDPDr/m,xmmreg 倍精度浮動小数点のブレンド0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 0 1 1 0 1modxmmregr/m
BLENDPSxmmreg2,xmmreg1単精度浮動小数点のブレンド0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 0 1 1 0 01 1xmmreg1xmmreg2
BLENDPSr/m,xmmreg 単精度浮動小数点のブレンド0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 0 1 1 0 0modxmmregr/m
BLENDVPDxmmreg2,xmmreg1 倍精度浮動小数点の可変ブレンド0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 1 0 1 0 11 1xmmreg1xmmreg2
BLENDVPDr/m,xmmreg 倍精度浮動小数点の可変ブレンド0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 1 0 1 0 1modxmmregr/m
BLENDVPSxmmreg2,xmmreg1 単精度浮動小数点の可変ブレンド0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 1 0 1 0 01 1xmmreg1xmmreg2
BLENDVPSr/m,xmmreg 単精度浮動小数点の可変ブレンド0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 1 0 1 0 0modxmmregr/m
DPPDxmmreg2,xmmreg1,imm8パックド倍精度浮動小数点のドット積0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 1 0 0 0 0 0 11 1xmmreg1xmmreg2
DPPDr/m,xmmreg,imm8 パックド倍精度浮動小数点のドット積0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 1 0 0 0 0 0 1modxmmregr/m
DPPSxmmreg2,xmmreg1,imm8パックド単精度浮動小数点のドット積0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 1 0 0 0 0 0 01 1xmmreg1xmmreg2
DPPSr/m,xmmreg,imm8パックド単精度浮動小数点のドット積0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 1 0 0 0 0 0 0modxmmregr/m
EXTRACTPSxmmreg,reg,imm8パックド単精度浮動小数点を抽出する0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 1 0 1 1 11 1regxmmreg
EXTRACTPSxmmreg,r/m,imm8パックド単精度浮動小数点を抽出する0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 1 0 1 1 1modr/mxmmreg
INSERTPSxmmreg2,xmmreg1,imm8パックド単精度浮動小数点の挿入0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 1 0 0 0 0 11 1xmmreg1xmmreg2
INSERTPSr/m,xmmreg,imm8パックド単精度浮動小数点の挿入0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 1 0 0 0 0 1modxmmregr/m
MOVNTDQAxmmreg2,r/mキャッシュを介さずにパックドクワッドワードを転送0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 0 1 0 1 01 1r/mxmmreg2
MPSADBWxmmreg2,xmmreg1,imm8SAD(Sum of Absolute Difference)0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 1 0 0 0 0 1 01 1xmmreg1xmmreg2
MPSADBWr/m,xmmreg,imm8SAD(Sum of Absolute Difference)0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 1 0 0 0010modxmmregr/m
PACKUSDWxmmreg2,xmmreg1符号無ダブルワードを飽和付で符号無ワードに変換0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 0 1 0 1 11 1xmmreg1xmmreg2
PACKUSDWr/m,xmmreg符号無ダブルワードを飽和付で符号無ワードに変換0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 0 1 0 1 1modxmmregr/m
PBLENDVBxmmreg2,xmmreg1パックドバイト可変ブレンド0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 1 0 0 0 01 1xmmreg1xmmreg2
PBLENDVBr/m,xmmregパックドバイト可変ブレンド0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 1 0 0 0 0modxmmregr/m
PBLENDVBxmmreg2,xmmreg1,imm8パックドバイト可変ブレンド0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 1 1 1 1 01 1xmmreg1xmmreg2
PBLENDVBr/m,xmmreg,imm8パックドバイト可変ブレンド0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 0 1 1 1 0modxmmregr/m
PCMPEQQxmmreg2,xmmreg1パックドクワッドワードの比較0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 0 1 0 0 11 1xmmreg1xmmreg2
PCMPEQQr/m,xmmregパックドクワッドワードの比較0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 0 1 0 0 1modxmmregr/m
PEXTRBxmmreg,reg,imm8パックドバイトを抽出0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 1 0 1 0 01 1regxmmreg
PEXTRBxmmreg,r/m,imm8パックドバイトを抽出0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 1 0 1 0 0modr/mxmmreg
PEXTRDxmmreg,reg,imm8パックドダブルワードを抽出0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 1 0 1 1 01 1regxmmreg
PEXTRDxmmreg,r/m,imm8パックドダブルワードを抽出0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 1 0 1 1 0modr/mxmmreg
PEXTRQxmmreg,reg,imm8パックドクワッドワードを抽出0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 1 0 1 1 01 1regxmmreg
PEXTRQxmmreg,r/m,imm8パックドクワッドワードを抽出0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 1 01 1 0modr/mxmmreg
PEXTRWxmmreg,reg,imm8パックドワードの抽出0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 1 0 1 0 11 1regxmmreg
PEXTRWxmmreg,r/m,imm8パックドワードの抽出0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 1 0 1 0 1modr/mxmmreg
PHMINPOSUWxmmreg2,xmmreg1パックドワードから最小値を探す0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 1 0 0 0 0 0 11 1xmmreg1xmmreg2
PHMINPOSUWr/m,xmmregパックドワードから最小値を探す0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 1 0 0 0 0 0 1modxmmregr/m
PINSRBreg,xmmreg,imm8パックドバイトを抽出0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 1 0 0 0 0 01 1xmmregreg
PINSRBr/m,xmmreg,imm8パックドバイトを抽出0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 1 0 0 0 0 0modxmmregr/m
PINSRDreg,xmmreg,imm8パックドダブルワードの抽出0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 1 0 0 0 1 01 1xmmregreg
PINSRDr/m,xmmreg,imm8パックドダブルワードの抽出0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 1 0 0 0 1 0modxmmregr/m
PINSRQreg,xmmreg,imm8パックドクワッドワードの抽出0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 1 0 0 0 1 01 1xmmregreg
PINSRQreg,xmmreg,imm8パックドクワッドワードの抽出0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 1 0 0 0 1 01 1xmmregreg
PINSRQr/m,xmmreg,imm8パックドクワッドワードの抽出0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 1 0 0 0 1 0modxmmregr/m
PMAXSBxmmreg2,xmmreg1パックドバイトの最大値0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 1 1 0 01 1xmmreg1xmmreg2
PMAXSBr/m,xmmregパックド符号有バイトの最大値0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 1 1 0 0modxmmregr/m
PMAXSDxmmreg2,xmmreg1パックド符号有ダブルワードの最大値0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 1 1 0 11 1xmmreg1xmmreg2
PMAXSDr/m,xmmregパックド符号有ダブルワードの最大値0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 1 1 0 1modxmmregr/m
PMAXUDxmmreg2,xmmreg1パックド符号無ダブルワードの最大値0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 1 1 1 11 1xmmreg1xmmreg2
PMAXUDr/m,xmmregパックド符号無ダブルワードの最大値0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 1 1 1 1modxmmregr/m
PMAXUWxmmreg2,xmmreg1パックド符号無ワードの最大値0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 1 1 1 01 1xmmreg1xmmreg2
PMAXUWr/m,xmmregパックド符号無ワードの最大値0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 1 1 1 0modxmmregr/m
PMINSBxmmreg2,xmmreg1パックド符号有バイトの最小値0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 1 0 0 01 1xmmreg1xmmreg2
PMINSBr/m,xmmregパックド符号有バイトの最小値0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 1 0 0 0modxmmregr/m
PMINSDxmmreg2,xmmreg1パックド符号有ダブルワードの最小値0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 1 0 0 11 1xmmreg1xmmreg2
PMINSDr/m,xmmregパックド符号有ダブルワードの最小値0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 1 0 0 1modxmmregr/m
PMINUDxmmreg2,xmmreg1パックド符号無ダブルワードの最小値0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 1 0 1 11 1xmmreg1xmmreg2
PMINUDr/m,xmmregパックド符号無ダブルワードの最小値0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 1 0 1 1modxmmregr/m
PMINUWxmmreg2,xmmreg1パックド符号無ワードの最小値0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 1 0 1 01 1xmmreg1xmmreg2
PMINUWr/m,xmmregパックド符号無ワードの最小値0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 1 0 1 0modxmmregr/m
PMOVSXBDxmmreg2,xmmreg1パックド符号付バイトをダブルワードに変換0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 0 0 0 0 11 1xmmreg1xmmreg2
PMOVSXBDr/m,xmmregパックド符号付バイトをダブルワードに変換0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 0 0 0 0 1modxmmregr/m
PMOVSXBQxmmreg2,xmmreg1パックド符号付バイトをクワッドワードに変換0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 0 0 0 1 01 1xmmreg1xmmreg2
PMOVSXBQr/m,xmmregパックド符号付バイトをクワッドワードに変換0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 0 0 0 1 0modxmmregr/m
PMOVSXBWxmmreg2,xmmreg1パックド符号付バイトをワードに変換0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 0 0 0 0 01 1xmmreg1xmmreg2
PMOVSXBWr/m,xmmregパックド符号付バイトをワードに変換0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 0 0 0 0 0modxmmregr/m
PMOVSXWDxmmreg2,xmmreg1パックド符号付ワードをダブルワードに変換0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 0 0 0 1 11 1xmmreg1xmmreg2
PMOVSXWDr/m,xmmregパックド符号付ワードをダブルワードに変換0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 0 0 0 1 1modxmmregr/m
PMOVSXWQxmmreg2,xmmreg1パックド符号付ワードをクワッドワードに変換0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 0 0 1 0 01 1xmmreg1xmmreg2
PMOVSXWQr/m,xmmregパックド符号付ワードをクワッドワードに変換0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 0 0 1 0 0modxmmregr/m
PMOVSXDQxmmreg2,xmmreg1パックド符号付ダブルワードをクワッドワードに変換0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 0 0 1 0 11 1xmmreg1xmmreg2
PMOVSXDQr/m,xmmregパックド符号付ダブルワードをクワッドワードに変換0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 0 0 1 0 1modxmmregr/m
PMOVZXBDxmmreg2,xmmreg1パックドバイトをダブルワードに0拡張0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 0 0 0 11 1xmmreg1xmmreg2
PMOVZXBDr/m,xmmregパックドバイトをダブルワードに0拡張0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 0 0 0 1modxmmregr/m
PMOVZXBQxmmreg2,xmmreg1パックドバイトをダブルワードに0拡張0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 0 0 1 01 1xmmreg1xmmreg2
PMOVZXBQr/m,xmmregパックドバイトをクワッドワードに0拡張0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 0 0 1 0modxmmregr/m
PMOVZXBWxmmreg2,xmmreg1パックドバイトをワードに0拡張0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 0 0 0 01 1xmmreg1xmmreg2
PMOVZXBWr/m,xmmregパックドバイトをワードに0拡張0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 0 0 0 0modxmmregr/m
PMOVZXWDxmmreg2,xmmreg1パックドワードをダブルワードに0拡張0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 0 0 1 11 1xmmreg1xmmreg2
PMOVZXWDr/m,xmmregパックドワードをダブルワードに0拡張0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 0 0 1 1modxmmregr/m
PMOVZXWQxmmreg2,xmmreg1パックドワードをクワッドワードに0拡張0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 0 1 0 01 1xmmreg1xmmreg2
PMOVZXWQr/m,xmmregパックドワードをクワッドワードに0拡張0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 0 1 0 0modxmmregr/m
PMOVZXDQxmmreg2,xmmreg1パックドダブルワードをクワッドワードに0拡張0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 0 1 0 11 1xmmreg1xmmreg2
PMOVZXDQ r/m,xmmregパックドダブルワードをクワッドワードに0拡張0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 0 1 0 1modxmmregr/m
PMULDQxmmreg2,xmmreg1一つ置きのパックドダブルワードの乗算0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 0 1 0 0 01 1xmmreg1xmmreg2
PMULDQr/m,xmmreg一つ置きのパックドダブルワードの乗算0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 0 1 0 0 0modxmmregr/m
PMULLDxmmreg2,xmmreg1パックドダブルワードの乗算0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 1 0 0 0 0 0 01 1xmmreg1xmmreg2
PMULLDr/m,xmmregパックドダブルワードの乗算0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 1 0 0 0 0 0 0modxmmregr/m
PTESTxmmreg2,xmmreg1パックドクワッドワードのANDの結果をZFとCFに反映0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 1 0 1 1 11 1xmmreg1xmmreg2
PTESTr/m,xmmreg パックドクワッドワードのANDの結果をZFとCFに反映0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 0 1 0 1 1 1modxmmregr/m
ROUNDPDxmmreg2: imm8,xmmreg1 倍精度小数点を整数に丸める0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 0 1 0 0 11 1xmmreg1xmmreg2
ROUNDPDr/m,xmmreg,imm8倍精度小数点を整数に丸める0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 0 1 0 0 1modxmmregr/m
ROUNDPSxmmreg2,xmmreg1,imm8単精度小数点を整数に丸める0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 0 1 0 0 01 1xmmreg1xmmreg2
ROUNDPSr/m,xmmreg,imm8単精度小数点を整数に丸める0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 0 1 0 0 0modxmmregr/m
ROUNDSDxmmreg2,xmmreg1,imm8倍精度浮動小数点を整数に丸める0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 0 1 0 1 11 1xmmreg1xmmreg2
ROUNDSDr/m,xmmreg,imm8倍精度浮動小数点を整数に丸める0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 0 1 0 1 1modxmmregr/m
ROUNDSSxmmreg2,xmmreg1,imm8単精度浮動小数点を整数に丸める0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 0 1 0 1 01 1xmmreg1xmmreg2
ROUNDSSr/m,xmmreg,imm8単精度浮動小数点を整数に丸める0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 0 0 0 1 0 1 0modxmmregr/m

Intel Core i7

Nehalem

2008年、Intelから発表
45nmプロセス
メモリーコントローラー内蔵
Intel(R) Core(TM) i7 CPU 870 @ 2.93GHzの例
クワッドコア
L1 inst 4way 32k*4 line size 64byte
L1 data 4way 32k*4 line size 64byte
L2 8way 256k*4 line size 64byte
L3 16way 8Mbyte line size64byte
SSE4.2を追加
SSE4.2
instop 76543210 765432107654321076543210 76543210
CRC32reg2,reg1CRC-32C0 0 0 0 1 1 1 10 0 1 1 1 0 0 01 1 1 1 0 0 0w1 1reg1reg2
CRC32reg,r/mCRC-32C0 0 0 0 1 1 1 10 0 1 1 1 0 0 01 1 1 1 0 0 0wmodregr/m
CRC32reg,bytereg2CRC-32C0 0 0 0 1 1 1 10 0 1 1 1 0 0 01 1 1 1 0 0 0 01 1reg1bytereg2
CRC32reg,r/mCRC-32C0 0 0 0 1 1 1 10 0 1 1 1 0 0 01 1 1 1 0 0 0 0modregr/m
CRC32qwreg2,qwreg1CRC-32C0 0 0 0 1 1 1 10 0 1 1 1 0 0 01 1 1 1 0 0 0 01 1qwreg1qwreg2
CRC32qwreg,r/mCRC-32C0 0 0 0 1 1 1 10 0 1 1 1 0 0 01 1 1 1 0 0 0 0modqwregr/m
PCMPESTRIxmmreg2: imm8,xmmreg1 パックド比較、インデックスの生成0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 1 1 0 0 0 0 11 1xmmreg1xmmreg2
PCMPESTRIr/m,xmmreg パックド比較、インデックスの生成0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 1 1 0 0 0 0 1modxmmregr/m
PCMPESTRMxmmreg2,xmmreg1,imm8パックド比較、マスクの生成0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 1 1 0 0 0 0 01 1xmmreg1xmmreg2
PCMPESTRMr/m,xmmregパックド比較、マスクの生成0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 1 1 0 0 0 0 0modxmmregr/m
PCMPISTRIxmmreg2,xmmreg1,imm8パックド比較、インデックスの生成0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 1 1 0 0 0 1 11 1xmmreg1xmmreg2
PCMPISTRIr/m,xmmregパックド比較、インデックスの生成0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 1 1 0 0 0 1 1modxmmregr/m
PCMPISTRMxmmreg2,xmmreg1,imm8パックド比較、マスクの生成0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 1 1 0 0 0 1 01 1xmmreg1xmmreg2
PCMPISTRMr/m,xmmregパックド比較、マスクの生成0 0 0 0 1 1 1 10 0 1 1 1 0 1 00 1 1 0 0 0 1 0modxmmregr/m
PCMPGTQxmmreg2,xmmreg1パックドクワッドワード比較 Greater Than0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 0 1 1 11 1xmmreg1xmmreg2
PCMPGTQr/m,xmmregパックドクワッドワード比較 Greater Than0 0 0 0 1 1 1 10 0 1 1 1 0 0 00 0 1 1 0 1 1 1modxmmregr/m
POPCNTreg2,reg1ビットが1の数0 0 0 0 1 1 1 11 0 1 1 1 0 0 01 1reg1reg2
POPCNTr/m,reg1ビットが1の数0 0 0 0 1 1 1 11 0 1 1 1 0 0 0modreg1r/m
POPCNTreg2,reg1ビットが1の数0 0 0 0 1 1 1 11 0 1 1 1 0 0 01 1reg1reg2
POPCNTr/m,reg1ビットが1の数0 0 0 0 1 1 1 11 0 1 1 1 0 0 0modreg1r/m

8087

特徴

8086のための数値演算プロセッサとして1980年に発表。
内部は80bit長の拡張倍精度浮動小数点をサポート
8本のスタック形式のレジスタスタックをもつ。
8086と同じ40ピンDIPでありピン配置も基本的には同じ。
フラグの転送は8086に転送して条件分岐を実行する。
FSTSW AX AX←SW
SAHF flags←ah
浮動小数点値比較におけるx87FPU条件コードの設定
Status Word
C3C2C0
ST(0)>ソース000
ST(0)<ソース001
ST(0)=ソース100
使用できるデーター形式

拡張倍精度浮動小数点(real 80bit)

倍精度浮動小数点(real 64bit)

単精度浮動小数点(real 32bit)

レジスタ

8087
79786463150
R7S指数仮数
R6S指数仮数
R5S指数仮数
R4S指数仮数
R3S指数仮数
R2S指数仮数
R1S指数仮数
R0S指数仮数
Status Word
Tag Word
Control Word
Status Word内のTOPがST(0)のレジスタ(R7~R0)を表す。
スタックは下に向かって伸びる。
TOPが4の場合以下の様になる。
ST(3)=R7
ST(2)=R6
ST(1)=R5
ST(0)=R4

Status Word

Status Word
1514131211109876543210
BC3TOPC2C1C0ESSFPEUEOEZEDEIE

B

FPUビジー
C3,C2,C1,C0
条件コード C2:FPREM 剰余計算が未完了

TOP

スタックポイントのトップ

ES

エラー・サマリ・ステータス

SF

スタックフォルト

PE

精度

UE

アンダーフロー

OE

オーバーフロー

ZE

ゼロによる除算

DE

デノーマライズド・オペランド

IE

無効な動作
Status Word
8087141098
C3C2C1C0
x86620
ZFPFCF

Tag Word

Tag Word
1514131211109876543210
TAG(7)TAG(6)TAG(5)TAG(4)TAG(3)TAG(2)TAG(1)TAG(0)
Tag Value
codexx
00有効
01ゼロ
10特殊:無効(NaN,サポートされない),∞,デノーマル型
11

Control Word

Control Word
1514131211109876543210
xxxICRCPCMXPMUMOMZMDMIM

IC

無限制御

RC

丸め制御

PC

精度制御
PC
code精度
00単精度(24bit*)
01予約
10倍精度(53bit*)
11拡張精度(64bit*)
*仮数部

PM

例外マスク・精度

UM

例外マスク・アンダーフロー

OM

例外マスク・オーバーフロー

ZM

例外マスク・ゼロによる除算

DM

例外マスク・デノーマル・オペランド

IM

例外マスク・無効な動作

OF オーバーフローフラグ

命令一覧

8087
instop 76543210 76543210
fldr/m --TOP,ST(0)←r/m(real 32bit) 1 1 0 1 10 01 mod0 0 0r/m
fld/fildr/m --TOP,ST(0)←r/m(int 32bit) 1 1 0 1 10 11 mod0 0 0r/m
fldr/m --TOP,ST(0)←r/m(real 64bit) 1 1 0 1 11 01 mod0 0 0r/m
fld/fildr/m --TOP,ST(0)←r/m(int 16bit) 1 1 0 1 11 11 mod0 0 0r/m
fld/fildr/m --TOP,ST(0)←r/m(int 64bit) 1 1 0 1 11 1 1 mod1 0 1r/m
fldr/m --TOP,ST(0)←r/m(real 80bit) 1 1 0 1 10 1 1 mod1 0 1r/m
fld/fbldr/m --TOP,ST(0)←r/m(BCD 80bit) 1 1 0 1 11 1 1 mod1 0 0r/m
fldST(i) --TOP,ST(0)←ST(i) 1 1 0 1 10 0 1 1 1 0 0 0i
fstr/m r/m←ST(0)(real 32bit) 1 1 0 1 10 01 mod0 1 0r/m
fst/fistr/m r/m←ST(0)(int 32bit) 1 1 0 1 10 11 mod0 1 0r/m
fstr/m r/m←ST(0)(real 64bit) 1 1 0 1 11 01 mod0 1 0r/m
fst/fistr/m r/m←ST(0)(int 16bit) 1 1 0 1 11 11 mod0 1 0r/m
fstST(i) ST(i)←ST(0) 1 1 0 1 11 0 1 1 1 0 1 0i
fstpr/m r/m←ST(0)(real 32bit),++TOP 1 1 0 1 10 01 mod0 1 1r/m
fstpr/m r/m←ST(0)(int 32bit),++TOP 1 1 0 1 10 11 mod0 1 1r/m
fstpr/m r/m←ST(0)(real 64bit),++TOP 1 1 0 1 11 01 mod0 1 1r/m
fstpr/m r/m←ST(0)(int 16bit),++TOP 1 1 0 1 11 11 mod0 1 1r/m
fstpr/m r/m←ST(0)(int 64bit),++TOP 1 1 0 1 11 1 1 mod0 1 1r/m
fstpr/m r/m←ST(0)(real 80bit),++TOP 1 1 0 1 10 1 1 mod1 1 1r/m
fstp/fbstpr/m r/m←ST(0)(BCD 80bit),++TOP 1 1 0 1 11 1 1 mod1 1 0r/m
fstpST(i) ST(i)←ST(0),++TOP 1 1 0 1 11 0 1 1 1 0 1 1i
fxchST(i) ST(0)⇄ST(i) 1 1 0 1 10 0 1 1 1 0 0 1i
fcomr/m r/m to ST(0)(real 32bit) 1 1 0 1 10 00 mod0 1 0r/m
fcom/ficomr/m r/m to ST(0)(int 32bit) 1 1 0 1 10 10 mod0 1 0r/m
fcomr/m r/m to ST(0)(real 64bit) 1 1 0 1 11 00 mod0 1 0r/m
fcom/ficomr/m r/m to ST(0)(int 16bit) 1 1 0 1 11 10 mod0 1 0r/m
fcomST(i) ST(i) to ST(0) 1 1 0 1 10 0 0 1 1 0 1 0i
fcompr/m r/m to ST(0)(real 32bit),++TOP 1 1 0 1 10 00 mod0 1 1r/m
fcomp/ficompr/m r/m to ST(0)(int 32bit),++TOP 1 1 0 1 10 10 mod0 1 1r/m
fcompr/m r/m to ST(0)(real 64bit),++TOP 1 1 0 1 11 00 mod0 1 1r/m
fcomp/ficompr/m r/m to ST(0)(int 16bit),++TOP 1 1 0 1 11 10 mod0 1 1r/m
fcompST(i) ST(i) to ST(0),++TOP 1 1 0 1 10 0 0 1 1 0 1 1i
fcompp ST(1) to ST(0),++TOP,++TOP 1 1 0 1 11 1 0 1 1 0 1 1 0 0 1
ftst ST(0)を0と比較 1 1 0 1 10 0 1 1 1 1 0 0 1 0 0
fxam ST(0)の値によりStatus Wordを設定 1 1 0 1 10 0 1 1 1 1 0 0 1 0 1
fldz--TOP,ST(0)←+0.0 1 1 0 1 10 0 1 1 1 1 0 1 1 1 0
fld1--TOP,ST(0)←+1.0 1 1 0 1 10 0 1 1 1 1 0 1 0 0 0
fldpi --TOP,ST(0)←π 1 1 0 1 10 0 1 1 1 1 0 1 0 1 1
fldl2t--TOP,ST(0)←log210 1 1 0 1 10 0 1 1 1 1 0 1 0 0 1
fldl2e--TOP,ST(0)←log2e 1 1 0 1 10 0 1 1 1 1 0 1 0 1 0
fldlg2--TOP,ST(0)←log102 1 1 0 1 10 0 1 1 1 1 0 1 1 0 0
fldln2--TOP,ST(0)←loge2 1 1 0 1 10 0 1 1 1 1 0 1 1 0 1
faddr/m ST(0)←ST(0)+r/m(real 32bit) 1 1 0 1 10 00 mod0 0 0r/m
faddr/m ST(0)←ST(0)+r/m(int 32bit) 1 1 0 1 10 10 mod0 0 0r/m
faddr/m ST(0)←ST(0)+r/m(real 64bit) 1 1 0 1 11 00 mod0 0 0r/m
faddr/m ST(0)←ST(0)+r/m(int 16bit) 1 1 0 1 11 10 mod0 0 0r/m
faddST(0),ST(i) ST(0)←ST(i)+ST(0) 1 1 0 1 1000 1 1 0 0 0i
faddST(i),ST(0) ST(i)←ST(0)+ST(i) 1 1 0 1 1100 1 1 0 0 0i
faddpST(i),ST(0) ST(i)←ST(i)+ST(0),++TOP 1 1 0 1 1110 1 1 0 0 0i
fsubr/m ST(0)←ST(0)-r/m(real 32bit) 1 1 0 1 10 00 mod1 00r/m
fsubr/m ST(0)←ST(0)-r/m(int 32bit) 1 1 0 1 10 10 mod1 00r/m
fsubr/m ST(0)←ST(0)-r/m(real 64bit) 1 1 0 1 11 00 mod1 00r/m
fsubr/m ST(0)←ST(0)-r/m(int 16bit) 1 1 0 1 11 10 mod1 00r/m
fsubST(0),ST(i) ST(0)←ST(0)-ST(i) 1 1 0 1 1000 1 1 1 00i
fsubST(i),ST(0) ST(i)←ST(i)-ST(0) 1 1 0 1 1100 1 1 1 00i
fsubpST(i),ST(0) ST(i)←ST(i)-ST(0),++TOP 1 1 0 1 1110 1 1 1 00i
fsubrr/m ST(0)←r/m-ST(0)(real 32bit) 1 1 0 1 10 00 mod1 01r/m
fsubrr/m ST(0)←r/m-ST(0)(int 32bit) 1 1 0 1 10 10 mod1 01r/m
fsubrr/m ST(0)←r/m-ST(0)(real 64bit) 1 1 0 1 11 00 mod1 01r/m
fsubrr/m ST(0)←r/m-ST(0)(int 16bit) 1 1 0 1 11 10 mod1 01r/m
fsubrST(0),ST(i) ST(0)←ST(i)-ST(0) 1 1 0 1 1000 1 1 1 01i
fsubrST(i),ST(0) ST(i)←ST(0)-ST(i) 1 1 0 1 1100 1 1 1 01i
fsubrpST(i),ST(0) ST(i)←ST(0)-ST(i),++TOP 1 1 0 1 1110 1 1 1 01i
fmulr/m ST(0)←ST(0)*r/m(real 32bit) 1 1 0 1 10 00 mod0 0 1r/m
fmulr/m ST(0)←ST(0)*r/m(int 32bit) 1 1 0 1 10 10 mod0 0 1r/m
fmulr/m ST(0)←ST(0)*r/m(real 64bit) 1 1 0 1 11 00 mod0 0 1r/m
fmulr/m ST(0)←ST(0)*r/m(int 16bit) 1 1 0 1 11 10 mod0 0 1r/m
fmulST(0),ST(i) ST(0)←ST(0)*ST(i) 1 1 0 1 1000 1 1 0 0 1i
fmulST(i),ST(0) ST(i)←ST(i)*ST(0) 1 1 0 1 1100 1 1 0 0 1i
fmulpST(i),ST(0) ST(i)←ST(i)*ST(0),++TOP 1 1 0 1 1110 1 1 0 0 1i
fdivr/m ST(0)←ST(0)/r/m(real 32bit) 1 1 0 1 10 00 mod1 10r/m
fdivr/m ST(0)←ST(0)/r/m(int 32bit) 1 1 0 1 10 10 mod1 10r/m
fdivr/m ST(0)←ST(0)/r/m(real 64bit) 1 1 0 1 11 00 mod1 10r/m
fdivr/m ST(0)←ST(0)/r/m(int 16bit) 1 1 0 1 11 10 mod1 10r/m
fdivST(0),ST(i) ST(0)←ST(0)/ST(i) 1 1 0 1 1000 1 1 1 10i
fdivST(i),ST(0) ST(i)←ST(i)/ST(0) 1 1 0 1 1100 1 1 1 11i
fdivpST(i),ST(0) ST(i)←ST(i)/ST(0),++TOP 1 1 0 1 1110 1 1 1 11i
fdivrr/m ST(0)←r/m /ST(0)(real 32bit) 1 1 0 1 10 00 mod1 11r/m
fdivrr/m ST(0)←r/m /ST(0)(int 32bit) 1 1 0 1 10 10 mod1 11r/m
fdivrr/m ST(0)←r/m /ST(0)(real 64bit) 1 1 0 1 11 00 mod1 11r/m
fdivrr/m ST(0)←r/m /ST(0)(int 16bit) 1 1 0 1 11 10 mod1 11r/m
fdivrST(0),ST(i) ST(0)←ST(i)/ST(0) 1 1 0 1 1000 1 1 1 11r/m
fdivrST(i),ST(0) ST(i)←ST(0)/ST(i) 1 1 0 1 1100 1 1 1 10r/m
fdivrpST(i),ST(0) ST(i)←ST(0)/ST(i),++TOP 1 1 0 1 1110 1 1 1 10r/m
fsqrt √(ST(0)) 1 1 0 1 10 0 1 1 1 1 1 1 0 1 0
fscale ST(0)をST(1)でスケーリング 1 1 0 1 10 0 1 1 1 1 1 1 1 0 1
fprem ST(0)←ST(0)%ST(1) 1 1 0 1 10 0 1 1 1 1 1 1 0 0 0
frndint ST(0)←round(ST(0)) 1 1 0 1 10 0 1 1 1 1 1 1 1 0 0
fxtract ST(0)←ST(0)の指数, ST(0)←ST(0)の仮数 1 1 0 1 10 0 1 1 1 1 1 0 1 0 0
fabs ST(0)←|ST(0)| 1 1 0 1 10 0 1 1 1 1 0 0 0 0 1
fchs ST(0)←-ST(0) 1 1 0 1 10 0 1 1 1 1 0 0 0 0 0
fptan ST(0)←tan(ST(0)),--TOP,ST(0)←1.0 1 1 0 1 10 0 1 1 1 1 1 0 0 1 0
fpatan ST(0)←tan-1(ST(1)/ST(0)) ++TOP 1 1 0 1 10 0 1 1 1 1 1 0 0 1 1
f2xm1 ST(0)←2ST(0)-1 1 1 0 1 10 0 1 1 1 1 1 0 0 0 0
fyl2x ST(1)←ST(1)*log2ST(0) ++TOP 1 1 0 1 10 0 1 1 1 1 1 0 0 0 1
fyl2xp1 ST(1)←ST(1)*log2(ST(0)+1.0) ++TOP 1 1 0 1 10 0 1 1 1 1 1 1 0 0 1
finit Initialize Floating-Point Unit 1 1 0 1 10 1 1 1 1 1 0 0 0 1 1
fpei Enable Interrupts 1 1 0 1 10 1 1 1 1 1 0 0 0 0 0
fdisi Disable Interrupts 1 1 0 1 10 1 1 1 1 1 0 0 0 0 1
fldcwr/m FPUCounrolWord←r/m 1 1 0 1 10 0 1 mod1 0 1r/m
fstcwr/m r/m←FPUCounrolWord 1 1 0 1 10 0 1 mod1 1 1r/m
fstswr/m r/m←FPUStatusWord 1 1 0 1 11 0 1 mod1 1 1r/m
fclex Clear Exceptions 1 1 0 1 10 1 1 1 1 1 0 0 0 1 0
fstenvr/m Store x87 FPU Environment 1 1 0 1 10 0 1 mod1 1 0r/m
fldenvr/m Load x87 FPU Environment 1 1 0 1 10 0 1 mod1 0 0r/m
fsaver/m Store x87 FPU State 1 1 0 1 11 0 1 mod1 1 0r/m
frstor Restore x87 FPU State 1 1 0 1 11 0 1 mod1 0 0r/m
fincstp ++TOP 1 1 0 1 10 0 1 1 1 1 1 0 1 1 1
fdecstp --TOP 1 1 0 1 10 0 1 1 1 1 1 0 1 1 0
ffree ST(i)を空にする。(tagi=11) 1 1 0 1 11 0 1 1 1 0 0 0i
fnop No Operation 1 1 0 1 10 0 1 1 1 0 1 0 0 0 0
fwait 1 0 0 1 1 0 1 1

80287

80286用の数値演算プロセッサとして発表される。
80286とはIO形式で接続される。演算速度は8087ど同等であるが、IO形式なので遅い。
40ピン DIP
80287
instop 76543210 76543210
fsetmp Set protected mode 80287 80387以降はfnop 1 1 0 1 11 1 1 1 1 1 0 0 1 0 0
fstswAX AX←FPUStatusWord 1 1 0 1 11 1 1 1 1 1 0 0 0 0 0

80387

80386用の数値演算プロセッサとして発表される。
sin,cos等の命令が追加される。
instop 76543210 76543210
fucomST(i) ST(0)をST(i)と比較 1 1 0 1 11 0 1 1 1 1 0 0i
fucompST(i) ST(0)をST(i)と比較,--TOP 1 1 0 1 10 0 1 1 1 1 0 0i
fucomppST(i) ST(0)をST(i)と比較,--TOP,--TOP 1 1 0 1 10 1 0 1 1 1 0 1 0 0 1
fprem1 ST(0)←ST(0) % ST(1) IEEE剰余 1 1 0 1 10 0 1 1 1 1 1 0 1 0 1
fcosr/m ST(0)←cos(ST(0)) 1 1 0 1 10 0 1 1 1 1 1 1 1 1 1
fsinr/m ST(0)←sin(ST(0)) 1 1 0 1 10 0 1 1 1 1 1 1 1 1 0
fsincosr/m ST(0)←sin(ST'(0)),--TOP,ST(0)←cos(ST'(0)) 1 1 0 1 10 0 1 1 1 1 1 1 0 1 1

命令エンコード

Legacy PrefixesPrefixesOpcodeModR/MSIBDisplacementImmediate
0~4byte1~3byte0~1byte0~1byte0,1,2,4byte0,1,2,4byte
最大15バイト

Prefixes

Legacy prefix

Prefix group 1
0xF0: LOCK prefix
0xF2: REPNE/REPNZ prefix
0xF3: REP or REPE/REPZ prefix
Prefix group 2
0x2E: CS segment override
0x36: SS segment override
0x3E: DS segment override
0x26: ES segment override
0x64: FS segment override
0x65: GS segment override
0x2E: Branch not taken
0x3E: Branch taken
Prefix group 3
0x66: Operand-size override prefix
Prefix group 4
0x67: Address-size override prefix

REX prefix

64bit化により導入
ModR/Mフィールドのr/m、reg、SIBフィールドのBase、Indexの上位に1bit追加することにより追加レジスタを指定可能。
REX prefix
76543210
0100WRXB
W
1:64bit 0:32bit
R
MODRM reg field
X
SIB index field
B
MODRM.rm field or SIB Base field

VEX or XOP prefix

AVX導入時に追加
VEX or XOP prefix
765432107654321076543210
11000100 RXBmap selectW/EvvvvLpp
10001111 RXBmap selectW/EvvvvLpp
10000101 RvvvvtLppLpp
R
inverted MODRM.reg field
X
inverted SIB.index field
B
inverted MODRM.rm field ot the SIB field.The inverse of REX.B
map list
Specifies the opcode map to use
W/E
1:64bit 0:default
vvvv
追加オペランド XMM or YMM inverted
L
0:128bit 1:256bit
pp
pp
valueImplied mandatory prefix
00none
010x66
100xf3
110xf2

16bitデーターモード

reg(Register Field Encoding)
regW=0W=1
000ALAX
001CLCX
010DLDX
011BLCX
100AHSP
101CHBP
110DHSI
111BHDI

32bitデーターモード

reg(Register Field Encoding)
16bitモード32bitモード
regW=0W=1W=0W=1
000ALAXALAX
001CLCXCLCX
010DLDXDLDX
011BLCXBLCX
100AHSPAHSP
101CHBPCHBP
110DHSIDHSI
111BHDIBHDI

REX prefix使用時

reg(Register Field Encoding)
REX.XIndex8bit16bit32bit64bit80bitMMXXMMYMMsegControlDebug
0000AXALAXEAXRAXST0MMX0XMM0YMM0ESCR0DR0
0001CXCLCXECXRCXST1MMX1XMM1YMM1CSCR1DR1
0010DXDLDXEDXRDXST2MMX2XMM2YMM2SSCR2DR2
0011BXBLBXEBXRBXST3MMX3XMM3YMM3DSCR3DR3
0100SPSPLSPESPRSPST4MMX4XMM4YMM4FSCR4DR4
0101BPBPLBPEBPRBPST5MMX5XMM5YMM5GSCR5DR5
0110SISILSIESIRSIST6MMX6XMM6YMM6CR6DR6
0111DIDILDIEDIRDIST7MMX7XMM7YMM7CR7DR7
1000R8R8LR8WR8DR8MMX0XMM8YMM8ESCR8DR8
1001R9R9LR9WR9DR9MMX1XMM9YMM9CSCR9DR9
1010R10R10LR10WR10DR10MMX2XMM10YMM10SSCR10DR10
1011R11R11LR11WR11DR11MMX3XMM11YMM11DSCR11DR11
1100R12R12LR12WR12DR12MMX4XMM12YMM12FSCR12DR12
1101R13R13LR13WR13DR13MMX5XMM13YMM13GSCR13DR13
1110R14R14LR14WR14DR14MMX6XMM14YMM14CR14DR14
1111R15R15LR15WR15DR15MMX7XMM15YMM15CR15DR15

16bitアドレスモード

mod & r/m Field Encoding
mod
r/m0001101 1
W=0W=1
000[BX+SI][BX+SI+d8][BX+SI+d16]ALAX
001[BX+DI][BX+DI+d8][BX+DI+d16]CLCX
010[BP+SI][BP+SI+d8][BP+SI+d16]DLDX
011[BP+DI][BP+DI+d8][BP+DI+d16]BLCX
100[SI][SI+d8][SI+d16]AHSP
101[DI][DI+d8][DI+d16]CHBP
110d16[BP+d8][BP+d16]DHSI
111[BX][BX+d8][BX+d16]BHDI

32bitアドレスモード

76543210 76543210
MOD_RM_Field SIB_Field
modxxxr/m SSIndexBase
mod & r/m Field Encoding
mod
r/m00011011
16bit32bit
w=0w=1w=0w=1
000DS:[EAX]DS:[EAX+d8]DS:[EAX+d32]ALAXALEAX
001DS:[ECX]DS:[ECX+d8]DS:[ECX+d32]CLCXCLECX
010DS:[EDX]DS:[EDX+d8]DS:[EDX+d32]DLDXDLEDX
011DS:[EBX]DS:[EBX+d8]DS:[EBX+d32]BLCXBLECX
100s-i-b is presentAHSPAHESP
101DS:d32SS:[EBP+d8]SS:[EBP+d32]CHBPCHEBP
110DS:[ESI]DS:[ESI+d8]DS:[ESI+d32]DHSIDHESI
111DS:[EDI]DS:[EDI+d8]DS:[EDI+d32]BHDIBHEDI
S-i-b' byte present
Index
modbaseseg000001010011101110111
00000DS[EAX+EAX*SC][EAX+ECX*SC][EAX+EDX*SC][EAX+EBX*SC][EAX+EBP*SC][EAX+ESI*SC][EAX+EDI*SC]
00001DS[ECX+EAX*SC][ECX+ECX*SC][ECX+EDX*SC][ECX+EBX*SC][ECX+EBP*SC][ECX+ESI*SC][ECX+EDI*SC]
00010DS[EDX+EAX*SC][EDX+ECX*SC][EDX+EDX*SC][EDX+EBX*SC][EDX+EBP*SC][EDX+ESI*SC][EDX+EDI*SC]
00011DS[EBX+EAX*SC][EBX+ECX*SC][EBX+EDX*SC][EBX+EBX*SC][EBX+EBP*SC][EBX+ESI*SC][EBX+EDI*SC]
00100DS[ESP+EAX*SC][ESP+ECX*SC][ESP+EDX*SC][ESP+EBX*SC][ESP+EBP*SC][ESP+ESI*SC][ESP+EDI*SC]
00101DS[d32+EAX*SC][d32+ECX*SC][d32+EDX*SC][d32+EBX*SC][d32+EBP*SC][d32+ESI*SC][d32+EDI*SC]
00110DS[ESI+EAX*SC][ESI+ECX*SC][ESI+EDX*SC][ESI+EBX*SC][ESI+EBP*SC][ESI+ESI*SC][ESI+EDI*SC]
00111DS[EDI+EAX*SC][EDI+ECX*SC][EDI+EDX*SC][EDI+EBX*SC][EDI+EBP*SC][EDI+ESI*SC][EDI+EDI*SC]
01000DS[EAX+EAX*SC+d8][EAX+ECX*SC+d8][EAX+EDX*SC+d8][EAX+EBX*SC+d8][EAX+EBP*SC+d8][EAX+ESI*SC+d8][EAX+EDI*SC+d8]
01001DS[ECX+EAX*SC+d8][ECX+ECX*SC+d8][ECX+EDX*SC+d8][ECX+EBX*SC+d8][ECX+EBP*SC+d8][ECX+ESI*SC+d8][ECX+EDI*SC+d8]
01010DS[EDX+EAX*SC+d8][EDX+ECX*SC+d8][EDX+EDX*SC+d8][EDX+EBX*SC+d8][EDX+EBP*SC+d8][EDX+ESI*SC+d8][EDX+EDI*SC+d8]
01011DS[EBX+EAX*SC+d8][EBX+ECX*SC+d8][EBX+EDX*SC+d8][EBX+EBX*SC+d8][EBX+EBP*SC+d8][EBX+ESI*SC+d8][EBX+EDI*SC+d8]
01100DS[ESP+EAX*SC+d8][ESP+ECX*SC+d8][ESP+EDX*SC+d8][ESP+EBX*SC+d8][ESP+EBP*SC+d8][ESP+ESI*SC+d8][ESP+EDI*SC+d8]
01101SS[EBP+EAX*SC+d8][EBP+ECX*SC+d8][EBP+EDX*SC+d8][EBP+EBX*SC+d8][EBP+EBP*SC+d8][EBP+ESI*SC+d8][EBP+EDI*SC+d8]
01110DS[ESI+EAX*SC+d8][ESI+ECX*SC+d8][ESI+EDX*SC+d8][ESI+EBX*SC+d8][ESI+EBP*SC+d8][ESI+ESI*SC+d8][ESI+EDI*SC+d8]
01111DS[EDI+EAX*SC+d8][EDI+ECX*SC+d8][EDI+EDX*SC+d8][EDI+EBX*SC+d8][EDI+EBP*SC+d8][EDI+ESI*SC+d8][EDI+EDI*SC+d8]
10000DS[EAX+EAX*SC+d32][EAX+ECX*SC+d32][EAX+EDX*SC+d32][EAX+EBX*SC+d32][EAX+EBP*SC+d32][EAX+ESI*SC+d32][EAX+EDI*SC+d32]
10001DS[ECX+EAX*SC+d32][ECX+ECX*SC+d32][ECX+EDX*SC+d32][ECX+EBX*SC+d32][ECX+EBP*SC+d32][ECX+ESI*SC+d32][ECX+EDI*SC+d32]
10010DS[EDX+EAX*SC+d32][EDX+ECX*SC+d32][EDX+EDX*SC+d32][EDX+EBX*SC+d32][EDX+EBP*SC+d32][EDX+ESI*SC+d32][EDX+EDI*SC+d32]
10011DS[EBX+EAX*SC+d32][EBX+ECX*SC+d32][EBX+EDX*SC+d32][EBX+EBX*SC+d32][EBX+EBP*SC+d32][EBX+ESI*SC+d32][EBX+EDI*SC+d32]
10100DS[ESP+EAX*SC+d32][ESP+ECX*SC+d32][ESP+EDX*SC+d32][ESP+EBX*SC+d32][ESP+EBP*SC+d32][ESP+ESI*SC+d32][ESP+EDI*SC+d32]
10101SS[EBP+EAX*SC+d32][EBP+ECX*SC+d32][EBP+EDX*SC+d32][EBP+EBX*SC+d32][EBP+EBP*SC+d32][EBP+ESI*SC+d32][EBP+EDI*SC+d32]
10110DS[ESI+EAX*SC+d32][ESI+ECX*SC+d32][ESI+EDX*SC+d32][ESI+EBX*SC+d32][ESI+EBP*SC+d32][ESI+ESI*SC+d32][ESI+EDI*SC+d32]
10111DS[EDI+EAX*SC+d32][EDI+ECX*SC+d32][EDI+EDX*SC+d32][EDI+EBX*SC+d32][EDI+EBP*SC+d32][EDI+ESI*SC+d32][EDI+EDI*SC+d32]
Scale Factor
ssScale(SC)
001
012
104
118

32/64bitアドレスモード

mod & r/m Field Encoding
REX.Br/mmod
00011011
0000[AX][AX+d8][AX+d32]AX
001[CX][CX+d8][CX+d32]CX
010[DX][DX+d8][DX+d32]DX
011[BX][BX+d8][BX+d32]BX
100SIB[SIB+d8][SIB+d32]SP
101[RIP/EIP+d32][BP+d8][BP+d32]BP
110[SI][SI+d8][SI+d32]SI
111[DI][DI+d8][DI+d32]DI
1000[R8][R8+d8][R8+d32]R8
001[R9][R9+d8][R9+d32]R9
010[R10][R10+d8][R10+d32]R10
011[R11][R11+d8][R11+d32]R11
100SIB[SIB+d8][SIB+d32]R12
101[R13][R13+d8][R13+d32]R13
110[R14][R14+d8][R14+d32]R14
111[R15][R15+d8][R15+d32]R15
S-i-b' byte present(mod=00)
REX.B
01
Base
000001010011100101110111000001010011100101110111
REX.XIndexAXCXDXBXSPBPSIDIR8R9R10R11R12R13R14R15
0000AX[AX+AX*SC][CX+AX*SC][DX+AX*SC][BX+AX*SC][SP+AX*SC][AX*SC+d32][SI+AX*SC][DI+AX*SC][R8+AX*SC][R9+AX*SC][R10+AX*SC][R11+AX*SC][R12+AX*SC][AX*SC+d32][AX*SC][AX*SC]
0001CX[AX+CX*SC][CX+CX*SC][DX+CX*SC][BX+CX*SC][SP+CX*SC][CX*SC+d32][SI+CX*SC][DI+CX*SC][R8+CX*SC][R9+CX*SC][R10+CX*SC][R11+CX*SC][R12+CX*SC][CX*SC+d32][CX*SC][CX*SC]
0010DX[AX+DX*SC][CX+DX*SC][DX+DX*SC][BX+DX*SC][SP+DX*SC][DX*SC+d32][SI+DX*SC][DI+DX*SC][R8+DX*SC][R9+DX*SC][R10+DX*SC][R11+DX*SC][R12+DX*SC][DX*SC+d32][DX*SC][DX*SC]
0011BX[AX+BX*SC][CX+BX*SC][DX+BX*SC][BX+BX*SC][SP+BX*SC][BX*SC+d32][SI+BX*SC][DI+BX*SC][R8+BX*SC][R9+BX*SC][R10+BX*SC][R11+BX*SC][R12+BX*SC][BX*SC+d32][BX*SC][BX*SC]
0100SP[AX][CX][DX][BX][d32][BP][SI][DI][R8][R9][R10][R11][R12][d32][R14][R15]
0101BP[AX+BP*SC][CX+BP*SC][DX+BP*SC][BX+BP*SC][SP+BP*SC][BP*SC+d32][SI+BP*SC][DI+BP*SC][R8+BP*SC][R9+BP*SC][R10+BP*SC][R11+BP*SC][R12+BP*SC][BP*SC+d32][BP*SC][BP*SC]
0110SI[AX+SI*SC][CX+SI*SC][DX+SI*SC][BX+SI*SC][SP+SI*SC][SI*SC+d32][SI+SI*SC][DI+SI*SC][R8+SI*SC][R9+SI*SC][R10+SI*SC][R11+SI*SC][R12+SI*SC][SI*SC+d32][SI*SC][SI*SC]
0111DI[AX+DI*SC][CX+DI*SC][DX+DI*SC][BX+DI*SC][SP+DI*SC][DI*SC+d32][SI+DI*SC][DI+DI*SC][R8+DI*SC][R9+DI*SC][R10+DI*SC][R11+DI*SC][R12+DI*SC][DI*SC+d32][DI*SC][DI*SC]
1000R8[AX+R8*SC][CX+R8*SC][DX+R8*SC][BX+R8*SC][SP+R8*SC][R8*SC+d32][SI+R8*SC][DI+R8*SC][R8+R8*SC][R9+R8*SC][R10+R8*SC][R11+R8*SC][R12+R8*SC][R8*SC+d32][R8*SC][R8*SC]
1001R9[AX+R9*SC][CX+R9*SC][DX+R9*SC][BX+R9*SC][SP+R9*SC][R9*SC+d32][SI+R9*SC][DI+R9*SC][R8+R9*SC][R9+R9*SC][R10+R9*SC][R11+R9*SC][R12+R9*SC][R9*SC+d32][R9*SC][R9*SC]
1010R10[AX+R10*SC][CX+R10*SC][DX+R10*SC][BX+R10*SC][SP+R10*SC][R10*SC+d32][SI+R10*SC][DI+R10*SC][R8+R10*SC][R9+R10*SC][R10+R10*SC][R11+R10*SC][R12+R10*SC][R10*SC+d32][R10*SC][R10*SC]
1011R11[AX+R11*SC][CX+R11*SC][DX+R11*SC][BX+R11*SC][SP+R11*SC][R11*SC+d32][SI+R11*SC][DI+R11*SC][R8+R11*SC][R9+R11*SC][R10+R11*SC][R11+R11*SC][R12+R11*SC][R11*SC+d32][R11*SC][R11*SC]
1100R12[AX+R12*SC][CX+R12*SC][DX+R12*SC][BX+R12*SC][SP+R12*SC][R12*SC+d32][SI+R12*SC][DI+R12*SC][R8+R12*SC][R9+R12*SC][R10+R12*SC][R11+R12*SC][R12+R12*SC][R12*SC+d32][R12*SC][R12*SC]
1101R13[AX+R13*SC][CX+R13*SC][DX+R13*SC][BX+R13*SC][SP+R13*SC][R13*SC+d32][SI+R13*SC][DI+R13*SC][R8+R13*SC][R9+R13*SC][R10+R13*SC][R11+R13*SC][R12+R13*SC][R13*SC+d32][R13*SC][R13*SC]
1110R14[AX+R14*SC][CX+R14*SC][DX+R14*SC][BX+R14*SC][SP+R14*SC][R14*SC+d32][SI+R14*SC][DI+R14*SC][R8+R14*SC][R9+R14*SC][R10+R14*SC][R11+R14*SC][R12+R14*SC][R14*SC+d32][R14*SC][R14*SC]
1111R15[AX+R15*SC][CX+R15*SC][DX+R15*SC][BX+R15*SC][SP+R15*SC][R15*SC+d32][SI+R15*SC][DI+R15*SC][R8+R15*SC][R9+R15*SC][R10+R15*SC][R11+R15*SC][R12+R15*SC][R15*SC+d32][R15*SC][R15*SC]
S-i-b' byte present(mod=01)
REX.B
01
Base
000001010011100101110111000001010011100101110111
REX.XIndexAXCXDXBXSPBPSIDIR8R9R10R11R12R13R14R15
0000AX[AX+AX*SC+d8][CX+AX*SC+d8][DX+AX*SC+d8][BX+AX*SC+d8][SP+AX*SC+d8][BP+AX*SC+d8][SI+AX*SC+d8][DI+AX*SC+d8][R8+AX*SC+d8][R9+AX*SC+d8][R10+AX*SC+d8][R11+AX*SC+d8][R12+AX*SC+d8][R13+AX*SC+d8][R14+AX*SC+d8][R15+AX*SC+d8]
0001CX[AX+CX*SC+d8][CX+CX*SC+d8][DX+CX*SC+d8][BX+CX*SC+d8][SP+CX*SC+d8][BP+CX*SC+d8][SI+CX*SC+d8][DI+CX*SC+d8][R8+CX*SC+d8][R9+CX*SC+d8][R10+CX*SC+d8][R11+CX*SC+d8][R12+CX*SC+d8][R13+CX*SC+d8][R14+CX*SC+d8][R15+CX*SC+d8]
0010DX[AX+DX*SC+d8][CX+DX*SC+d8][DX+DX*SC+d8][BX+DX*SC+d8][SP+DX*SC+d8][BP+DX*SC+d8][SI+DX*SC+d8][DI+DX*SC+d8][R8+DX*SC+d8][R9+DX*SC+d8][R10+DX*SC+d8][R11+DX*SC+d8][R12+DX*SC+d8][R13+DX*SC+d8][R14+DX*SC+d8][R15+DX*SC+d8]
0011BX[AX+BX*SC+d8][CX+BX*SC+d8][DX+BX*SC+d8][BX+BX*SC+d8][SP+BX*SC+d8][BP+BX*SC+d8][SI+BX*SC+d8][DI+BX*SC+d8][R8+BX*SC+d8][R9+BX*SC+d8][R10+BX*SC+d8][R11+BX*SC+d8][R12+BX*SC+d8][R13+BX*SC+d8][R14+BX*SC+d8][R15+BX*SC+d8]
0100SP[AX;d8][CX;d8][DX;d8][BX;d8][SP;d8][BP;d8][SI;d8][DI;d8][R8;d8][R9;d8][R10;d8][R11;d8][R12;d8][R13;d8][R14;d8][R15;d8]
0101BP[AX+BP*SC+d8][CX+BP*SC+d8][DX+BP*SC+d8][BX+BP*SC+d8][SP+BP*SC+d8][BP+BP*SC+d8][SI+BP*SC+d8][DI+BP*SC+d8][R8+BP*SC+d8][R9+BP*SC+d8][R10+BP*SC+d8][R11+BP*SC+d8][R12+BP*SC+d8][R13+BP*SC+d8][R14+BP*SC+d8][R15+BP*SC+d8]
0110SI[AX+SI*SC+d8][CX+SI*SC+d8][DX+SI*SC+d8][BX+SI*SC+d8][SP+SI*SC+d8][BP+SI*SC+d8][SI+SI*SC+d8][DI+SI*SC+d8][R8+SI*SC+d8][R9+SI*SC+d8][R10+SI*SC+d8][R11+SI*SC+d8][R12+SI*SC+d8][R13+SI*SC+d8][R14+SI*SC+d8][R15+SI*SC+d8]
0111DI[AX+DI*SC+d8][CX+DI*SC+d8][DX+DI*SC+d8][BX+DI*SC+d8][SP+DI*SC+d8][BP+DI*SC+d8][SI+DI*SC+d8][DI+DI*SC+d8][R8+DI*SC+d8][R9+DI*SC+d8][R10+DI*SC+d8][R11+DI*SC+d8][R12+DI*SC+d8][R13+DI*SC+d8][R14+DI*SC+d8][R15+DI*SC+d8]
1000R8[AX+R8*SC+d8][CX+R8*SC+d8][DX+R8*SC+d8][BX+R8*SC+d8][SP+R8*SC+d8][BP+R8*SC+d8][SI+R8*SC+d8][DI+R8*SC+d8][R8+R8*SC+d8][R9+R8*SC+d8][R10+R8*SC+d8][R11+R8*SC+d8][R12+R8*SC+d8][R13+R8*SC+d8][R14+R8*SC+d8][R15+R8*SC+d8]
1001R9[AX+R9*SC+d8][CX+R9*SC+d8][DX+R9*SC+d8][BX+R9*SC+d8][SP+R9*SC+d8][BP+R9*SC+d8][SI+R9*SC+d8][DI+R9*SC+d8][R8+R9*SC+d8][R9+R9*SC+d8][R10+R9*SC+d8][R11+R9*SC+d8][R12+R9*SC+d8][R13+R9*SC+d8][R14+R9*SC+d8][R15+R9*SC+d8]
1010R10[AX+R10*SC+d8][CX+R10*SC+d8][DX+R10*SC+d8][BX+R10*SC+d8][SP+R10*SC+d8][BP+R10*SC+d8][SI+R10*SC+d8][DI+R10*SC+d8][R8+R10*SC+d8][R9+R10*SC+d8][R10+R10*SC+d8][R11+R10*SC+d8][R12+R10*SC+d8][R13+R10*SC+d8][R14+R10*SC+d8][R15+R10*SC+d8]
1011R11[AX+R11*SC+d8][CX+R11*SC+d8][DX+R11*SC+d8][BX+R11*SC+d8][SP+R11*SC+d8][BP+R11*SC+d8][SI+R11*SC+d8][DI+R11*SC+d8][R8+R11*SC+d8][R9+R11*SC+d8][R10+R11*SC+d8][R11+R11*SC+d8][R12+R11*SC+d8][R13+R11*SC+d8][R14+R11*SC+d8][R15+R11*SC+d8]
1100R12[AX+R12*SC+d8][CX+R12*SC+d8][DX+R12*SC+d8][BX+R12*SC+d8][SP+R12*SC+d8][BP+R12*SC+d8][SI+R12*SC+d8][DI+R12*SC+d8][R8+R12*SC+d8][R9+R12*SC+d8][R10+R12*SC+d8][R11+R12*SC+d8][R12+R12*SC+d8][R13+R12*SC+d8][R14+R12*SC+d8][R15+R12*SC+d8]
1101R13[AX+R13*SC+d8][CX+R13*SC+d8][DX+R13*SC+d8][BX+R13*SC+d8][SP+R13*SC+d8][BP+R13*SC+d8][SI+R13*SC+d8][DI+R13*SC+d8][R8+R13*SC+d8][R9+R13*SC+d8][R10+R13*SC+d8][R11+R13*SC+d8][R12+R13*SC+d8][R13+R13*SC+d8][R14+R13*SC+d8][R15+R13*SC+d8]
1110R14[AX+R14*SC+d8][CX+R14*SC+d8][DX+R14*SC+d8][BX+R14*SC+d8][SP+R14*SC+d8][BP+R14*SC+d8][SI+R14*SC+d8][DI+R14*SC+d8][R8+R14*SC+d8][R9+R14*SC+d8][R10+R14*SC+d8][R11+R14*SC+d8][R12+R14*SC+d8][R13+R14*SC+d8][R14+R14*SC+d8][R15+R14*SC+d8]
1111R15[AX+R15*SC+d8][CX+R15*SC+d8][DX+R15*SC+d8][BX+R15*SC+d8][SP+R15*SC+d8][BP+R15*SC+d8][SI+R15*SC+d8][DI+R15*SC+d8][R8+R15*SC+d8][R9+R15*SC+d8][R10+R15*SC+d8][R11+R15*SC+d8][R12+R15*SC+d8][R13+R15*SC+d8][R14+R15*SC+d8][R15+R15*SC+d8]
S-i-b' byte present(mod=11)
REX.B
01
Base
000001010011100101110111000001010011100101110111
REX.XIndexAXCXDXBXSPBPSIDIR8R9R10R11R12R13R14R15
0000AX[AX+AX*SC+d32][CX+AX*SC+d32][DX+AX*SC+d32][BX+AX*SC+d32][SP+AX*SC+d32][BP+AX*SC+d32][SI+AX*SC+d32][DI+AX*SC+d32][R8+AX*SC+d32][R9+AX*SC+d32][R10+AX*SC+d32][R11+AX*SC+d32][R12+AX*SC+d32][R13+AX*SC+d32][R14+AX*SC+d32][R15+AX*SC+d32]
0001CX[AX+CX*SC+d32][CX+CX*SC+d32][DX+CX*SC+d32][BX+CX*SC+d32][SP+CX*SC+d32][BP+CX*SC+d32][SI+CX*SC+d32][DI+CX*SC+d32][R8+CX*SC+d32][R9+CX*SC+d32][R10+CX*SC+d32][R11+CX*SC+d32][R12+CX*SC+d32][R13+CX*SC+d32][R14+CX*SC+d32][R15+CX*SC+d32]
0010DX[AX+DX*SC+d32][CX+DX*SC+d32][DX+DX*SC+d32][BX+DX*SC+d32][SP+DX*SC+d32][BP+DX*SC+d32][SI+DX*SC+d32][DI+DX*SC+d32][R8+DX*SC+d32][R9+DX*SC+d32][R10+DX*SC+d32][R11+DX*SC+d32][R12+DX*SC+d32][R13+DX*SC+d32][R14+DX*SC+d32][R15+DX*SC+d32]
0011BX[AX+BX*SC+d32][CX+BX*SC+d32][DX+BX*SC+d32][BX+BX*SC+d32][SP+BX*SC+d32][BP+BX*SC+d32][SI+BX*SC+d32][DI+BX*SC+d32][R8+BX*SC+d32][R9+BX*SC+d32][R10+BX*SC+d32][R11+BX*SC+d32][R12+BX*SC+d32][R13+BX*SC+d32][R14+BX*SC+d32][R15+BX*SC+d32]
0100SP[AX+d32][CX+d32][DX+d32][BX+d32][SP+d32][BP+d32][SI+d32][DI+d32][R8+d32][R9+d32][R10+d32][R11+d32][R12+d32][R13+d32][R14+d32][R15+d32]
0101BP[AX+BP*SC+d32][CX+BP*SC+d32][DX+BP*SC+d32][BX+BP*SC+d32][SP+BP*SC+d32][BP+BP*SC+d32][SI+BP*SC+d32][DI+BP*SC+d32][R8+BP*SC+d32][R9+BP*SC+d32][R10+BP*SC+d32][R11+BP*SC+d32][R12+BP*SC+d32][R13+BP*SC+d32][R14+BP*SC+d32][R15+BP*SC+d32]
0110SI[AX+SI*SC+d32][CX+SI*SC+d32][DX+SI*SC+d32][BX+SI*SC+d32][SP+SI*SC+d32][BP+SI*SC+d32][SI+SI*SC+d32][DI+SI*SC+d32][R8+SI*SC+d32][R9+SI*SC+d32][R10+SI*SC+d32][R11+SI*SC+d32][R12+SI*SC+d32][R13+SI*SC+d32][R14+SI*SC+d32][R15+SI*SC+d32]
0111DI[AX+DI*SC+d32][CX+DI*SC+d32][DX+DI*SC+d32][BX+DI*SC+d32][SP+DI*SC+d32][BP+DI*SC+d32][SI+DI*SC+d32][DI+DI*SC+d32][R8+DI*SC+d32][R9+DI*SC+d32][R10+DI*SC+d32][R11+DI*SC+d32][R12+DI*SC+d32][R13+DI*SC+d32][R14+DI*SC+d32][R15+DI*SC+d32]
1000R8[AX+R8*SC+d32][CX+R8*SC+d32][DX+R8*SC+d32][BX+R8*SC+d32][SP+R8*SC+d32][BP+R8*SC+d32][SI+R8*SC+d32][DI+R8*SC+d32][R8+R8*SC+d32][R9+R8*SC+d32][R10+R8*SC+d32][R11+R8*SC+d32][R12+R8*SC+d32][R13+R8*SC+d32][R14+R8*SC+d32][R15+R8*SC+d32]
1001R9[AX+R9*SC+d32][CX+R9*SC+d32][DX+R9*SC+d32][BX+R9*SC+d32][SP+R9*SC+d32][BP+R9*SC+d32][SI+R9*SC+d32][DI+R9*SC+d32][R8+R9*SC+d32][R9+R9*SC+d32][R10+R9*SC+d32][R11+R9*SC+d32][R12+R9*SC+d32][R13+R9*SC+d32][R14+R9*SC+d32][R15+R9*SC+d32]
1010R10[AX+R10*SC+d32][CX+R10*SC+d32][DX+R10*SC+d32][BX+R10*SC+d32][SP+R10*SC+d32][BP+R10*SC+d32][SI+R10*SC+d32][DI+R10*SC+d32][R8+R10*SC+d32][R9+R10*SC+d32][R10+R10*SC+d32][R11+R10*SC+d32][R12+R10*SC+d32][R13+R10*SC+d32][R14+R10*SC+d32][R15+R10*SC+d32]
1011R11[AX+R11*SC+d32][CX+R11*SC+d32][DX+R11*SC+d32][BX+R11*SC+d32][SP+R11*SC+d32][BP+R11*SC+d32][SI+R11*SC+d32][DI+R11*SC+d32][R8+R11*SC+d32][R9+R11*SC+d32][R10+R11*SC+d32][R11+R11*SC+d32][R12+R11*SC+d32][R13+R11*SC+d32][R14+R11*SC+d32][R15+R11*SC+d32]
1100R12[AX+R12*SC+d32][CX+R12*SC+d32][DX+R12*SC+d32][BX+R12*SC+d32][SP+R12*SC+d32][BP+R12*SC+d32][SI+R12*SC+d32][DI+R12*SC+d32][R8+R12*SC+d32][R9+R12*SC+d32][R10+R12*SC+d32][R11+R12*SC+d32][R12+R12*SC+d32][R13+R12*SC+d32][R14+R12*SC+d32][R15+R12*SC+d32]
1101R13[AX+R13*SC+d32][CX+R13*SC+d32][DX+R13*SC+d32][BX+R13*SC+d32][SP+R13*SC+d32][BP+R13*SC+d32][SI+R13*SC+d32][DI+R13*SC+d32][R8+R13*SC+d32][R9+R13*SC+d32][R10+R13*SC+d32][R11+R13*SC+d32][R12+R13*SC+d32][R13+R13*SC+d32][R14+R13*SC+d32][R15+R13*SC+d32]
1110R14[AX+R14*SC+d32][CX+R14*SC+d32][DX+R14*SC+d32][BX+R14*SC+d32][SP+R14*SC+d32][BP+R14*SC+d32][SI+R14*SC+d32][DI+R14*SC+d32][R8+R14*SC+d32][R9+R14*SC+d32][R10+R14*SC+d32][R11+R14*SC+d32][R12+R14*SC+d32][R13+R14*SC+d32][R14+R14*SC+d32][R15+R14*SC+d32]
1111R15[AX+R15*SC+d32][CX+R15*SC+d32][DX+R15*SC+d32][BX+R15*SC+d32][SP+R15*SC+d32][BP+R15*SC+d32][SI+R15*SC+d32][DI+R15*SC+d32][R8+R15*SC+d32][R9+R15*SC+d32][R10+R15*SC+d32][R11+R15*SC+d32][R12+R15*SC+d32][R13+R15*SC+d32][R14+R15*SC+d32][R15+R15*SC+d32]

Other

sreg(Segment Register Field Encoding)
codesr
000ES
001CS
010SS
011DS
sreg3((Segment Register Field Encoding)
codesreg
000ES
001CS
010SS
011DS
100FS
101GS
110do not use
111do not use
w Field Encoding
wsize
08bit
116bit
d Field Encoding
dnote
0r/m←reg
1reg←r/m
S Field Encoding
0No sign extension
1Sign extend 8bit immediate data to 16bit if W=1
cc Field Encoding
codeinstflagsother
0000OOF=1オーバーフローがある
0001NOOF=0オーバーフローがない
0010CCF=1キャリーがある
0010NAECF=1上でなく等しくないunsigned
0010BCF=1unsigned
0011NCCF=0下でないunsigned
0011NBCF=0キャリーがない
0011AECF=0上か等しいunsigned
0100EZF=1等しい=
0100ZZF=1ゼロの場合
0101NEZF=0等しくない!=
0101NZZF=0ゼロでない
0110NACF ∨ ZF=1上でないunsigned
0110BECF ∨ ZF=1下か等しいunsigned
0111NBECF ∨ ZF=0下でなく等しくないunsigned
0111ACF ∨ ZF=0unsigned
1000SSF=1符号がある<0
1001NSSF=0符号がない≧0
1010PPF=1パリティがある
1010PEPF=1パリティが偶数
1011NPPF=0パリティがない
1011POPF=0パリティが奇数
1100LSF ⊻ OF=1小さいsigned
1100NGESF ⊻ OF=1大きくなく等しくないsigned
1101GESF ⊻ OF=0大きいか等しいsigned
1101NLSF ⊻ OF=0小さくないsigned
1110LEZF ∨ (SF ⊻ OF)=1小さいか等しいsigned
1110NGZF ∨ (SF ⊻ OF)=1大きくないsigned
1111GZF ∨ (SF ⊻ OF)=0大きいsigned
1111NLEZF ∨(SF ⊻ OF)=0小さくなく等しくないsigned
≠ 等しくない
∨Boolean OR
⊻Boolean exclusive OR
∧ Boolean AND
¬ Boolean Not
% 余
>> 右シフト
<< 左シフト
⇄ 交換
c Field Encoding
1byte目のbit02バイト目のbit4~3instflags説明
000BCF=1より下
001EZF=1等しい
010BECF ∨ ZF=1より下か等しい
011UP=1順序付けなし
100NBCF=0より下でない
101NEZF=0等しくない
110NBECF ∨ ZF=0より下でなく等しくない
111NUP=0順序付けなし
cc Field Encoding eee Code
eeeControl Register FieldDebug Register FieldTest Register Field
000CR0DR0
001DR1
010CR2DR2
011CR3DR3
100
101
110DR6TR6
111DR7TR7
mmxreg Field Encoding
codereg
000mm0
001mm1
010mm2
011mm3
100mm4
101mm5
110mm6
111mm7
granularity
codeデータ・フィールドのグラニュラリティ(gg)のエンコーディング
00パックドバイト
01パックドワード
10パックド・ダブルワード
11クワッドワード
XMMreg Field Encoding
codereg
000xmm0
001xmm1
010xmm2
011xmm3
100xmm4
101xmm5
110xmm6
111xmm7