24531904_j
24531904_j 24531904_j
CALL ─ Call Procedure ( 続き ) SAME-PRIVILEGE: IF CallGateSize = 32 THEN IF stack does not have room for 8 bytes THEN #SS(0); FI; IF EIP not within code segment limit then #GP(0); FI; CS:EIP ← CallGate(CS:EIP) (* segment descriptor information also loaded *) Push(oldCS:oldEIP); (* return address to calling procedure *) ELSE (* CallGateSize = 16 *) IF stack does not have room for parameters plus 4 bytes THEN #SS(0); FI; IF IP not within code segment limit THEN #GP(0); FI; CS:IP ← CallGate(CS:instruction pointer) (* segment descriptor information also loaded *) Push(oldCS:oldIP); (* return address to calling procedure *) FI; CS(RPL) ← CPL END; TASK-GATE: IF task gate DPL < CPL or RPL THEN #GP(task gate selector); FI; IF task gate not present THEN #NP(task gate selector); FI; IF Itanium System Environment THEN IA-32_Intercept(Gate,CALL); Read the TSS segment selector in the task-gate descriptor; IF TSS segment selector local/global bit is set to local OR index not within GDT limits THEN #GP(TSS selector); FI; Access TSS descriptor in GDT; IF TSS descriptor specifies that the TSS is busy (low-order 5 bits set to 00001) THEN #GP(TSS selector); FI; IF TSS not present THEN #NP(TSS selector); FI; SWITCH-TASKS (with nesting) to TSS; IF EIP not within code segment limit THEN #GP(0); FI; END; TASK-STATE-SEGMENT: IF TSS DPL < CPL or RPL ORTSS segment selector local/global bit is set to local OR TSS descriptor indicates TSS not available THEN #GP(TSS selector); FI; IF TSS is not present THEN #NP(TSS selector); 3:414 第 3 巻 : IA-32 基本命令リファレンス
CALL ─ Call Procedure ( 続き ) FI; IF Itanium System Environment THEN IA-32_Intercept(Gate,CALL); SWITCH-TASKS (with nesting) to TSS IF EIP not within code segment limit THEN #GP(0); FI; END; 影響を受けるフラグ タスク ・ スイッチが行われた場合はすべてのフラグが影響を受け、 タスク ・ スイッチが 行われなか っ た場合は どのフ ラグ も影響を受けない。 追加の Itanium ベース・システム環境例外 Itanium アーキテクチャ ・ メモリ ・ フォル ト VHPT データ・ フォ ルト 、 ネスト さ れた TLB フォルト 、 データ TLB フォルト 、 代替データ TLB フォルト 、 データ・ ペー ジ 不在フ ォ ルト 、 デー タ NaT ペー ジ参照アボー ト 、 データ・キー・ミス・フォルト、データ・キー許可フォル ト 、 データ・ アク セス権フォ ルト 、 データ・ アク セス・ ビッ ト ・ フォルト 、 データ・ ダーティ ・ ビッ ト ・ フォルト 。 IA-32_Intercept CALL ゲー ト、 タスク ・ ゲー ト、 タスク ・ セグメン ト を介 した CALL のゲー ト ・ インタ ーセプ ト 。 IA-32_Exception 発生した分岐のデバ ッ グ例外 (PSR.tb が 1 の場合 )。 保護モード例外 #GP(0) デステ ィ ネーシ ョ ン ・ オペラン ド内のターゲッ ト ・ オフ セ ッ ト が新しいコ ー ド ・ セグ メン ト の範囲外の場合。 デステ ィ ネーシ ョ ン ・ オペラン ド内のセグメン ト ・ セレク タが NULL の場合。 ゲート内のコード ・セグメント ・セレクタがNULL の場 合。 メモリ ・ オペランドの実効アドレスが CS、 DS、 ES、 FS、 または GS セグ メ ン ト の範囲外の場合。 DS、 ES、 FS、 または GS レジスタを使用してメモリがア クセスされ、 レジスタの内容が NULL セグメン ト ・ セレ クタであった場合。 #GP( セレクタ ) コード ・セグメント、 ゲート、 またはTSS のセレ ク タ ・ イ ンデ ッ ク スが記述子テ ー ブルの範囲外の場合。 デスティネーション ・ オペランド にあるセグメン ト ・ セレ ク タ の指示先のセグ メ ン ト 記述子が コ ン フ ォ ー ミ ン グ ・ コード・セグメント、非コンフォーミング・コード・セグ メント、 コール・ゲート、 タスク ・ゲート、 またはタス ク・ステート・セグメントのいずれのものでもなかった場 合。 非コンフォー ミング ・ コー ド ・ セグメン ト の DPL が CPL に等し くないか、 またはセグメン トのセグメン ト ・セレク タの RPL が CPL より大きい場合。 第 3 巻 : IA-32 基本命令リファレンス 3:415
- Seite 375 und 376: 表 5-5. 命令クラス ( 続き )
- Seite 377 und 378: 表 5-5. 命令クラス ( 続き )
- Seite 379 und 380: 表 5-5. 命令クラス ( 続き )
- Seite 381: 第 II 部 : IA-32命令セット
- Seite 384 und 385: ま たは浮動小数点命令を
- Seite 386 und 387: • rel16 および rel32 - アセ
- Seite 388 und 389: • レ ジ ス タ名は暗黙に
- Seite 390 und 391: 図 1-1. BIT[EAX,21] のビット
- Seite 392 und 393: 1.2.7 仮想 8086 モード例外
- Seite 394 und 395: AAD ─ ASCII Adjust AX Before Divi
- Seite 396 und 397: AAS ─ ASCII Adjust AL After Subtr
- Seite 398 und 399: ADC ─ Add with Carry ( 続き )
- Seite 400 und 401: ADD ─ Add ( 続き ) 保護モー
- Seite 402 und 403: AND ─ Logical AND ( 続き ) 保
- Seite 404 und 405: ARPL ─ Adjust RPL Field of Segmen
- Seite 406 und 407: BOUND ─ Check Array Index Against
- Seite 408 und 409: BSF ─ Bit Scan Forward ( 続き )
- Seite 410 und 411: BSR ─ Bit Scan Reverse ( 続き )
- Seite 412 und 413: BT ─ Bit Test オペコード 命
- Seite 414 und 415: BTC ─ Bit Test and Complement オ
- Seite 416 und 417: BTR ─ Bit Test and Reset オペ
- Seite 418 und 419: BTS ─ Bit Test and Set オペコ
- Seite 420 und 421: CALL ─ Call Procedure オペコ
- Seite 422 und 423: CALL ─ Call Procedure ( 続き )
- Seite 424 und 425: CALL ─ Call Procedure ( 続き )
- Seite 428 und 429: CALL ─ Call Procedure ( 続き )
- Seite 430 und 431: CBW/CWDE ─ Convert Byte to Word/C
- Seite 432 und 433: CLC ─ Clear Carry Flag オペコ
- Seite 434 und 435: CLI ─ Clear Interrupt Flag オペ
- Seite 436 und 437: CLTS—Clear Task-Switched Flag in
- Seite 438 und 439: CMOVcc—Conditional Move オペコ
- Seite 440 und 441: CMOVcc—Conditional Move ( 続き
- Seite 442 und 443: CMP—Compare Two Operands オペ
- Seite 444 und 445: CMPS/CMPSB/CMPSW/CMPSD—Compare St
- Seite 446 und 447: CMPS/CMPSB/CMPSW/CMPSD—Compare St
- Seite 448 und 449: CMPXCHG—Compare and Exchange (
- Seite 450 und 451: CMPXCHG8B—Compare and Exchange 8
- Seite 452 und 453: CPUID—CPU Identification オペ
- Seite 454 und 455: CPUID—CPU Identification ( 続き
- Seite 456 und 457: CPUID—CPU Identification ( 続き
- Seite 458 und 459: CWDE—Convert Word to Doubleword
- Seite 460 und 461: DAS—Decimal Adjust AL after Subtr
- Seite 462 und 463: DEC—Decrement by 1 ( 続き ) #AC
- Seite 464 und 465: DIV—Unsigned Divide ( 続き ) FI
- Seite 466 und 467: ENTER—Make Stack Frame for Proced
- Seite 468 und 469: ENTER—Make Stack Frame for Proced
- Seite 470 und 471: F2XM1—Compute 2 x -1 ( 続き )
- Seite 472 und 473: FADD/FADDP/FIADD—Add オペコー
- Seite 474 und 475: FADD/FADDP/FIADD—Add ( 続き )
CALL ─ Call Procedure ( 続き )<br />
SAME-PRIVILEGE:<br />
IF CallGateSize = 32<br />
THEN<br />
IF stack does not have room for 8 bytes<br />
THEN #SS(0); FI;<br />
IF EIP not within code segment limit then #GP(0); FI;<br />
CS:EIP ← CallGate(CS:EIP) (* segment descriptor information also loaded *)<br />
Push(oldCS:oldEIP); (* return address to calling procedure *)<br />
ELSE (* CallGateSize = 16 *)<br />
IF stack does not have room for parameters plus 4 bytes<br />
THEN #SS(0); FI;<br />
IF IP not within code segment limit THEN #GP(0); FI;<br />
CS:IP ← CallGate(CS:instruction pointer)<br />
(* segment descriptor information also loaded *)<br />
Push(oldCS:oldIP); (* return address to calling procedure *)<br />
FI;<br />
CS(RPL) ← CPL<br />
END;<br />
TASK-GATE:<br />
IF task gate DPL < CPL or RPL<br />
THEN #GP(task gate selector);<br />
FI;<br />
IF task gate not present<br />
THEN #NP(task gate selector);<br />
FI;<br />
IF Itanium System Environment THEN IA-32_Intercept(Gate,CALL);<br />
Read the TSS segment selector in the task-gate descriptor;<br />
IF TSS segment selector local/global bit is set to local<br />
OR index not within GDT limits<br />
THEN #GP(TSS selector);<br />
FI;<br />
Access TSS descriptor in GDT;<br />
IF TSS descriptor specifies that the TSS is busy (low-order 5 bits set to 00001)<br />
THEN #GP(TSS selector);<br />
FI;<br />
IF TSS not present<br />
THEN #NP(TSS selector);<br />
FI;<br />
SWITCH-TASKS (with nesting) to TSS;<br />
IF EIP not within code segment limit<br />
THEN #GP(0);<br />
FI;<br />
END;<br />
TASK-STATE-SEGMENT:<br />
IF TSS DPL < CPL or RPL<br />
ORTSS segment selector local/global bit is set to local<br />
OR TSS descriptor indicates TSS not available<br />
THEN #GP(TSS selector);<br />
FI;<br />
IF TSS is not present<br />
THEN #NP(TSS selector);<br />
3:414 第 3 巻 : IA-32 基本命令リファレンス