Entiendo bien lo que hace esta instruccion: desactiva las interupciones enmascarables. Y se que existen variedad de ejemplos acerca de su filosofia, sin embargo no me queda clara su necesidad real; creo que muchas soluciones podrian implementarse mas facilmente sin ello.
Un ejemplo concreto: estaba revisando un codigo en el que se utiliza:
Código
Este es el fragmento de un hook a una rutina de interrupcion que guarda en un buffer indexado el contenido de AL cada vez que es ejecutada.
CLI PUSH DS PUSH CS POP DS JZ _noChar LEA BX, _buffer PUSH SI MOV SI, WORD PTR [_index] MOV BYTE PTR [BX+SI], AL INC SI MOV WORD PTR [_index], SI POP SI MOV BX, WORD PTR [_index] CMP BX, 32H JB _noOverlapping MOV AX, 0 MOV WORD PTR [_index], AX _noOverlapping: _noChar: ;en seguida se recupera el registro DS
Sin embargo no entiendo, por ejemplo, en este caso, cual es la necesidad de ello.
Tengo las siguientes suposiciones:
¿es porque el contenido de los registros se pierde? ¿entonces por que no ademas de guardar el regustro EFLAGS en la pila no tambien el contenido de los registros?
¿es por velocidad de ejecucion? Me parece un prejuicio
En verdad solo me pregunto si alguien conoce bien la necesidad de tal cosa y tiene la amabilidad de compartirlo conmigo.
Gracias por su tiempo. Saludos.
Por cierto... El buffer tiene un tamano de 32 unidades hexadecimales, por tanto el
Código
MOV BX, WORD PTR [_index] CMP BX, 32H JB _noOverlapping
No subestimo la intuicion, lo digo solo por si acaso.