¿Cuál es la rutina del servicio de interrupción del servicio de interrupción en lenguaje ensamblador?
Bueno, supongo que estás preguntando sobre PC, no sobre microcontroladores
1. Las interrupciones del lenguaje ensamblador se dividen en los siguientes tipos:
1. Esto se solidifica en el programa BIOS. El BIOS se cargará automáticamente en la memoria designada cada vez que se encienda la computadora
Interrupción de DOS en 2.186. Después de cargar el sistema DOS, el sistema continuará usándose. el vector de interrupción del BIOS y lo envía a la memoria designada. Se le agregan algunos vectores nuevos. Estas funciones son las rutinas de servicio de interrupción que vienen con el sistema DOS.
Para interrupciones del sistema de 3.286 y superiores, la PC. entrará en el modo protegido Después de cargar el sistema operativo, las interrupciones son controladas por IDT. Este mecanismo es similar a la tabla de vectores de interrupciones, excepto que el vector de interrupciones se reemplaza por un selector. Este tipo de mecanismo de interrupción es ligeramente diferente para diferentes tipos de CPU. No entraré en detalles aquí y no lo entiendo todo por mí mismo.
2. Cómo implementar interrupciones (interrupciones ordinarias según 8086)
¿Has oído hablar del "codificador de prioridad"? ——Si se reciben dos señales al mismo tiempo, a una señal se le asignará una prioridad más alta y se ejecutará primero. Las interrupciones se manejan de manera similar.
Cuando la CPU obtiene una determinada señal de alta prioridad de operación (como el reloj, se activará cada hora fija; como la respuesta del teclado, el usuario espera salir de cualquier programa de DOS en ejecución a través de Ctrl C) , la CPU suspenderá el programa que se está ejecutando actualmente y en su lugar procesará la señal (similar a Call, pero ligeramente diferente, que debería mencionarse en el libro que está leyendo).
Al manejar una interrupción, el sistema la interpretará como una etiqueta, como int 9h, int 21h, etc. Esta etiqueta es un número de serie. Una tabla continua se almacena en algún lugar de la memoria. Esta etiqueta es el "número de fila" de la tabla. Sin embargo, cada fila tiene dos columnas, incluida la dirección base del segmento y la dirección base del segmento de la interrupción. controlador. La tabla de vectores de interrupción comienza desde 0000:0000 y cada 4 bytes es una entrada. La etiqueta de interrupción x4 es la dirección donde se almacena la entrada correspondiente de la tabla de vectores de interrupción. La dirección alta es la dirección base y la dirección baja es el desplazamiento.
No sé si entiendes esto. . .
De todos modos, para resumir su problema, la rutina del servicio de interrupción se carga en la memoria. Puede almacenarse en el chip BIOS o en el disco duro antes de cargar la tabla de vectores de interrupción. del controlador de interrupciones Debe saber que cada entrada tiene solo 4 bytes; no creo que la rutina de servicio de interrupción específica no se mencione en su libro de ensamblaje. Permítame explicarle brevemente: el pin INTR de la CPU ha recibido una interrupción. La señal tiene una etiqueta, por ejemplo, No. 5, y la entrada de la tabla de vectores de interrupción es 0000:000A. Lea esta memoria y obtenga la dirección de entrada del programa de interrupción, por ejemplo, AAAA:BBBB, luego almacenará el CS actual. Registros /IP y Flags. Empújelo en la pila y luego vaya a AAAA:BBBB para su ejecución hasta que la instrucción iret regrese a la tarea original (quizás la interrupción finalice la tarea y no regrese).
En cuanto a la interrupción del modo protegido, creo que aún no la has encontrado. Más adelante, también controlará el chip 8259A para implementar interrupciones avanzadas. Esto no es algo que generalmente necesite aprender.