5128086/8088的中断响应过程 (续) 标志寄在器入栈 8088各种中断源的优先权, 实际上是指被识别出来的先后 多种中断同时请求时 最先响应的则可能是 单步中断或NM中断 弹出CS:IP 弹出标志寄存器 11 返回被中断程序
11 5.1.2 8086/8088的中断响应过程 (续) 还有NMI Y TEMP=1 标志寄存器入栈 TEMP=TF,IF=TF=0 CS:IP入栈 获取中断向量 执行服务程序 弹出CS:IP 弹出标志寄存器 返回被中断程序 (1) (2) (3) (4) (5) N N Y (6) ◼ 8088各种中断源的优先权, 实际上是指被识别出来的先后 ◼ 多种中断同时请求时, 最先响应的则可能是 单步中断或NMI中断
51.380868088的中断向量表 中断向量:中断服务程序的入口地址(首地址) ■逻辑地址含有段地址CS和偏移地址I(32位) 每个中断向量的低字是偏移地址、高字是段地址, 需占用4个字节 8088微处理器从物理地址000H开始,依次安排各 个中断向量,向量号也从0开始 256个中断占用1KB区域,就形成中断向量表 向量号为N的中断向量的 物理地址=N×4 12
12 5.1.3 8086/8088的中断向量表 ◼ 中断向量:中断服务程序的入口地址(首地址) ◼ 逻辑地址含有段地址CS和偏移地址IP(32位) ◼ 每个中断向量的低字是偏移地址、高字是段地址, 需占用4个字节 ◼ 8088微处理器从物理地址000H开始,依次安排各 个中断向量,向量号也从0开始 ◼ 256个中断占用1KB区域,就形成中断向量表 向量号为N的中断向量的 物理地址=N×4
51.4内部中断服务程序 ■编写内部中断服务程序与编写子程序类似 n利用过程定义伪指令 PROC/ENDP 第1条指令通常为开中断指令STI ■最后用中断返回指令IRET 通常采用寄存器传递参数 主程序需要调用中断服务程序 调用前,需要设置中断向量 n利用INTn指令调用中断服务程序 13
13 5.1.4 内部中断服务程序 ◼ 编写内部中断服务程序与编写子程序类似 ◼ 利用过程定义伪指令PROC/ENDP ◼ 第1条指令通常为开中断指令STI ◼ 最后用中断返回指令IRET ◼ 通常采用寄存器传递参数 ◼ 主程序需要调用中断服务程序 ◼ 调用前,需要设置中断向量 ◼ 利用INT n指令调用中断服务程序
中断向量表初始化 读取中断向量 入口:AH=35HAL=中断类型号(中断号) n出口参数:ES:BX=中断向量 重写中断向量 入口:AH=35H AL=中断类型号DSDX=要写入的中断向量 14
14 中断向量表初始化 ◼ 读取中断向量 ◼ 入口:AH=35H,AL=中断类型号(中断号) ◼ 出口参数:ES:BX=中断向量 ◼ 重写中断向量 ◼ 入口:AH=35H, ◼ AL=中断类型号,DS:DX=要写入的中断向量
例5.1内部中断服务程序 ■编写80H号中断服务程序 ■功能:显示以“0”结尾字符丰的功能 利用显示器功能调用INT0H ■字符串缓冲区首地址为入口参数 DS:DX(段地址:偏移地址)传递参数 15
15 例5.1 内部中断服务程序 ◼ 编写80H号中断服务程序 ◼ 功能:显示以“0”结尾字符串的功能 ◼ 利用显示器功能调用INT10H ◼ 字符串缓冲区首地址为入口参数 ◼ DS:DX(段地址:偏移地址)传递参数