cpu中断处理

来源:互联网 发布:c4d mac破解版下载 编辑:程序博客网 时间:2024/05/19 11:35

CPU中断处理机制

中断过程:

(1) 取得中断类型码N

(2) pushf(标志位入stack)

(3) TF=0 ,IF=0

(4) Push cs

(5) Push i

(6) (IP)=(N*4),(cs)=(N*4+2)

(7) 最后cpu开始执行由程序员编写的中断处理程序

中断处理程序

(1) 保存用到的寄存器

(2) 处理中断

(3) 恢复用到的寄存器

(4) iret指令返回

 

iret指令:

Pop IP

Pop cs

Popf

 

 

Programmer eg:

 

Rep     movsb 指令:

(1) 传送的原始位置,段地址:code,偏移地址:offset

(2) 传送的目的位置:0:200

(3) 传送的长度:do0部分代码的长度

(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)

0 0
原创粉丝点击