《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 解決方案 > 匯編基礎(chǔ):中斷

匯編基礎(chǔ):中斷

2017-06-10
關(guān)鍵詞: 匯編

中斷是計(jì)算機(jī)輸入輸出程序設(shè)計(jì)常用的控制方式,有一點(diǎn)計(jì)算機(jī)操作系統(tǒng)基礎(chǔ)的人對這個(gè)詞一定不會(huì)陌生,中斷控制技術(shù)主要應(yīng)用在以下幾個(gè)方面:

1、及時(shí)處理計(jì)算機(jī)中突發(fā)故障,比如說突然斷電、執(zhí)行指令時(shí)溢出內(nèi)存故障等等,

2、協(xié)調(diào)主機(jī)與外設(shè)工作速度的矛盾

3、在實(shí)時(shí)控制系統(tǒng)中,及時(shí)處理各控制點(diǎn)的現(xiàn)場

一、中斷源及中斷類型碼

引起中斷的原因叫做中斷源,8086/8088 CPU最多可以處理256種類型的中斷,這些中斷可來自CPU內(nèi)部的原因,也可來自外設(shè)的I/O請求,根據(jù)中斷源可將中斷分為外部中斷和內(nèi)部中斷兩大類。

1、外部中斷

外部中斷是由I/O設(shè)備或其他異常情況引起的,這類中斷的出現(xiàn)通常是隨機(jī)的,外部中斷又稱為硬件中斷,外部中斷又可分為不可屏蔽中斷和可屏蔽中斷,一般由外設(shè)引起的中斷為可屏蔽中斷,在標(biāo)志寄存器中,當(dāng)IF=1時(shí)可屏蔽中斷和不可屏蔽中斷都能被CPU響應(yīng),若IF=0時(shí),不可屏蔽中斷能被CPU響應(yīng),但屏蔽中斷不能夠唄CPU響應(yīng)。中斷允許標(biāo)志位IF的狀態(tài)可使用STL(使IF=1)和CLI(使IF=0)設(shè)置為開中斷和關(guān)中斷。

2、內(nèi)部中斷

由CPU內(nèi)部引起的中斷稱為內(nèi)部中斷,比如說除法運(yùn)算出錯(cuò)、執(zhí)行軟中斷指令、單步中斷等,它們都是非屏蔽中斷,內(nèi)部中斷一般又分為下面四種:

【a】、除法出錯(cuò)中斷:當(dāng)除數(shù)為0或處除法中所得商過大時(shí),立即產(chǎn)生一個(gè)內(nèi)部中斷。

【b】溢出中斷指令I(lǐng)NTO:這是一條軟件中斷指令,當(dāng)執(zhí)行該指令時(shí),若前面的運(yùn)算已產(chǎn)生溢出,是OF=1時(shí),便產(chǎn)生一個(gè)內(nèi)部中斷,若OF=0,邊不會(huì)產(chǎn)生中斷。

【c】、軟中斷指令I(lǐng)NT  n:這是系統(tǒng)提供兩組功能子程序,一組是ROM的BIOS中,另一組在OS中,這兩組功能子程序?qū)崿F(xiàn)常用的輸入輸出及文件處理等基本操作,使用軟中斷指令I(lǐng)NT,調(diào)用這些功能子程序,以內(nèi)部中斷形式執(zhí)行這些基本操作。

【d】、單步中斷:當(dāng)標(biāo)志寄存器中單步標(biāo)志位TF=1,CPU便進(jìn)入單步工作方式,即每執(zhí)行一條指令,就自動(dòng)產(chǎn)生內(nèi)部中斷,停止執(zhí)行程序,一共用戶檢查程序執(zhí)行結(jié)果。

二、中斷優(yōu)先級

當(dāng)同一時(shí)刻有若干個(gè)不同的中斷請求出現(xiàn)時(shí),CPU會(huì)先執(zhí)行那一個(gè)中斷呢?這就涉及到了中斷的優(yōu)先級問題,這就如同我們所學(xué)的高級語言中的符號運(yùn)算的優(yōu)先級一樣,而對于中斷的優(yōu)先級如下:

