CPU中断处理机制
中断过程:
(1)
(2)
(3)
(4)
(5)
(6)
(7)
中断处理程序
(1)
(2)
(3)
(4)
iret指令:
Pop
Pop
Popf
Programmer
Rep
(1)
(2)
(3)
(4)
其中:
es:di指向目的地址
ds:si指向源地址
cx:传输长度
cld:传输方向为正方向
程序内容
assume cs:code
code segment
Start :
mov ax,cs
mov ds,ax
mov si ,offset do0 ;设置ds:si指向源地址
mov ax,0
mov es,ax
mov di,200h ;设置es:di指向目的地址
mov cx,offset Do0end-offset do0 ; 设置cx为传输长度
cld ;设置传输方向为正
rep movsb
;设置中断向量表
mov ax,0
mov es,ax
mov word ptr es:[0*4],200h
mov word ptr es:[0*4+2],0
mov ax,4c00h
int 21h
do0:
jmp short do0start ;该指令占两个字节
db "Welcome to fishc.com!";两个字节之后为data段
do0start:
mov ax,cs
mov ds,ax
mov si,202h ;设置ds:si只想字符串
mov ax,0b800h
mov es,ax
mov di,12*160+32*2 ;设置es:[di]指向显存空间的中间位置
mov cx,21 ; 设置cx为字符串长度
s:
mov al,[si]
mov es:[di],al
inc si
add di,1
mov es:[di],al
add di,1
loop s
mov ax,4c00h
int 21h
Do0end:nop
code ends
end start
单步中断
单步中断:cpu在执行完一条指令之后,如果检测到标志位寄存器的TF位为1,则产生单步中断,引发中断过程。单步中断类型码为1,则他引发的中断过程如下。
(1) 取得中断类型码1;
(2) 标志寄存器入栈,TF、IF设置为0;
(3) Cs、IP入栈
(4) (IP)=(1*4),(cs)=(1*4+2)
中断过程:
(5) 取得中断类型码N;
(6) 标志寄存器入栈,TF、IF设置为0;
(7) Cs、IP入栈
(8) (IP)=(N*4),(cs)=(N*4+2)
单步中断:cpu在执行完一条指令之后,如果检测到标志位寄存器的TF位为1,则产生单步中断,引发中断过程。单步中断类型码为1,则他引发的中断过程如下。
(1) 取得中断类型码1;
(2) 标志寄存器入栈,TF、IF设置为0;
(3) Cs、IP入栈
(4) (IP)=(1*4),(cs)=(1*4+2)
中断过程:
(5) 取得中断类型码N;
(6) 标志寄存器入栈,TF、IF设置为0;
(7) Cs、IP入栈
(8) (IP)=(N*4),(cs)=(N*4+2)