CLI (x86)

En el conjunto de instrucciones x86 de los procesadores compatibles , la instrucción CLI  es la abreviatura de "Clear Interrupt-Enable Flag". Restablece el indicador de interrupción (IF) en el registro EFLAGS . Cuando se borra este indicador, el procesador ignora todas las interrupciones (excepto NMI) de dispositivos externos.

El código de operación para esta instrucción es 0xFA.

Resumen

La instrucción CLI pertenece a la clase de instrucciones de E/S. En modo protegido , si es llamado por código cuyo CPL es numéricamente mayor que IOPL, entonces el procesador generará una excepción #GP(0). Por ejemplo, si IOPL = 2, entonces el código en los anillos de protección 0, 1 y 2 puede ejecutar este comando . Los sistemas operativos modernos establecen IOPL = 0 para que solo el kernel pueda ejecutar esta instrucción.

Tenga en cuenta que el IF también se puede modificar cargando EFLAGS, por ejemplo, con una instrucción POPF .

La CLI se usa comúnmente como una herramienta de sincronización. El par de instrucciones CLI/STI se puede usar para resaltar el código ininterrumpible con interrupciones asíncronas. En sistemas multiprocesador, la instrucción CLI solo cambia la IF del procesador en el que se ejecuta y no cambia la IF de los demás. Por lo tanto, allí, para sincronizar el código con los controladores de interrupción, es necesario utilizar adicionalmente objetos de sincronización (generalmente bloqueos giratorios). Por ejemplo, el kernel de Linux tiene una función spin_lock_irqsave que desactiva las interrupciones e intenta adquirir el objeto spinlock.

Las interrupciones sincrónicas ( software ) provocadas por las instrucciones INT , INT3 , INTO , BOUND se procesan independientemente del estado del indicador IF.

Debido a que la instrucción HLT detiene el procesador hasta que ocurre una interrupción, la combinación CLI/HLT hace que la máquina se detenga por completo.

Véase también