高------------------------------------------------------>低

內(nèi)中斷(除法出錯(cuò)、INT n、INTO)、不可屏蔽中斷、可屏蔽中斷、單步中斷

三、中斷過程

中斷的過程類似于我們之前所說的子程序調(diào)用過程,不同的是在保護(hù)中斷現(xiàn)場時(shí),除了保存返回地址CS和IP外,還要保存標(biāo)志寄存器FLAGS的內(nèi)容,另外當(dāng)中斷響應(yīng)后CPU自動(dòng)將IF和TF標(biāo)志清0,其目的是在CPU進(jìn)入處理程序后不再響應(yīng)其他別的中斷請求,如果我們還想在執(zhí)行某一個(gè)中斷的過程中還可以去執(zhí)行另外的中斷,我們可以通過STI指令將IF標(biāo)志位置1

一個(gè)完整的中斷過程有下面5個(gè)步驟:1、中斷請求2、中斷優(yōu)先級判定3、中斷響應(yīng)4、中斷處理5、中斷返回。

四、編寫自己的中斷處理程序

中斷處理程序大部分由BIOS或DOS系統(tǒng)提供的,當(dāng)我們編寫自己需要的中斷處理程序時(shí),應(yīng)該注意下面幾個(gè)問題:

1、程序中不用數(shù)據(jù)段,一般將數(shù)據(jù)變量直接放入代碼段中

2、程序中不用堆棧段,中斷處理程序借用調(diào)用者的堆棧段

3、在進(jìn)入中斷處理程序后,首先要保護(hù)現(xiàn)場。在程序中用到的寄存器需要壓入堆棧保護(hù)起來,在程序結(jié)束前恢復(fù)各寄存器內(nèi)容,使用時(shí)要注意堆棧后進(jìn)先出的原則

4、在中斷處理程序中,若允許中斷嵌套,應(yīng)保護(hù)現(xiàn)場后,用STI指令開中斷,在中斷處理程序的工作結(jié)束后,在恢復(fù)現(xiàn)場返回之前用CLI指令關(guān)中斷。

下面我們以一個(gè)簡單的例子來說明問題

例:編寫一個(gè)中斷處理程序,中斷類型號為60H,功能為顯示一個(gè)字符串“Yzs”

CODE    SEGMENT    
ASSUME  CS:CODE, DS:CODE    
MAIN    PROC    FAR    
START:  MOV AL, 60H         ;獲取原60H中斷向量    
   MOV AH, 35H    
   INT 21H            
   PUSH    ES          ;讀取的中斷向量位于ES:BX中    
   PUSH    BX          ;壓入堆棧保存    
   MOV AX, SEG INT_PROGRAM ;設(shè)置新的60H中斷向量    
   MOV DS, AX          ;中斷向量的段地址放在DS中    
   MOV DX, OFFSET  INT_PROGRAM ;中斷向量的地址放在DX中    
   MOV AL, 60H    
   MOV AH, 25H         ;用INT  21H的25H號功能設(shè)置中斷向量    
   INT 21H    
   INT 60H         ;用新的60H中斷向量    
   POP DX          ;把原中斷向量彈出堆棧    
   POP DS    
   MOV AL, 60H    
   MOV AH, 25H         ;恢復(fù)原中斷向量    
   INT 21H    
   MOV AX, 4C00H       ;返回DOS    
   INT 21H    
MAIN    ENDP    
DISP    DB  'Yzs'           ;待顯示的字符串    
       
INT_PROGRAM PROC    FAR     ;新60H中斷處理程序    
   PUSH    AX          ;保護(hù)現(xiàn)場    
   PUSH    BX    
   PUSH    CX    
   PUSH    DX    
   PUSH    SI    
   PUSH    DI    
   PUSH    BP    
   PUSH    DS    
   PUSH    ES    
   STI         ;開中斷    
   PUSH    CS      ;設(shè)置DS=CS    
   POP DS    
   MOV DX, OFFSET  DISP    
   MOV AH, 09H    
   INT 21H     ;顯示字符    
   CLI         ;關(guān)中斷    
   POP ES      ;恢復(fù)現(xiàn)場    
   POP DS    
   POP BP    
   POP DI    
   POP SI    
   POP DX    
   POP CX    
   POP BX    
   POP AX    
   IRET    
