汇编语言第三版(王爽著)(第12章.内终中断)

中断信息。中断的意思是指,CPU不再接着向下执行,而是转去处理这个特殊信息

12.1 内中断的产生

当CPU内部由下面情况发生的时候,将产生相应的中断信息。(中断类型码表示中断的来源
1.除法错误,中断类型码0
2.单步执行,中断类型码1
3.into,中断类型码4
4.int 后面跟的是中断类型码

12.2 中断处理程序

用来处理中断信息的程序被称为被称为中断处理程序
中断类型码的作用就是用来定位中断处理程序
我们如何根据8位中断类型码知道中断处理程序的段地址和偏移地址呢

12.3 中断向量表

中断向量表,就是中断处理程序入口地址的列表。
中断向量表在内存中保存,其中存放着256个中断源所对应的中断处理程序的入口
CPU只要知道了中断类型码,就可以将中断类型码作为中断向量表的表项号,定位相应的表项,从而得到中断处理程序的入口地址
内存中 0000:0000-0000:03ff这1024个字节中存放着中断向量表
入口地址包括段地址和偏移地址,所以一个表项占两个字节,高地址存放段地址,低地址存放偏移地址。

检测点12.1

1.0070:018b
2.4n 4n+2

12.4 中断过程

1.用中断类型码找到中断向量,并用它设置CS和IP,这个工作是由CPU的硬件自动完成的。这个过程称为中断过程
中断过程如下:
(1)取得中断类型码N;
(2)TF=0,IF=0
(3)push CS
(4)push IP
(5)IP = N4 CS=N4+2

在最后一步完成之后,CPU开始执行由程序员编写的中断处理程序。

12.5 中断处理程序和iret指令

由于CPU随时都可能检测到中断信息,也就是说,CPU随时都可能执行中断处理程序,所以中断处理程序必须一直存储在内存某段空间中。
中断处理程序的编写方法:
1.保存用到的寄存器
2.处理中断
3.恢复用到的寄存器
4.用iret返回

iret的作用
pop ip
pop cs
popf

12.7 编程处理0号中断

只有当某段程序的入口地址放入中断向量表的N号表项中,才能成为中断处理程序。
0:200-0:2ff存放中断处理程序

12.8 安装(将中断处理程序写入内存)

assume cs:code
code segment
start:mov ax,cs
mov ds,ax
mov si,offset do
mov ax,0
mov es,ax
mov di,200h
;设置源地址和目的地址
mov cx,offset d0end-offset d0
cld
rep movsb
设置中断向量表
mov ax,4c00h
int 21h
do0:显示字符串
mov ax,4c00h
int 21h
do0end:nop
code ends
end start

12.9 do0

因为do0程序随时可能被执行,而它要用到字符串overflow!,所以该字符串也应该放在一段不会被覆盖的空间中。
正确的程序如下:
assume cs:code
code segment
start:mov ax,cs
mov ds,ax
mov si,offset do0
mov ax,0
mov es,ax
mov di,200h
mov cx,offset do0end-offset do0
cld
rep movsb
;安装do0
设置中断向量表
mov ax,4c00h
int 21h
do0:jmp short do0start
db "overflow!"

do0start:mov ax,cs
mov ds,ax
mov si,202h
mov ax,0b800h
mov es,ax
mov di,12160+362
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

12.10 设置中断向量

mov ax,0
mov es,ax
mov word ptr es:[0],200h
mov word ptr es:[2],0

12.11 单步中断

debug中t命令的作用
实现单步跟踪程序的执行过程

12.12 响应中断的特殊情况

将设置SS:SP的指令连续存放

你可能感兴趣的:(汇编语言,笔记)