¿Qué sucede si la interrupción ocurre durante la ejecución de la instrucción HALT?

Considere el siguiente segmento de programa en un procesador hipotético.ingrese la descripción de la imagen aquí


Tengo esta pregunta en mi curso CS201. Supongamos que este procesador tiene operaciones de carga/almacenamiento de 32 bits, las operaciones ALU son de 16 bits y las instrucciones de rama son de 16 bits. El programa se ha cargado en la memoria con una dirección de inicio de 3000 (que está en decimal).

Asumiendo el direccionamiento de bytes, si la interrupción ocurrió durante la ejecución de la instrucción de detención, entonces la dirección de retorno insertada en la pila será ?


Mi intento:

Remití este enlace

http://x86.renejeschke.de/html/file_module_x86_id_134.html

De acuerdo con este enlace, la dirección de retorno guardada en la pila debe ser de instrucción después de la instrucción HALT, lo que me da la dirección guardada como

3000 + 4 + 2 + 2 + 2 + 4 + 2 + 2 = 3018

Por lo tanto, Stack ahorra 3018 .


Pero no tengo la respuesta conmigo, así que no puedo confirmarla.

¿Voy bien?

Respuestas (1)

La dirección de retorno guardada en la pila debe ser de instrucción después de la instrucción HALT

Por supuesto. De lo contrario, la CPU entraría nuevamente en una instrucción HALT después de regresar de la interrupción.

Supongamos que este procesador tiene operaciones de carga/almacenamiento de 32 bits, las operaciones ALU son de 16 bits y las instrucciones de rama son de 16 bits.

Falta algo de información: la información, que "HALT" es una instrucción "branch" en la CPU dada (en las CPU automotrices modernas, "HALT" es una clase de instrucción especial, no "branch") o la información de cuánto tiempo "HALT" es.

3000 + 4 + 2 + 2 + 2 + 4 + 2 + 2 = 3018

Suponiendo que "HALT" también tenga 16 bits: Sí, es correcto.

Si las interrupciones están deshabilitadas por software, no sucederá nada dentro de la instrucción HALT.
Gracias por la respuesta !! Solo una duda: "La interrupción se produce durante la instrucción de detención" y "La interrupción se produce después de la instrucción de detención", ¿ambos son iguales? Creo que sí, porque las interrupciones siempre se procesan después de completar la instrucción. ¿Estoy aquí?
Sí, @Garrick, tienes razón. Una interrupción se procesa solo después de que se haya completado la instrucción actual
Dependiendo de la implementación, HALT puede no ser tan benigno... en.wikipedia.org/wiki/Halt_and_Catch_Fire#Intel_x86