中断向量是中断服务程序的入口地址,每条中断信息包含四个字节,低两个字节存放中断程序的偏移地址
I
P
IP
IP ,高两个字节存放中断程序的段地址
C
S
CS
CS ,
C
P
U
CPU
CPU 在执行完一条指令都会检查中断,如果有中断发生,则通过 中断号*4 找到中断向量表中的中断信息,按照高高低低的原则载入
C
S
,
I
P
CS,IP
CS,IP 寄存器,从而执行中断程序。
示例:修改时钟中断
使用中断是
08
h
08h
08h,对应程序的
I
P
IP
IP和
C
S
CS
CS分别存储在中断向量表的
E
S
:
08
h
∗
4
ES:08h*4
ES:08h∗4和
E
S
:
08
h
∗
4
+
2
ES:08h*4+2
ES:08h∗4+2的位置,所以我们只需要把我们的程序的
C
S
CS
CS和
I
P
IP
IP放到对应的位置,但程序运行的时候,时钟中断会自己发生,就会运行我们的程序。
具体代码如下:
cli ;关中断
push ES ;保存ES的值
push AX
xor AX,AX
mov ES,AX ;将ES的值置为0
mov AX,CS ;将我们代码的CS移动到AX中
mov word[ES:08h*4],_Timer ;设置时钟中断向量的偏移地址。_Timer就是我们自己写的程序。
mov word[ES:08h*4+2],AX ;设置时钟中断的段地址=CS
注意:nasm中一个word表示两个字节。