CLI (x86)

I x86 -instruktionssættet af kompatible processorer er CLI - instruktionen  en forkortelse for "Clear Interrupt-Enable Flag". Den nulstiller interrupt-flaget (IF) i EFLAGS-registret . Når dette flag er ryddet, ignorerer processoren alle afbrydelser (undtagen NMI) fra eksterne enheder.

Opkoden for denne instruktion er 0xFA.

Oversigt

CLI-instruktionen tilhører klassen af ​​I/O-instruktioner. I beskyttet tilstand , hvis den kaldes af kode, hvis CPL er numerisk større end IOPL, vil processoren generere en #GP(0) undtagelse. For eksempel, hvis IOPL = 2, så kan kode i 0, 1 og 2 beskyttelsesringe udføre denne kommando . Moderne operativsystemer indstiller IOPL = 0, så kun kernen kan udføre denne instruktion.

Bemærk, at IF'en også kan ændres ved at indlæse EFLAGS, for eksempel med en POPF -instruktion .

CLI'en bruges almindeligvis som et synkroniseringsværktøj. CLI/STI-instruktionsparret kan bruges til at fremhæve uafbrydelig kode med asynkrone afbrydelser. På multiprocessorsystemer ændrer CLI-instruktionen kun IF'en for den processor, den kører på, og ændrer ikke IF'en for andre. Derfor er det der, for at synkronisere kode med interrupt-handlere, nødvendigt yderligere at bruge synkroniseringsobjekter (normalt spin-låse). For eksempel har Linux-kernen en spin_lock_irqsave-funktion, der deaktiverer interrupts og forsøger at erhverve spinlock-objektet.

Synkrone ( software ) afbrydelser forårsaget af INT , INT3 , INTO , BOUND instruktioner behandles uanset tilstanden af ​​IF flaget.

Fordi HLT-instruktionen standser processoren, indtil der opstår en afbrydelse, får CLI/HLT-kombinationen maskinen til at stoppe helt.

Se også