24531904_j
24531904_j 24531904_j
PUSH—Push Word or Doubleword onto the Stack オペコード 命令 説明 FF /6 PUSH r/m16 r/m16 をプッシュする。 FF /6 PUSH r/m32 r/m32 をプッシュする。 50+rw PUSH r16 r16 をプッシュする。 50+rd PUSH r32 r32 をプッシュする。 6A PUSH imm8 imm8 をプッシュする。 68 PUSH imm16 imm16 をプッシュする。 68 PUSH imm32 imm32 をプッシュする。 0E PUSH CS CS をプッシュする。 16 PUSH SS SS をプッシュする。 1E PUSH DS DS をプッシュする。 06 PUSH ES ES をプッシュする。 0F A0 PUSH FS FS をプッシュする。 0F A8 PUSH GS GS をプッシュする。 説明 スタック ・ ポインタをデク リ メントし、 次にソース ・ オペランドをプロシージャ ・ ス タックのトップにストアする。 スタック ・セグメントの現在のアドレス・サイズ属性と、 オペラン ド ・ サイズ属性によ って、 スタ ッ ク ・ ポインタをデク リ メン ト する量が決ま る ( 下記の 「操作」 を参照 )。 例えば、 32 ビッ トのアドレス指定とオペランドが使用されて いる場合は、 ESP レジスタ ( スタック ・ ポインタ ) が 4 ずつデク リ メン ト される。 16 ビッ トのアドレス指定とオペランドが使用されている場合は、 SP レジスタ (16 ビッ ト ・ アドレス指定のスタック ・ポインタ) が 2 ずつデク リ メン ト される。 スタ ッ クのア ド レ ス・サイズ属性が32 である と きに 16 ビット ・オペランドをプッシュすると、 スタッ ク・ポインタでアライメント不正が発生することがある( すなわち、 スタ ッ ク ・ ポイン タはダブルワー ド境界にアライメントが合っていない )。 PUSH ESP 命令は、 命令が実行される前に ESP レジスタの値が存在していたようにその 値をプ ッ シ ュする。 そのため、 ESP レジスタがオペランド ・アドレスの計算にベース ・ レジスタとして使用されるメモリ ・ オペランドを、 PUSH 命令が使用する と 、 ESP レジ スタがデクリ メン ト される前に、 オペランドの実効アドレスが計算される。 実ア ド レス ・ モー ド では、 PUSH 命令が実行 さ れる と き に、 ESP レジスタまたは SP レジ スタが 1 であ る場合、 プ ロ セ ッ サは ス タ ッ ク ・ スペー スの不足に よ っ てシ ャ ッ ト ・ ダ ウ ンする。 こ の状態を示す例外は生成 さ れない。 操作 IF StackAddrSize = 32 THEN IF OperandSize = 32 THEN ESP ← ESP − 4; SS:ESP ← SRC; (* push doubleword *) ELSE (* OperandSize = 16*) ESP ← ESP − 2; SS:ESP ← SRC; (* push word *) FI; 3:696 第 3 巻 : IA-32 基本命令リファレンス
PUSH—Push Word or Doubleword onto the Stack ( 続き ) ELSE (* StackAddrSize = 16*) IF OperandSize = 16 THEN FI; FI; SP ← SP − 2; SS:SP ← SRC; (* push word *) ELSE (* OperandSize = 32*) SP ← SP − 4; SS:SP ← SRC; (* push doubleword *) 影響を受けるフラグ なし。 追加の Itanium ベース・システム環境例外 Itanium アーキテクチャ ・ レジスタ ・ フォルト Itanium アーキテクチャ ・ メモリ ・ フォル ト NaT レ ジ ス タ参照アボ ー ト 。 VHPT データ ・ フォル ト、 ネス ト された TLB フォルト、 データ TLB フォルト、 代替データTLB フォルト、 デー タ・ページ不在フォルト、 データNaT ページ参照アボー ト、 データ・キー・ ミス・フォルト、 データ・キー許可 フォルト、 データ・アクセス権フォルト、 データ・アクセ ス・ビット ・フォルト、 データ・ダーティ ・ビット ・フォ ルト。 保護モード例外 #GP(0) メモリ ・ オペランドの実効アドレスが CS、 DS、 ES、 FS、 または GS セグ メ ン ト の範囲外の場合。 DS、 ES、 FS、 または GS レジスタを使用してメモリがア クセスされ、 レジスタの内容が NULL セグメン ト ・ セレ クタであった場合。 #SS(0) メモリ ・ オペランドの実効アドレスが SS セグメン ト の範 囲外の場合。 #PF ( フォルト ・コード ) ペー ジ ・ フ ォ ル ト が発生した場合。 #AC(0) 現行特権レベルが 3 のときに、 アライメント ・チェックが イネーブルにされていて、 アライメントが合わないメモリ 参照が行われた場合。 実アドレス・モード例外 #GP メモリ ・ オペランドの実効アドレスが CS、 DS、 ES、 FS、 または GS セグ メ ン ト の範囲外の場合。 #SS メモリ ・ オペランドの実効アドレスが SS セグメン ト の範 囲外の場合。 SP レジスタまたは ESP レジスタの新しい値がスタック ・ セグ メ ン ト の範囲外の場合。 第 3 巻 : IA-32 基本命令リファレンス 3:697
- Seite 658 und 659: LODS/LODSB/LODSW/LODSD—Load Strin
- Seite 660 und 661: LOOP/LOOPcc—Loop According to ECX
- Seite 662 und 663: LSL—Load Segment Limit ( 続き )
- Seite 664 und 665: LSS—Load Full Pointer 「LDS/LES/
- Seite 666 und 667: LTR—Load Task Register ( 続き )
- Seite 668 und 669: MOV—Move ( 続き ) デスティ
- Seite 670 und 671: MOV—Move ( 続き ) #GP( セレ
- Seite 672 und 673: MOV—Move to/from Control Register
- Seite 674 und 675: MOV—Move to/from Debug Registers
- Seite 676 und 677: MOVS/MOVSB/MOVSW/MOVSD—Move Data
- Seite 678 und 679: MOVSX—Move with Sign-Extension
- Seite 680 und 681: MOVZX—Move with Zero-Extend オ
- Seite 682 und 683: MUL—Unsigned Multiplication of AL
- Seite 684 und 685: NEG—Two's Complement Negation オ
- Seite 686 und 687: NOP—No Operation オペコード
- Seite 688 und 689: NOT—One's Complement Negation (
- Seite 690 und 691: OR—Logical Inclusive OR ( 続き
- Seite 692 und 693: OUT—Output to Port ( 続き ) 操
- Seite 694 und 695: OUTS/OUTSB/OUTSW/OUTSD—Output Str
- Seite 696 und 697: OUTS/OUTSB/OUTSW/OUTSD—Output Str
- Seite 698 und 699: POP—Pop a Value from the Stack
- Seite 700 und 701: POP—Pop a Value from the Stack (
- Seite 702 und 703: POP—Pop a Value from the Stack (
- Seite 704 und 705: POPA/POPAD—Pop All General-Purpos
- Seite 706 und 707: POPF/POPFD—Pop Stack into EFLAGS
- Seite 710 und 711: PUSH—Push Word or Doubleword onto
- Seite 712 und 713: PUSHA/PUSHAD—Push All General-Pur
- Seite 714 und 715: PUSHF/PUSHFD—Push EFLAGS Register
- Seite 716 und 717: RCL/RCR/ROL/ROR-—Rotate ( 続き
- Seite 718 und 719: RCL/RCR/ROL/ROR-—Rotate ( 続き
- Seite 720 und 721: RDMSR—Read from Model Specific Re
- Seite 722 und 723: RDPMC—Read Performance-Monitoring
- Seite 724 und 725: RDTSC—Read Time-Stamp Counter (
- Seite 726 und 727: REP/REPE/REPZ/REPNE /REPNZ—Repeat
- Seite 728 und 729: RET—Return from Procedure オペ
- Seite 730 und 731: RET—Return from Procedure ( 続
- Seite 732 und 733: RET—Return from Procedure ( 続
- Seite 734 und 735: ROL/ROR—Rotate 「RCL/RCR/ROL/ROR
- Seite 736 und 737: SAHF—Store AH into Flags オペ
- Seite 738 und 739: SAL/SAR/SHL/SHR—Shift ( 続き )
- Seite 740 und 741: SAL/SAR/SHL/SHR—Shift ( 続き )
- Seite 742 und 743: SBB—Integer Subtraction with Borr
- Seite 744 und 745: SCAS/SCASB/SCASW/SCASD—Scan Strin
- Seite 746 und 747: SETcc—Set Byte on Condition オ
- Seite 748 und 749: SETcc—Set Byte on Condition ( 続
- Seite 750 und 751: SGDT/SIDT—Store Global/Interrupt
- Seite 752 und 753: SHLD—Double Precision Shift Left
- Seite 754 und 755: SHLD—Double Precision Shift Left
- Seite 756 und 757: SHRD—Double Precision Shift Right
PUSH—Push Word or Doubleword onto the Stack ( 続き )<br />
ELSE (* StackAddrSize = 16*)<br />
IF OperandSize = 16<br />
THEN<br />
FI;<br />
FI;<br />
SP ← SP − 2;<br />
SS:SP ← SRC; (* push word *)<br />
ELSE (* OperandSize = 32*)<br />
SP ← SP − 4;<br />
SS:SP ← SRC; (* push doubleword *)<br />
影響を受けるフラグ<br />
なし。<br />
追加の Itanium ベース・システム環境例外<br />
Itanium アーキテクチャ ・<br />
レジスタ ・ フォルト<br />
Itanium アーキテクチャ ・<br />
メモリ ・ フォル ト<br />
NaT レ ジ ス タ参照アボ ー ト 。<br />
VHPT データ ・ フォル ト、 ネス ト された TLB フォルト、<br />
データ TLB フォルト、 代替データTLB フォルト、 デー<br />
タ・ページ不在フォルト、 データNaT ページ参照アボー<br />
ト、 データ・キー・ ミス・フォルト、 データ・キー許可<br />
フォルト、 データ・アクセス権フォルト、 データ・アクセ<br />
ス・ビット ・フォルト、 データ・ダーティ ・ビット ・フォ<br />
ルト。<br />
保護モード例外<br />
#GP(0) メモリ ・ オペランドの実効アドレスが CS、 DS、 ES、 FS、<br />
または GS セグ メ ン ト の範囲外の場合。<br />
DS、 ES、 FS、 または GS レジスタを使用してメモリがア<br />
クセスされ、 レジスタの内容が NULL セグメン ト ・ セレ<br />
クタであった場合。<br />
#SS(0) メモリ ・ オペランドの実効アドレスが SS セグメン ト の範<br />
囲外の場合。<br />
#PF ( フォルト ・コード ) ペー ジ ・ フ ォ ル ト が発生した場合。<br />
#AC(0) 現行特権レベルが 3 のときに、 アライメント ・チェックが<br />
イネーブルにされていて、 アライメントが合わないメモリ<br />
参照が行われた場合。<br />
実アドレス・モード例外<br />
#GP メモリ ・ オペランドの実効アドレスが CS、 DS、 ES、 FS、<br />
または GS セグ メ ン ト の範囲外の場合。<br />
#SS メモリ ・ オペランドの実効アドレスが SS セグメン ト の範<br />
囲外の場合。<br />
SP レジスタまたは ESP レジスタの新しい値がスタック ・<br />
セグ メ ン ト の範囲外の場合。<br />
第 3 巻 : IA-32 基本命令リファレンス 3:697