第12章内中断知识点及检测点实验12答案

第12章 内中断

中断指的是CPU接收到来自CPU内部和外部的信息后停止执行当前指令,转而执行去处理传送过来的信息,我们称这种信息叫中断信息
内中断便是处理来自CPU内部的中断信息
~

12.1 内中断的产生

在8086CPU内部,出现下面情况将引发内中断:
1.除法错误,div指令导致除法溢出
2.单步执行
3.执行into指令
4.执行int指令
在本章我们将会了解到除法溢出和单步执行这两种情况

12.2 中断处理程序 12.3 中断向量表

介绍几个概念:

中断处理程序:指发生中断时计算机处理这类中断信息的程序
中断源:产生中断信息的事件叫中断源
中断类型码:中断分为多种,而类型码可以让计算机定位此时发生的
           中断属于哪一类,中断信息中会包含中断源的类型码
中断向量:中断处理程序的入口地址
中断向量表:存放中断处理程序所在地址的内存空间

流程:
CPU接收到中断信息 -->
CPU由中断信息中的中断类型码定位中断源 -->
由类型码在中断向量表找到对应中断处理程序的中断向量(入口地址) -->
cs:ip修改为该地址开始执行中断处理程序

检测点12.1

(1) 0070:018B
(2)4N   4N+2

(1)入口地址包括断地址和偏移地址,则存储一个中断处理程序的入口地址需要4个字节也就是2个字,我们要求的目标地址前面还有3个入口地址,那么按顺序找到答案,其中段地址高位(后面的),偏移地址低位
(2)一个入口地址占4个字节,存储N号中断源对应的中断处理程序入口地址的内存单位应该为4×N=4N
段地址高位,在偏移地址的后2个字节处,则4N+2

12.4 中断过程 12.5 中断处理程序和iret指令

在执行中断处理程序之后我们需要返回之前正在执行的地方,那么修改cs和ip前往中断处理程序之前需要将我们原本标志寄存器,CS,IP的值放入栈中,执行完中断处理程序之后再出栈取回来,具体步骤为:

取得类型码然后
1.pushf
2.TF=0,IF=0    ;为什么需要设置为0后面会说明
3.push cs
4.push ip
5.(ip) = (N*4)   (CS) = (N*4+2)
执行中断处理程序....
开始将栈中得程序收回...
6.pop IP
7.pop CS
8.popf

我们可以用iret指令代替6~8条指令,iret指令得作用是将栈中得内容赋给CS,IP和标志寄存器

12.8 除法错误中断得处理

下面的是对除法溢出这种情况进行中断处理程序的编写,内容不能一概而述,故不在于此多言,这个是本章学习最重要的部分,需要看书详细理解才会做实验题!

12.11 单步中断

当计算机执行完一条指令之后发现标志寄存器中TF=1,将立即执行单步中断处理程序

我们知道,CPU在通电的情况下如果不进行其他操作,将自动一直按某一地址不停的执行下去,然而我们在debug调试使用t命令时,如果我们不然执行t命令是不会执行下一步的,这就单步中断在起作用,debug将TF设置为1引发单步中断

值得注意的是,TF为1CPU将进入单步中断程序,进入之前需再将TF置0,否则执行完中断处理程序的第一条指令之后又会重新开始执行

12.12 响应中断的特殊情况

即使中断信息被接受了,有些操作也不会停下来而是继续执行,比如mov ss,ax之后执行mov sp,16,这就是为什么当初我们在debug发现执行mov ss,ax之后mov sp,16直接被执行的原因

实验12 编写0号中断的处理程序

assume cscodesg
codesg segment
  start:mov ax,0    ;将我们程序标号do0处到doend之间的内容复制到0000:0200H处
        mov es,ax
        mov ax,cs
        mov ds,ax
        mov si,offset do0
        mov di,0200H
        mov cx,offset doend-offset do0   ;标号doend和标号do0之间的长度就是要复制的长度
        cld         ;cld指令,则开始正向复制
        rep movsb  ;movsb指令,开始复制

        mov di,0        ;我们将do0部分的中断处理程序复制到0000:0200h处后,将0000:0200h这个入口地址放到0000:0000处
                    ;即中断向量表0号中断向量
        mov word ptr es[di],0200h
        mov word ptr es[2],0

        mov ax,4c00h
        int 21h

    do0:jmp short s      ;程序主体,作用是在屏幕中输出:divide error
        db 'divide error!'  ;但是目前这部分内存空间是计算机分配的后面可能会存入其他数据,故我们复制到0000:0200h处

      s:mov ax,08B00h
        mov es,ax
        mov si,0202H
        mov ax,0
        mov ds,ax
        mov di,1607+322
        mov cx,13

     s1:mov al,ds[si]
        mov es[di],al
        inc si
        add di,2
        loop s1
        iret
  doend:nop         ;结束
  
        mov ax,4c00h
        int 21h
codesg ends
end start
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值