CLI (x86)

I x86 -instruktionsuppsättningen av kompatibla processorer är CLI - instruktionen en  förkortning för "Clear Interrupt-Enable Flag". Den återställer avbrottsflaggan (IF) i EFLAGS-registret . När denna flagga rensas ignorerar processorn alla avbrott (förutom NMI) från externa enheter.

Op -koden för denna instruktion är 0xFA.

Översikt

CLI-instruktionen tillhör klassen I/O-instruktioner. I skyddat läge , om det anropas av kod vars CPL är numeriskt större än IOPL, kommer processorn att generera ett #GP(0) undantag. Till exempel, om IOPL = 2, kan kod i 0, 1 och 2 skyddsringar utföra detta kommando . Moderna operativsystem ställer in IOPL = 0 så att endast kärnan kan utföra denna instruktion.

Observera att IF också kan modifieras genom att ladda EFLAGS, till exempel med en POPF- instruktion .

CLI används vanligtvis som ett synkroniseringsverktyg. CLI/STI-instruktionsparet kan användas för att markera avbrottsfri kod med asynkrona avbrott. På multiprocessorsystem ändrar CLI-instruktionen bara IF-värdet för processorn den körs på och ändrar inte IF-värdet för andra. Därför är det där, för att synkronisera kod med avbrottshanterare, nödvändigt att dessutom använda synkroniseringsobjekt (vanligtvis spinnlås). Till exempel har Linux-kärnan en spin_lock_irqsave-funktion som inaktiverar avbrott och försöker hämta spinlock-objektet.

Synkrona ( mjukvara ) avbrott orsakade av INT , INT3 , INTO , BOUND instruktioner bearbetas oavsett tillståndet för IF-flaggan.

Eftersom HLT-instruktionen stoppar processorn tills ett avbrott inträffar, får CLI/HLT-kombinationen att maskinen stannar helt.

Se även