美文网首页
(五)中断

(五)中断

作者: SwiftAlan | 来源:发表于2017-08-12 11:39 被阅读0次

    1、内中断的产生

    CPU 的内部发生某些需要立即处理的的事情时,就会发出内部中断信息。

    除法错误,比如执行 div 指令产生的除法溢出;
    单步执行;
    执行 info 指令;
    执行 int 指令。

    CPU 要进行不同的处理,首先要知道中断信息的来源,所以中断信息必须包含识别来源的编码,我们称为中断类型码,8086 CPU中断类型码为一个字节型数据,可以表示 256 种中断信息的来源,简称中断源。在 8086 CPU 中,上述的 4 种中断源表示如下:

    除法错误:0
    单步执行:1
    执行 info 指令:4
    执行 int 指令,该指令的格式为 int n ,指令中的 n 为字节型立即数,是提供给 CPU 的中断类型吗。

    2、中断向量表

    8086 CPU 接收到中断信息后,用 8 位的中断类型码通过中断向量表找到相应的中断处理程序入口地址;中断向量表在内存中存放着,对于 8086 PC 机,中断向量表指定放在内存地址 0 处,从内存 0000:00000000:03FF1024 个 单元中存放着中断向量表,中断向量表只能放在这里。
    那么在中断向量表中,一个表项存放着一个中断向量,也就是一个中断处理程序的入口地址,这个入口地址包括段地址和偏移地址,所以一个表项占两个字,高地址字存放段地址,低地址存放偏移地址。
    中断过程大致如下:

    (1)取得中断类型码
    (2)pushf 标志寄存器入栈
    (3)tf = 0, if = 0 设置标志寄存器的第 8 位和第 9 位的值为 0
    (4)push cs CS 入栈
    (5)push ip IP 入栈
    (6)(ip) = (n*4), (cs) = (n*4+2) 从内存地址为中断类型码 4 中和中断类型码 4+2 的两个字单元中读取中断处理程序的入口地址。
    (7)执行中断程序

    例:重新编写一个 0 号中断处理程序,它的功能是在屏幕中间显示 overfliw! 然后返回到操作系统

    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 ;设置 CS 为传输长度
            cld                             ;设置传输方向为正
            rep movsb
            mov ax,4c00h
            int 21h
        do0:jmp short do0start
            db "overflow!"
    do0start:   mov ax,cs
                mov ds,ax
                mov si,202h         ;设置 ds:si 指向字符串
                mov ax,0b800h
                mov es,ax
                mov di,12*160+36*2  ;设置 es:di 指向显存空间的中间位置
                mov cx,9            ;设置 CX 为字符串长度
              s:mov al,[si]
                mov es:[di],al
                inc si
                loop s
                mov ax,4c00h
                int 21h
    do0end:nop
    code ends
    end start

    3、int 指令

    int 指令的指令格式为:int nn 为中断类型码,上面已有提及过,执行过程如下

    (1)取中断类型码 n;
    (2)标记寄存器入栈,if = 0,tf = 0;
    (3)CS、IP 入栈;
    (4)(IP)=(n*4),(CS)=(n*4+2)
    (5)执行 n 号中断处理程序

    相关文章

      网友评论

          本文标题:(五)中断

          本文链接:https://www.haomeiwen.com/subject/paefrxtx.html