一 中斷處理過程(和iret命令過程相反):
1、獲取中斷碼n
2、flag(標(biāo)志)寄存器入棧
3、CS、IP入棧
4、設(shè)置IP=4*n CS=4*n+2
二 中斷處理程序編寫
1、mov ax,cs
mov ds,ax
mov si,offset sqr ;設(shè)置ds:si指向sqr源地址
2、mov ax,0
mov es,ax
3、mov di,200h ;設(shè)置es:di指向目標(biāo)地址
mov cx,offset sqrend-offset sqr ;設(shè)置cx為傳輸長度 offset設(shè)置偏移地址
4、cld ;設(shè)置傳輸方向?yàn)檎?br /> rep movsb ;將sqr代碼送至0:200h
;rep是重復(fù)repeat(重復(fù))的縮寫,是重復(fù)執(zhí)行指令的前綴。用于重復(fù)執(zhí)行后面的指令,它通過設(shè)置cx來控制重復(fù)次數(shù)
;movsb以字節(jié)為單位進(jìn)行移動 movsd以雙字為單位進(jìn)行移動 movsw以字為單位進(jìn)行移動
5、mov ax,0
mov es,ax
mov word ptr es:[7ch*4],200h ;設(shè)置中斷向量表
mov word ptr es:[7ch*4+2],0 ;設(shè)置中斷向量表
6、mov ax,4c00h ;也可以寫成mov AH
int 21h ;DOS系統(tǒng)功能調(diào)INT 21H功能中的一種,表示帶返回碼結(jié)束用戶程序
;AH、功能、調(diào)用參數(shù)、返回參數(shù)
;AH存入00,功能:程序終止(同INT 20H),調(diào)用參數(shù):CS=程序段前綴
;AH存入01,功能:鍵盤輸入并回顯,調(diào)用參數(shù):AL=輸入字符
;AH存入02,功能:顯示輸出,調(diào)用參數(shù):DL=輸出字符。
;AH存入03,功能:異步通迅輸入,調(diào)用參數(shù):AL=輸入數(shù)據(jù)。
;AH存入04,功能:異步通迅輸出,調(diào)用參數(shù):DL=輸出數(shù)據(jù)
7、sqr: mul ax ;無符號乘法
iret ;IRET(interrupt return)中斷返回,推入堆棧的段地址和偏移地址彈出,使程序返回到原來發(fā)生中斷的地方。其作用是從中斷中恢復(fù)中斷前的狀態(tài)
;功能 恢復(fù)IP:pop IP; 恢復(fù)CS:pop CS; 恢復(fù)中斷前標(biāo)志寄存器裝態(tài)popf;恢復(fù)ESP(返回權(quán)限發(fā)生變化);恢復(fù)SS(返回權(quán)限發(fā)生變化)
8、sqrend:nop ;空指令 什么都不做,但是會占用一個指令的時間;用于程序指令的對齊,比如字對齊