資源描述:
《INT中斷服務程序.pdf》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫。
1、.INT中斷服務程序.李曉鋒2014-05-12............................................................李曉鋒INT中斷服務程序2014-05-121/21Outline1.INT中斷服務程序的編寫............................................................李曉鋒INT中斷服務程序2014-05-122/21INT指令過程CPU執(zhí)行intn指令,相當于引發(fā)一個n號中斷的中斷過程,執(zhí)行過程如下:1.取中斷類型碼n;2
2、.標志寄存器入棧,IF=0,TF=0;3.CS、IP入棧;4.(IP)=(n*4),(CS)=(n*4+2)。從此處轉去執(zhí)行n號中斷的中斷處理程序。............................................................李曉鋒INT中斷服務程序2014-05-123/21INT指令的調用可以在程序中使用INT指令調用任何一個中斷的中斷處理程序。.test1.asm示例.assumecs:codecodesegmentstart:movax,0b800hmoves,axmovbyteptre
3、s:[12*160+40*2],’!’int0codeendsendstart.............................................................李曉鋒INT中斷服務程序2014-05-124/21Test1.asm解讀程序是沒有做除法,但是在結尾使用了int0指令。CPU執(zhí)行int0指令時,將引發(fā)中斷過程,執(zhí)行0號中斷處理程序,而系統(tǒng)設置的0號中斷處理程序的功能是顯示“Divideover?ow”,然后返回到系統(tǒng)??梢?,int指令的最終功能和call指令相似,都是調用一段程序。因此
4、,一般情況下,系統(tǒng)將一些具有一定功能的子程序,以中斷處理程序的方式提供給應用程序調用。我們在編程的時候,可以用int指令調用這些子程序。當然,也可以自己編寫一些中斷處理程序供別人使用。以后,我們可以將中斷處理程序簡稱為中斷例程。............................................................李曉鋒INT中斷服務程序2014-05-125/21編寫供應用程序調用的中斷例程前面,我們已經編寫過中斷0的中斷例程了,現(xiàn)在我們討論可以供應用程序調用的中斷例程的編寫方法。我們通過兩個實例來討論
5、:實例一編寫、安裝中斷7ch的中斷例程,實現(xiàn)求一word型數(shù)據(jù)的平方。實例二編寫、安裝中斷7ch的中斷例程,實現(xiàn)將一個全是字母,以0結尾的字符串,轉化為大寫。............................................................李曉鋒INT中斷服務程序2014-05-126/21示例一示例一編寫、安裝中斷7ch的中斷例程:功能:求一word型數(shù)據(jù)的平方。參數(shù):(ax)=要計算的數(shù)據(jù)。返回值:dx、ax中存放結果的高16位和低16位。應用舉例:求2*34562...............
6、.............................................李曉鋒INT中斷服務程序2014-05-127/21示例一assumecs:codecodesegmentstart:movax,3456;(ax)=3456int7ch;調用中斷7的中斷例程ch,\計算中的數(shù)據(jù)的平方axaddax,axadcdx,dx;存放結果,講結果乘以2movax,4c00hint21hcodeendsendstart.....................................................
7、.......李曉鋒INT中斷服務程序2014-05-128/21安裝程序我們要做三部分工作:1.編程實現(xiàn)求平方功能的程序;2.安裝程序,我們將其安裝在0:200處;3.設置中斷向量表,將程序的入口地址保存在7ch表項中,使其成為中斷7ch的中斷例程。............................................................李曉鋒INT中斷服務程序2014-05-129/21程序解讀注意,在中斷例程sqr的最后,要使用iret指令。iret指令的功能CPU執(zhí)行int7ch指令進入中斷例程之前
8、,標志寄存器、當前的CS和IP被壓入棧中,在執(zhí)行完中斷例程后,應該用iret指令恢復int7ch執(zhí)行前的標志寄存器和CS、IP的值,從而接著執(zhí)行應用程序。int指令和iret指令的配合使用與call指令和r