CLI (x86)

A kompatibilis processzorok x86 utasításkészletében a CLI utasítás  a "Clear Interrupt-Enable Flag" rövidítése. Alaphelyzetbe állítja a megszakítási jelzőt (IF) az EFLAGS regiszterben . Ha ez a jelző törlődik, a processzor figyelmen kívül hagy minden külső eszköztől érkező megszakítást (kivéve az NMI-t).

Ennek az utasításnak a műveleti kódja 0xFA.

Áttekintés

A CLI utasítás az I/O utasítások osztályába tartozik. Védett módban , ha olyan kód hívja meg, amelynek CPL-je számszerűen nagyobb, mint az IOPL, akkor a processzor #GP(0) kivételt generál . Például, ha az IOPL = 2, akkor a 0, 1 és 2 védelmi gyűrűk kódja végrehajthatja ezt a parancsot . A modern operációs rendszerek az IOPL = 0 értéket állítják be, így csak a kernel tudja végrehajtani ezt az utasítást.

Vegye figyelembe, hogy az IF az EFLAGS betöltésével is módosítható, például egy POPF utasítással .

A CLI-t általában szinkronizálási eszközként használják. A CLI/STI utasításpár használható aszinkron megszakításokkal rendelkező, szünetmentes kód kiemelésére. Többprocesszoros rendszereken a CLI utasítás csak annak a processzornak az IF-jét változtatja meg, amelyen fut, mások IF-jét nem. Ezért a kód megszakításkezelőkkel történő szinkronizálásához szükség van további szinkronizálási objektumok (általában spin zárak) használatára. Például a Linux kernel rendelkezik egy spin_lock_irqsave funkcióval, amely letiltja a megszakításokat, és megpróbálja megszerezni a spinlock objektumot.

Az INT , INT3 , INTO , BOUND utasítások által okozott szinkron ( szoftveres ) megszakítások feldolgozása az IF jelző állapotától függetlenül történik .

Mivel a HLT utasítás megszakításig leállítja a processzort, a CLI/HLT kombináció a gép teljes leállását okozza.

Lásd még