El lenguaje ensamblador - dentro de interrupción

La interrupción de los medios que la CPU no se sigue (instrucción ejecutada solo) para realizar abajo, pero a su vez para hacer frente a esta información en particular, pero esta información particular, podemos llamar a información de alarma. información de alarma es requerir algún tipo de procesamiento de la CPU de inmediato, los tratamientos que se llevan a cabo para proporcionar información de notificación parámetros necesarios.

Dentro de la generación de interrupciones

Para 8086CPU, cuando la CPU interna tiene sucede lo siguiente, generada en respuesta a la mensaje de interrupción .

  • error de división, por ejemplo, dividir la ejecución de comandos de generación div desbordamiento;
  • la ejecución de un solo paso;
  • Instrucciones en ejecución;
  • ejecución de la instrucción int.

Y la información de interrupción debe contener el código de tipo de interrupción de datos a las fuentes de información de identificación del terminal. código de tipo de interrupción es un byte de datos, puede representar 256 variedad de fuentes de interrupción información.
8086CPU código de tipo de terminal de la siguiente manera.

  • error de división: 0
  • Single-paso: 1
  • la ejecución de instrucciones en: 4
  • La instrucción int ejecución, int formato de la instrucción es n, el número n de la instrucción inmediatamente se suministra a la CPU de bytes de interrupción código de tipo.

manejador de interrupciones

Escribimos un programa para manejar la información de alarma se llama un manejador de interrupciones .
Para ejecutar el manejador de interrupciones cómo conseguir los manipuladores de la dirección de ocho tipo de segmento de código de terminal y la dirección de desplazamiento?

tabla de vectores de interrupción

  • vector de interrupción es la dirección de entrada de controlador de interrupción.
  • tabla de vectores de interrupción es una lista de dirección de entrada manejador de interrupciones.

tabla de vectores de interrupción en la memoria 0000: unidad de almacenamiento 03FF 1024, donde la fuente de información interrupción almacenada 256 correspondiente a la entrada controlador de interrupción, la dirección de entrada incluye una dirección de segmento y de direcciones de desplazamiento, a: 0000-0000 entrada ocupa dos bytes, la dirección almacenada alta dirección de segmento palabra, palabra baja dirección almacenada de direcciones de desplazamiento. Sólo sé CPU código de tipo de alarma, que se puede utilizar como una interrupción para el código de tipo de escala número de entrada de interrupción, para localizar la entrada de la tabla correspondiente, para obtener la dirección de entrada del controlador de interrupciones.

La interrupción del proceso

El proceso es interrumpido por un vector de proceso de interrupción de interrupción para encontrar el código de tipo, y lo utilizan para establecer el CS e IP.
Aquí es 8086CPU después de recibir información de interrupción, causada por la interrupción del proceso.

  • Obtener el código de tipo de alarma (de información de alarma);
  • Empuje el valor del registro de bandera (como en el proceso para cambiar el valor del registro de bandera de interrupción, la primera guardado en la pila);
  • El establecimiento de un primer indicador registra 8 9 IF y TF es 0;
  • CS contenidos de la pila;
  • pila IP de contenido;
  • código de tipo de interrupción de direcciones de memoria 4 y el código de tipo de alarma dirección de entrada dos sub-unidades 4 + 2 lee el controlador de interrupción proporcionado IP y CS.

una expresión más concisa proceso de interrupción, como sigue:

取得中断类型码 N;
pushf
TF=0,IF=0
push CS
push IP
(ip)=(N*4),(CS)=(N*4+2)

Manejador de interrupción e instrucciones iret

manejador de interrupciones es bastante similar a los métodos y rutinas de preparación, los siguientes pasos convencionales:

  • Guardar los registros utilizados;
  • interrupción;
  • Restaurar registros utilizados;
  • Regresa con la instrucción IRET.

iret función de la instrucción ensamblador descripción de la sintaxis es:

pop ip
pop cs
popf

iret generalmente se hace de forma automática y hardware alarma de proceso se utiliza en conjunción. Durante la interrupción, y el orden de la pila de registros iret corresponde exactamente.

Escribe interrumpir el procesamiento 0

;因为除法溢出随时可能发生,CPU随时都可能将CS:IP只想程序的入口,执行程序,所以我们将程序放入内存中。
;因为系统要处理的中断事件远没有达到256个,所以在中断向量表中,有许多单元是空的。

assume cs:code

code segment
start:

;安装:将中断处理程序代码送入中断向量表中。
    mov ax,cs
    mov ds,ax
    mov si,offset do0   ;ds:si指向源地址

    mov ax,0
    mov es,ax
    mov di,200h         ;es:di指向目的地址
    mov cx,offset do0end-offset do0 ;设置cx为传输长度 ;-是编译器识别的运算符号,编译器可以用它来进行两个常数的减法。
    cld     ;设置传输方向为正
    rep movsb
    
;设置中断向量:将do0的入口地址,写入中断向量表的0号表项中,使do0为0号中断的中断处理程序
    mov ax,0
    mov es,ax
    mov word ptr es:[0*4],200h
    mov word ptr es:[0*4+2],0

    mov ax,4c00h
    int 21h
    
;中断处理程序代码
    do0: jmp short do0start 
        db "overflow!"  ;放在data段执行完后内存被系统释放数据可能被覆盖

    do0start:
        mov ax,cs
        mov ds,ax
        mov si,202h     ;ds:si指向字符串,复制到0:200处
        
        mov ax,0b800h
        mov es,ax
        mov di,12*160+36*2  ;显示位置

        mov cx,9
        s:
            mov al,[si]
            mov es:[di],al
            inc si
            add di,2
            loop s
        mov ax,4c00h
        int 21h
    do0end:nop
code ends
end start

Un solo paso de interrupción

Básicamente, la CPU después de la terminación de la ejecución de una instrucción, el registro de bandera de si el monitorizado TF bit es 1, el único paso de interrupción se genera, se inicia el proceso de interrupción. Un solo paso de interrupción es un código de tipo de alarma 1, se plantea el proceso de interrupción es como sigue.

  1. TF bandera Trap (bandera trampa): operación de una sola etapa para la depuración;
  2. TF = 1, una trampa después de cada instrucción ejecutada, controla el sistema de ordenador;
  3. TF = 0 cuando la CPU está funcionando correctamente.
  4. Si la bandera de interrupción (indicador de interrupción);
  5. IF = 1 permite la solicitud de interrupción enmascarable CPU;
  6. SI = 0 Cerca interrumpido.
  • Obtener el código de tipo de alarma 1;
  • pila de registros bandera, TF, si se establece en 0;
  • CS, pila IP;
  • (IP) = (1 4), (CS) = (1 4 + 2).

Como se describió anteriormente, si TF = 1, a continuación, ejecutar una buenas instrucciones, CPU 1 se volverá a ejecutar el controlador de interrupción.

Supongo que te gusta

Origin www.cnblogs.com/chengmf/p/12499339.html
Recomendado
Clasificación