INT_PROGRAM ENDP    
CODE    ENDS    
   END START

五、BIOS和DOS中斷調(diào)用

我們所說的BIOS就是基本輸入輸出系統(tǒng),它存放在內(nèi)存地址較高地址區(qū)域的ROM中,它不僅處理系統(tǒng)的全部中斷,還提供對主要I/O接口的控制功能,每個(gè)功能的控制模塊的入口地址都在中斷矢量表中,在1K的中斷矢量表中,共有256個(gè)中斷調(diào)用入口地址,對這些中斷調(diào)用是通過軟中斷INT來實(shí)現(xiàn)的,軟中斷指令的操作數(shù)就是中斷類型碼。DOS是磁盤操作系統(tǒng),是由BIOS開機(jī)后自動(dòng)裝入內(nèi)存中的,DOS中斷是建立在BIOS之上的中斷,它借用了BIOS的軟中斷功能來調(diào)用系統(tǒng)的中斷服務(wù)程序。

在BIOS中斷類型中,0H--9H號中斷為硬中斷,一般不用程序調(diào)用,是由I/O接口觸發(fā)的。其他中斷則是由用戶通過指令來控制的。在DOS中斷調(diào)用中,主要使用21H中斷,因?yàn)樵撝袛嘀邪顺S玫逆I盤、磁盤、打印機(jī)等一系列I/O接口,在調(diào)用時(shí)只需將AH寄存器設(shè)置成所需要的功能號并設(shè)置一些其他所對應(yīng)的參數(shù)即可完成調(diào)用功能。因?yàn)樵谄匠5木幊讨幸话阌玫幂^多的是對硬件依賴不大且代碼量比較少的DOS中斷調(diào)用,所以下面我就側(cè)重介紹下有關(guān)DOS中斷調(diào)用的實(shí)例。

1、鍵盤DOS功能調(diào)用

有關(guān)鍵盤方面的INT  21H有1、6、7、8號功能

【a】、1號功能

功能:從鍵盤讀入一個(gè)字符,將字符回顯在屏幕上,同時(shí)將輸入的字符送入到AL寄存器中,如果讀到的字符是Ctrl+Break鍵,則結(jié)束程序執(zhí)行

【b】、6號功能

功能:直接讀寫控制臺

輸入?yún)?shù):AH=06H,若DL==00FH表示輸入鍵盤字符, 若DL=0--0FFH,表示輸出字符

返回結(jié)果:輸入時(shí),ZF=0,表示有字符輸入,AL為輸入字符的ASCII碼

ZF=1,表示無字符輸入,AL=0

輸出時(shí),無返回結(jié)果。

【c】、7號功能

功能:從鍵盤讀入一個(gè)字符,不回顯在屏幕上,同時(shí)將輸入字符送入到AL寄存器中,也不檢測是否為Ctrl+Break鍵。

【d】、8號功能

功能:1號功能基本相同,只是字符不回顯在屏幕上。

2、顯示器DOS功能調(diào)用

DOS中的INT  21H提供的顯示功能主要有以下三個(gè):

【a】、當(dāng)AH=02H時(shí),功能是顯示一個(gè)字符,光標(biāo)跟隨字符移動(dòng),檢測Ctrl+Break鍵。

輸入?yún)?shù):DL為待顯示字符的ASCII碼

返回結(jié)果:無

【b】、當(dāng)AH=06H時(shí),功能是顯示一個(gè)字符,光標(biāo)跟隨字符移動(dòng),但不檢測Ctrl+Break鍵。

輸入?yún)?shù):DL為待顯示字符的ASCII

返回結(jié)果:無

【c】、當(dāng)AH=09H時(shí),功能是顯示字符串,光標(biāo)跟隨字符串移動(dòng)

