16.02.2013 Aufrufe

24531904_j

24531904_j

24531904_j

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

INT n/INTO/INT 3—Call to Interrupt Procedure ( 続き )<br />

操作<br />

以下の操作の記述は、 INT n 命令お よ び INTO 命令だけでな く 、 外部割 り 込みお よ び例外<br />

にも適用される。<br />

IF Itanium System EnvironmentTHEN<br />

IF INT3 Form THEN IA-32_Exception(3);<br />

IF INTO Form THEN IA-32_Exception(4);<br />

IF INT Form THEN IA-32_Interrupt(N);<br />

FI;<br />

/*IN the Itanium System Environment all of the following operations are intercepted*/<br />

IF PE=0<br />

THEN<br />

GOTO REAL-ADDRESS-MODE;<br />

ELSE (* PE=1 *)<br />

GOTO PROTECTED-MODE;<br />

FI;<br />

REAL-ADDRESS-MODE:<br />

IF ((DEST ∗ 4) + 3) is not within IDT limit THEN #GP; FI;<br />

IF stack not large enough for a 6-byte return information THEN #SS; FI;<br />

Push (EFLAGS[15:0]);<br />

IF ← 0; (* Clear interrupt flag *)<br />

TF ← 0; (* Clear trap flag *)<br />

AC ← 0; (*Clear AC flag*)<br />

Push(CS);<br />

Push(IP);<br />

(* No error codes are pushed *)<br />

CS ← IDT(Descriptor (vector ∗ 4), selector));<br />

EIP ← IDT(Descriptor (vector ∗ 4), offset)); (* 16 bit offset AND 0000FFFFH *)<br />

END;<br />

PROTECTED-MODE:<br />

IF ((DEST ∗ 8) + 7) is not within IDT limits<br />

OR selected IDT descriptor is not an interrupt-, trap-, or task-gate type<br />

THEN #GP((DEST ∗ 8) + 2 + EXT);<br />

(* EXT is bit 0 in error code *)<br />

FI;<br />

IF software interrupt (* generated by INTn, INT3, or INTO *)<br />

THEN<br />

IF gate descriptor DPL < CPL<br />

THEN #GP((vector number ∗ 8) + 2 );<br />

(* PE=1, DPL

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!