汇编语言-王爽(学习笔记)-12章 中断

第12章:内中断

中断:CPU在执行当前正在执行的指令后,检测到从CPU内部或者外部产生的信息,便立即执行收到的信息。用来处理中断信息的程序是中断处理程序。

CPU收到中断信息后,要知道中断信息的来源(CS,IP值)。中断来源由中断类型码标识。中断类型码为一个字节的数据,所以可以有256种中断信息来源。CPU由8位的中断类型码,在中断向量表中查找,找到中断处理函数的入口地址(CS,IP)。中断向量表指定从内存地址0开始,256*4=1024单元(0000:0000~0000:03ffh)的内容是中断向量表。

CPU在以下情况产生中断:

(1)除法错误,比如,执行div指令产生除法溢出。:中断类型码:0

(2)单步执行:中断类型码:1

(3)执行into指令:中断类型码:4

(4)执行int指令。:指令格式为int n,n为字节型立即数,提供给CPU的中断类型码。

/

中断过程:

使用中断类型码,在中断向量表中找到中断处理程序的入口,设置CS:IP。这工作由CPU硬件自动完成。

8086CPU收到中断信息后:

(1)取得中断类型码N

(2)pushf

(3)TF=0,IF=0

(4)push cs

(5)push ip

(6)ip=(N*4),CS=(N*4+2)

以上CPU硬件自动完成,完成最后一步后,CPU执行由程序员编写的中断处理程序。

中断处理程序编写:

(1)保存用到的寄存器(2)处理中断(3)回复寄存器(4)iret指令返回。

iret<=>pop ip    pop cs    popf

编写0中断处理函数(实验12)

CODES SEGMENT
    
START:
   ;将中断处理函数放入安全的内存区
    mov ax,cs
    mov ds,ax
    mov ax,offset d0
    mov si,ax
    mov ax,0
    mov es,ax
    mov di,200h
    
    mov cx,offset d0end - offset d0
    cld
    rep movsb
   
    d0:;中断处理函数
    
    jmp short  d0start
    
    db "overflow!"
    
    d0start:;中断处理函数,将字符串送进显存
    
    mov ax,cs
    mov ds,ax
    mov si,202h
    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
    d0end:
    nop
  
CODES ENDS
    END START

单步中断:执行一条语句后,进入中断,为实现单步跟踪提供机制。

CPU在执行一条指令后,如果检测到TF=1,则执行单步中断。如果在进入中断处理程序之前没有将TF位置零,CPU在执行一条指令后,又将进入中断,无限轮回233,所以这是将TF位清零的原因。

响应中断特殊情况:。执行完向ss寄存器传入数据指令后,即便发生中断,CPU也不响应。因此我们要将设置ss和设置sp连续存放。

 

 

 

 

 

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值