輸入?yún)?shù):DS:DX為待顯示字符串的首地址,字符串必須以“$”結(jié)尾

返回結(jié)果:無

我在我的另一篇博文中介紹過過于字符串的輸出這部分,是我這個(gè)匯編專題的第一篇,有興趣的朋友可以看下http://yiluohuanghun.blog.51cto.com/3407300/935340

我們再以一個(gè)例子結(jié)束我們這節(jié)關(guān)于中斷的知識:

例:編程產(chǎn)生10個(gè)0--51之間的隨機(jī)整數(shù),放入內(nèi)存BUF開始的各單元中。

DATA    SEGMENT    
   BUF DB  10  DUP  (?)    
DATA    ENDS    
CODE    SEGMENT    
ASSUME  CS:CODE, DS:DATA    
START:  MOV AX, DATA    
   MOV DS, AX    
           
   LEA BX, BUF    
   MOV CX, 10    
   STI    
NEXT:   PUSH    CX    
   MOV AH, 0    
   INT 1AH    
   MOV AL, DL    
   CBW    
   DIV 5    
   MOV [BX], AL    
   INC BX    
   POP CX    
   LOOP    NEXT    
   MOV 4CH    
   INT 21H    
CODE    ENDS    
   END START

到此為止,關(guān)于中斷部分我也大致給大家說完了,當(dāng)然了,我在這里寫的只是這方面的一點(diǎn)點(diǎn)東西,起個(gè)拋磚引玉的作用,希望能夠?qū)Υ蠹矣袔椭?/p>


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
好看的日韩视频| 亚洲你懂的在线视频| 国产精品乱人伦中文| 欧美人与禽猛交乱配| 欧美1区2区视频| 嫩草影视亚洲| 裸体一区二区| 久久一二三区| 久久午夜视频| 老司机久久99久久精品播放免费| 久久久久久亚洲精品不卡4k岛国| 欧美在线观看一区| 久久精品视频免费播放| 久久激情视频免费观看| 久久久成人精品| 久热精品视频在线| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲精品一线二线三线无人区| 亚洲激情视频在线播放| 亚洲国产一区视频| 亚洲乱码国产乱码精品精| av成人毛片| 亚洲一区自拍| 欧美一级大片在线观看| 久久成人国产精品| 亚洲精品专区| 亚洲一区二区精品在线观看| 性一交一乱一区二区洋洋av| 欧美在线观看一二区| 久久青青草原一区二区| 欧美高清在线视频观看不卡| 欧美日韩国产小视频在线观看| 欧美日韩中字| 国产精品永久免费观看| 国产综合自拍| 亚洲精品资源美女情侣酒店| 亚洲一区国产精品| 久久精品色图| 一区二区欧美精品| 久久国产精品99国产| 男女激情久久| 国产精品电影在线观看| 国产亚洲成精品久久| 亚洲国产精品ⅴa在线观看| 99ri日韩精品视频| 午夜综合激情| 亚洲日本无吗高清不卡| 亚洲欧美另类国产| 你懂的视频欧美| 国产精品久久久久久久久免费樱桃| 国产资源精品在线观看| 亚洲美女中文字幕| 欧美一级视频| 一本久道久久综合婷婷鲸鱼| 欧美一区二区福利在线| 麻豆国产精品一区二区三区| 欧美视频免费| 怡红院精品视频| 亚洲夜晚福利在线观看| 亚洲国产成人久久| 午夜精品理论片| 欧美激情视频网站| 国产欧美一区二区三区国产幕精品 | 久久精品一区二区国产| 亚洲色在线视频| 久久久久久亚洲精品不卡4k岛国| 欧美日韩大陆在线| 国产亚洲精品久久久久婷婷瑜伽| 亚洲精华国产欧美| 性欧美长视频| 亚洲图片自拍偷拍| 美女主播一区| 国产精品一二一区| 亚洲清纯自拍| 久久gogo国模啪啪人体图| 亚洲一区影音先锋| 欧美裸体一区二区三区| 韩国三级电影一区二区| 中文精品视频| 日韩视频在线你懂得| 久久久久久久久久久久久女国产乱| 欧美日韩国产另类不卡| 尤物精品在线| 欧美一级专区免费大片| 亚洲一区久久久| 欧美巨乳在线| 亚洲电影成人| 欧美中文字幕第一页| 午夜影视日本亚洲欧洲精品| 欧美精品在线视频| 在线观看一区欧美| 性欧美videos另类喷潮| 亚洲欧美一区二区精品久久久| 欧美精品乱人伦久久久久久| 一区在线播放| 久久精品一本| 久久精品人人| 国产欧美日韩精品一区| 亚洲视频精选| 亚洲午夜久久久久久久久电影院 | 亚洲亚洲精品在线观看 | 亚洲日本欧美天堂| 老司机一区二区| 国产一级揄自揄精品视频| 亚洲影院色无极综合| 亚洲一区二区三区欧美| 欧美另类在线观看| 亚洲黄色成人| 亚洲人成在线观看网站高清| 久久一区亚洲| 伊人久久婷婷色综合98网| 久久精品国产在热久久| 久久裸体艺术| 黄色成人在线网站| 久久精品一区蜜桃臀影院| 久久亚洲国产成人| 激情一区二区| 亚洲二区精品| 免费欧美在线| 亚洲国产精品va在线看黑人动漫| 亚洲黄一区二区| 免费不卡视频| 亚洲肉体裸体xxxx137| 一区二区三区日韩精品视频| 欧美日韩激情小视频| 亚洲精品综合| 亚洲永久精品大片| 国产精品资源在线观看| 久久av一区二区三区漫画| 美女精品国产| 亚洲日本成人在线观看| 一本到12不卡视频在线dvd| 欧美日韩一区视频| 亚洲一区二区在线视频 | 麻豆精品在线视频| 在线看片欧美| 99re视频这里只有精品| 欧美日韩综合不卡| 亚洲一区二区免费| 久久本道综合色狠狠五月| 狠狠综合久久| 夜色激情一区二区| 国产精品女主播一区二区三区| 欧美一区二区视频在线观看| 狂野欧美性猛交xxxx巴西| 亚洲啪啪91| 亚洲自拍偷拍色片视频| 国产三区精品| 亚洲日本乱码在线观看| 欧美少妇一区二区| 性欧美精品高清| 欧美成人在线免费观看| 中文高清一区| 久久精品中文| 亚洲激情av在线| 亚洲欧美日韩国产中文| 国内精品久久久久伊人av| 亚洲人成网站精品片在线观看| 欧美视频成人| 欧美中在线观看| 欧美日韩不卡视频| 亚洲欧美日韩国产成人精品影院| 久久综合精品国产一区二区三区| 亚洲精品免费一二三区| 午夜精品www| 尤物精品国产第一福利三区 | 亚洲欧洲日本专区| 性欧美暴力猛交另类hd| 在线精品视频免费观看| 一区二区三区毛片| 国产一区二区视频在线观看| 亚洲六月丁香色婷婷综合久久| 国产精品国产精品| 亚洲第一页在线| 国产精品久久久久aaaa| 亚洲高清视频一区| 国产精品久久久久久久7电影 | 欧美一区二区三区免费看| 亚洲国产精彩中文乱码av在线播放 | 西西人体一区二区| 亚洲高清在线视频| 欧美怡红院视频一区二区三区| 亚洲大胆av| 欧美一区二区三区男人的天堂 | 亚洲午夜精品| 在线观看欧美日韩| 欧美一区免费| 亚洲美女av网站| 裸体丰满少妇做受久久99精品| 亚洲一级黄色片| 欧美久久在线| 亚洲激情网址| 国产欧美视频一区二区| 一区二区三区视频观看| 极品少妇一区二区三区| 欧美一区二区三区视频在线| 亚洲免费观看视频| 欧美高清视频一区二区| 久久精品夜夜夜夜久久| 国产毛片久久|