匯編語言與計算機(jī)原理第七章_第1頁
匯編語言與計算機(jī)原理第七章_第2頁
匯編語言與計算機(jī)原理第七章_第3頁
匯編語言與計算機(jī)原理第七章_第4頁
匯編語言與計算機(jī)原理第七章_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第七章 中斷調(diào)用和中斷服務(wù)程序中斷調(diào)用是指計算機(jī)暫時停止當(dāng)前執(zhí)行程序,轉(zhuǎn)移到另一程序執(zhí)行,執(zhí)行結(jié)束后返回前面的程序繼續(xù)執(zhí)行。中斷調(diào)用類似于過程調(diào)用,和過程調(diào)用不同的是,中斷調(diào)用可以通過硬件,或者指令int實現(xiàn),前者稱為硬中斷調(diào)用,后者稱為軟中斷調(diào)用。中斷所調(diào)用的過程稱為中斷服務(wù)程序。在ibm-pc計算機(jī)系統(tǒng)中,中斷服務(wù)程序一般是計算機(jī)系統(tǒng)所提供的一組程序,用于完成輸入輸出等操作。程序員編寫程序時,可在應(yīng)用程序中直接調(diào)用中斷服務(wù)程序,完成輸入輸出等操作,這給程序設(shè)計帶來極大的方便。中斷服務(wù)程序可分為兩部分:一部分駐留在rom中,稱為bios;另一部分由操作系統(tǒng)程序提供。dos操作系統(tǒng)提供的中斷服

2、務(wù)程序保存在磁盤文件中(io.sys和ibmdos.sys),在系統(tǒng)啟動后裝入內(nèi)存。對于同一功能操作,一般既能選擇調(diào)用dos中斷服務(wù)程序,也能選擇bios中斷服務(wù)程序。例如,通過鍵盤輸入一個字符,可以調(diào)用dos中斷21h的01h子功能,也可以調(diào)用bios中斷16h的01h子功能。因為bios比dos更靠近硬件,因此建議盡可能使用dos功能,但是,在有些情況下必須使用bios功能,因為沒有對應(yīng)的等效的dos功能。bios和dos的中斷服務(wù)程序能處理大多數(shù)的輸入輸出操作,但是,有一些功能還沒有提供,這就要考慮使用i/o指令在端口級上編程,這就需要詳細(xì)了解端口的工作原理。本章概要介紹bios和dos

3、這兩部分中斷服務(wù)程序,及其調(diào)用方法。§7.1 中斷向量和中斷服務(wù)程序一、中斷號和中斷號分配ibm-pc 計算機(jī)系統(tǒng)給每個中斷服務(wù)程序分配一個順序編號,該編號稱為中斷號。中斷號分配如下:1cpu內(nèi)部控制的中斷服務(wù)程序:0號:除0中斷,當(dāng)程序發(fā)生除0錯誤時系統(tǒng)自動執(zhí)行該中斷服務(wù)程序;1號:單步執(zhí)行,當(dāng)單步執(zhí)行程序時,每執(zhí)行一條指令后暫停程序執(zhí)行;2號:不可屏蔽中斷,分配給由cpu的不可屏蔽中斷申請;3號:斷點,程序執(zhí)行到設(shè)置的斷點時執(zhí)行該中斷服務(wù)程序;4號:溢出,產(chǎn)生溢出錯誤時執(zhí)行;5號:打印屏幕,當(dāng)按下printscreen鍵時執(zhí)行;6號:保留;7號:保留。2中斷控制器控制執(zhí)行的中斷服

4、務(wù)程序:輸入輸出中斷是由中斷控制器控制執(zhí)行的中斷服務(wù)程序,ibm-pc計算機(jī)的中斷控制器有irq0irq7八個輸入端,其占用的中斷號如下:08h號: 時鐘中斷(irq0), 每秒鐘執(zhí)行18.2次;09h號: 鍵盤中斷(irq1);0ah號: 保留;0bh號: 通訊口com2(irq3);0ch號: 通訊口com1(irq4);0dh號: lpt2(irq5);0eh號: 磁盤控制器(irq6);0fh號: lpt1(irq7);如果用兩片中斷控制器芯片以級連方式工作,其irq8irq15對應(yīng)中斷號為70h77h。對應(yīng)的中斷服務(wù)程序可查閱相關(guān)手冊。3bios軟中斷服務(wù)程序:軟中斷是指通過int指

5、令調(diào)用的中斷服務(wù)程序,經(jīng)常使用的幾個重要的中斷服務(wù)程序的中斷號分配如下:10h 顯示器輸入輸出控制;13h 磁盤存?。?4h rs-232串行口通訊;16h 鍵盤輸入17h 打印輸出19h 引導(dǎo)裝入程序1ah 時鐘4dos軟中斷服務(wù)程序:中斷號20h2fh分配給dos系統(tǒng),其中包括前面介紹過的21h號中斷,為dos系統(tǒng)功能調(diào)用。這里不作具體介紹,如果要詳細(xì)了解可以查閱有關(guān)書籍或技術(shù)手冊。二、中斷向量和中斷向量表中斷服務(wù)程序的入口地址稱為中斷向量,由段基址和偏移地址兩部分組成。dos系統(tǒng)在啟動時將所有中斷程序的入口地址按中斷號順序存放在內(nèi)存的0000:00000000:03ff空間,稱為中斷向量

6、表。每個中斷向量在中斷向量表中占四個字節(jié),前兩個字節(jié)為中斷服務(wù)程序入口的偏移地址,后兩個字節(jié)為段基址。只要知道某個中斷服務(wù)程序的中斷號,用中斷號乘4,就可以計算出該中斷服務(wù)程序入口地址存放在中斷向量表的何處。例如dos系統(tǒng)功能服務(wù)程序的中斷號為21h,其中斷向量存放在地址0000:0084h處。使用debug程序可以查看dos系統(tǒng)功能服務(wù)程序的入口地址:-d 0:840000:0080 45 04 a7 08-4f 03 f0 0b 8a 03 f0 0b e.o.0000:0090 17 03 f0 0b bc 0f c9 00-c6 0f c9 00 d0 0f c9 00 .0000:0

7、0a0 6c 10 c9 00 66 04 70 00-b4 05 1e 03 6c 10 c9 00 l.f.p.l.0000:00b0 6c 10 c9 00 6c 10 c9 00-62 01 0f 0a cc 01 10 0a l.l.b.0000:00c0 ea e4 0f c9 00 ef 00 f0-6c 10 c9 00 01 00 88 09 .l.可以看到其入口地址為08a7:0445(注意低地址存放的是低字節(jié),高低址存放的是高字節(jié))。實際上知道了某個中斷服務(wù)程序的入口地址,也可以通過call指令調(diào)用該中斷服務(wù)程序,例如dos功能調(diào)用的入口地址為08a7:0445,可以通過

8、指令“call 08a7:0445”調(diào)用dos功能。進(jìn)入debug,使用“a”命令輸入下面程序段:-a126b:0100 mov ah, 02126b:0102 mov dl, 41126b:0104 call 08a7: 0445執(zhí)行上面程序:-g=100,109結(jié)果輸出字符“a”。軟中斷程序調(diào)用,就是通過int指令調(diào)用系統(tǒng)中斷服務(wù)程序。上面例子看到,通過中斷號可以從中斷向量表中查出對應(yīng)中斷服務(wù)程序的入口地址,然后通過call指令調(diào)用,但是過于繁瑣。一般調(diào)用中斷服務(wù)程序可以通過硬件,或使用int指令。int指令一般格式為:int 中斷號計算機(jī)執(zhí)行int指令的過程是:根據(jù)中斷號計算對應(yīng)中斷向量

9、在中斷向量表中地址;從中斷向量表中取出中斷服務(wù)程序的入口地址,將中斷服務(wù)程序段基址裝入cs寄存器,偏移地址裝入ip;計算機(jī)就轉(zhuǎn)移到對應(yīng)的中斷服務(wù)程序執(zhí)行;中斷服務(wù)程序執(zhí)行完畢返回被中斷的程序繼續(xù)執(zhí)行。§7.2 bios中斷服務(wù)程序調(diào)用由計算機(jī)廠商提供的bios中斷服務(wù)程序固化在rom內(nèi),計算機(jī)啟動后,這些中斷服務(wù)程序的入口地址被裝入中斷向量表,用戶可以通過硬件方式,或軟中斷方式調(diào)用bios中的中斷服務(wù)程序。下面通過示例說明bios的鍵盤輸入和視頻輸出中斷服務(wù)程序的使用。一、鍵盤中斷服務(wù)程序鍵盤中斷服務(wù)程序中斷號為16h,包含0h、1h、2h三個子功能。0h號子功能:讀鍵盤輸入的字符。

10、當(dāng)調(diào)用該子功能時,計算機(jī)等待接收鍵盤輸入。如果沒有按鍵按下,則等待;如果有按鍵按下,則將按鍵的掃描碼裝入ah寄存器,將按鍵的ascii碼裝入al寄存器。因為鍵盤上的功能鍵,如,f1、f2、等,沒有對應(yīng)的ascii碼,所以,當(dāng)按下的如果是功能鍵,al=0,ah=對應(yīng)鍵的掃描碼。因此,可以調(diào)用0h號子功能識別是否有功能鍵按下。01h號子功能:從鍵盤緩沖區(qū)讀一個字符,當(dāng)鍵盤緩沖區(qū)不為空時,將zf置0,將讀取的ascii碼裝入al寄存器;當(dāng)鍵盤緩沖區(qū)為空時,將zf置1后返回。02h號子功能:讀取雙態(tài)鍵,或組合鍵的狀態(tài),返回值al的對應(yīng)位含義如圖7.2.1所示。d7d6d5d4d3d2d1d0按下右sh

11、ift鍵 按下左shift鍵 按下ctrl鍵 按下alt鍵 scrollock鍵狀態(tài)numlock鍵狀態(tài)capslock鍵狀態(tài) insert鍵狀態(tài)scrollock鍵狀態(tài) 圖7.2.1 鍵盤狀態(tài)字節(jié)例721:調(diào)用鍵盤中斷0h子功能,接收一個按鍵,如果是功能鍵f1打印字母“a”,如果是其它功能鍵打印字母“b”,否則不打印。disp macro x ; ;顯示字符宏定義 mov dl, x mov ah, 02h int 21h endm.model small.code start: mov ah, 0 int 16h ;調(diào)用中斷16h的0號子功能 cmp al,0 ;是功能鍵否? jne ex

12、it ;不是功能鍵,結(jié)束。 cmp ah, 3bh ;是功能鍵f1否?3b是功能鍵f1的掃描碼。 jne f2 disp "a" jmp exit f2: disp "b" exit: mov ah, 4ch int 21h end start 例722:分別調(diào)用16h的01h和0h子功能接收鍵盤輸入,并打印輸入健的ascii碼。rol14 macro z ; 循環(huán)左移四次宏定義push cxmov cl, 4rol z, clpop cxendmdisp macro ; 顯示字符宏定義 push ax mov ah, 02h int 21h pop a

13、x endm.model small.code out16 proc near ; 十六進(jìn)制數(shù)輸出過程 mov cx, 2 l1:rol14 al mov dl, al and dl, 0fh cmp dl, 9 jbe l2 add dl, 7 l2:add dl, 30h disp loop l1 mov dl, 'h' disp ret out16 endp調(diào)用01h子功能: start: l3: mov ah, 1 int 16h ; 調(diào)用中斷16h的01h號子功能 jz l3 ; 鍵盤緩沖如果為空返回l3 call out16 ; 調(diào)用十六進(jìn)制數(shù)輸出子程序 mov a

14、h, 4ch int 21h end start 調(diào)用0h子功能: start: mov ah, 0 int 16h ; 調(diào)用中斷16h的0號子功能 call out16 ; 調(diào)用十六進(jìn)制數(shù)輸出子程序 mov ah, 4ch int 21h end start 有上面例子可以看到中斷16h的0h子功能和dos系統(tǒng)功能調(diào)用的01h子功能幾乎是相同的,在程序中到底應(yīng)當(dāng)調(diào)用那一個好呢?一般來說如果不是特殊需要應(yīng)盡量使用dos系統(tǒng)功能。二、視頻輸出中斷服務(wù)程序不同的顯示控制器,顯示輸出的特性不同,主要包括顯示分辨率和對圖形的支持。目前pc 計算機(jī)多采用avga顯示控制器,avga顯示控制器兼容以前的c

15、ga、ega、和vga所支持的特性。顯示輸出系統(tǒng)有多種工作模式,可以分為字符模式和圖形模式兩大類,每一類又可按分辨率和顏色數(shù)分成不同的子模式。例如字符模式可以有25行×40列、25行×80列等模式;圖形模式可以有分辨率640×480,16種顏色;或分辨率640×480,256種顏色等。字符模式下顯示字符存入顯示緩存,就會在顯示器上顯示出來。分為字符模式下的顯示緩存的開始內(nèi)存地址b8000h。顯示緩存區(qū)分為若干頁,每一頁和一滿屏數(shù)據(jù)相對應(yīng),使用時可以選擇其中的一頁。每個顯示字符占用兩個字節(jié),前一個字節(jié)為字符的ascii碼,后一個字節(jié)為字符模式字符的屬性。字

16、符屬性字節(jié)定義如下:位0位2 字符顏色,000:黑色字符, 001:帶下劃線, 111:白色字符等位3 字符亮度,0:普通亮度,1:高亮度位4位 背景顏色,000:黑色背景,111:白色背景位7 字符閃爍,0:普通字符,1:閃爍字符圖形模式的每個像素數(shù)據(jù)位數(shù)取決于可選擇的顏色,例如640×480,16色模式,每個像素需要4位二進(jìn)制數(shù),全屏共需要640×480×0.5=153600字節(jié)。圖形模式將顯示緩存區(qū)分成4個存儲位平面,其開始地址為a0000h,每個位平面存儲像素的一位,各個位平面的順序號相同位組合成屏幕上一個像素。dos系統(tǒng)將中斷號10h分配給視頻輸出中斷服

17、務(wù)程序。10h中斷包含0h13h子功能。下面介紹其中幾個子功能:106h子功能功能:當(dāng)前顯示頁上滾。輸入?yún)?shù):al=上滾行數(shù),0為初始化窗口(全屏幕)。 bh=字符填充屬性。 ch/cl=左上角行/列坐標(biāo)。 dh/dl=右下角行/列坐標(biāo)。202h子功能功能:置光標(biāo)位置。輸入?yún)?shù): bh=顯示頁號。 dh=行號。dl=列號。309h子功能功能:在當(dāng)前光標(biāo)位置顯示字符輸入?yún)?shù): bh=顯示頁號。 bl=顯示字符屬性 cx=重復(fù)次數(shù)其中字符屬性的各位定義如下:blrgbirgb背景前景亮度閃爍圖7.2.2 字符屬性例723:在顯示器的指定位置顯示文字。.model small.data str db

18、 "how are you!" count equ $-offset str.code start: mov al, 0 ;al=上卷行數(shù),al=0為清屏 mov cl, 0 ;開始行號 mov ch, 0 ;開始列號 mov dl, 79 ;結(jié)束行號 mov dh, 24 ;結(jié)束列號mov bh, 7 ;卷入行屬性為黑底白字mov ah, 06h ;子功能號06h送ah寄存器。 int 10h ;調(diào)用10h的06h子功能清屏幕 mov dh, 10 ;置光標(biāo)到10行,33列 mov dl, 33 ;光標(biāo)列號mov bh, 0 ;置顯示頁號mov ah, 2 int 10h

19、 ;調(diào)用02h子功能設(shè)置光標(biāo)位置 mov ax, data mov ds, ax mov si, offset str mov bl, 01110110b ;設(shè)置字符屬性白底紅字 mov cx, countl1: puch cx ;循環(huán)次數(shù)=顯示字符數(shù) mov cx, 1 ;顯示重復(fù)次數(shù) mov ah, 9 ;調(diào)用09h子功能顯示字符 mov al, si ;顯示字符ascii碼裝入al寄存器 int 10h ;顯示字符 inc si inc di; ;光標(biāo)左移 mov ah,2 int 10h ;重置光標(biāo)位置 pop cx loop l1exit:mov ah,4ch int 21h end

20、 start運(yùn)行上面程序在顯示器的10行,33列開始顯示白底紅字的“how are you! ”。例724:在顯示器上畫一條20個像素的直線。下面程序調(diào)用了10h功能的0h和0ch子功能:0號子功能:置顯示模式,al=顯示模式代碼,當(dāng)al=12h時的顯示模式為640×480像素,16色模式;0ch子功能:在屏幕上繪點,dx=開始行,cx=開始列,al=顏色編碼。.model small.code start: mov al, 12h mov ah, 0 int 10h ;設(shè)置640×480,16色模式 mov dx, 40 ;初始行 mov cx, 50 ;開始列 l1:

21、mov ah, 0ch ;調(diào)用寫像素功能 mov al, 7 ;設(shè)置顏色為白色 int 10h ;畫點 inc cx ;列數(shù)增1 cmp cx, 70 jne l1 exit: mov ah, 4ch int 21h end start§7.3 硬中斷一、中斷控制器除了通過int指令調(diào)用中斷服務(wù)程序,微型計算機(jī)可以通過硬件調(diào)用中斷服務(wù)程序??刂朴仓袛嗟男酒侵袛嗫刂破鳎缭缙诘膒c計算機(jī)使用intel的8259中斷控制器芯片,現(xiàn)在微機(jī)的中斷控制器和其它一些部件一起集成為一塊超大規(guī)模集成電路。中斷控制器占用20h和21h兩個i/o端口:120h對應(yīng)中斷控制器中的命令寄存器,可由cpu將

22、中斷控制命令代碼寫入到該寄存器,以控制中斷控制器的工作方式。例如,20h為停止中斷控制器工作代碼,使用下面指令將結(jié)束中斷:mov al, 20hout 20h, al其中out指令是i/o輸出指令,其執(zhí)行的操作是將al寄存器中的代碼發(fā)送到外設(shè)端口20h。中斷控制器的其它命令需要了解中斷控制器的內(nèi)部結(jié)構(gòu)和工作原理,過于復(fù)雜這里略去。2端口21h對應(yīng)中斷屏蔽寄存器,這是一個8位的寄存器,每一位和一個外部設(shè)備的中斷信號相對應(yīng),將其中的某位置1,就會禁止該位對應(yīng)的外部設(shè)備中斷申請。dos系統(tǒng)將如下中斷號分配給硬中斷服務(wù)程序:08h 時鐘中斷(irq0), 每秒鐘執(zhí)行18.2次;09h 鍵盤中斷(irq

23、1);0ah 保留;0bh 通訊口com2(irq3);0ch 通訊口com1(irq4);0dh lpt2(irq5);0eh 磁盤控制器(irq6);0fh lpt1(irq7);為了接入更多的外部設(shè)備,在微型計算機(jī)中將兩片中斷控制器芯片級連方式在一起,其irq8irq15對應(yīng)中斷號為70h77h。二、中斷控制器的工作原理當(dāng)有外部設(shè)備發(fā)出中中斷申請信號時,中斷控制器向cpu的可屏蔽中斷輸入端發(fā)出中斷申請信號,并同時將其對應(yīng)的中斷號通過數(shù)據(jù)線發(fā)送到cpu,cpu接到中斷控制器的信號后,暫時中止執(zhí)行正在執(zhí)行的程序,根據(jù)中斷控制器發(fā)來的中斷號計算中斷服務(wù)程序入口地址在中斷向量表中的位置,將中斷向

24、量裝入cs:ip,開始執(zhí)行中斷服務(wù)程序,中斷服務(wù)程序執(zhí)行結(jié)束后繼續(xù)執(zhí)行原來的程序。除了可以通過中斷屏蔽寄存器屏蔽某外設(shè)的中斷申請,將if標(biāo)志位置0,可以屏蔽所有中斷控制器的中斷申請。指令:cli 將if置零,關(guān)中斷;sti 將if置1,開中斷。§7.4 中斷程序設(shè)計有時用戶需要設(shè)計自己的中斷服務(wù)程序,用戶設(shè)計的中斷服務(wù)程序可以占用dos系統(tǒng)為用戶保留的中斷號。中斷服務(wù)程序應(yīng)當(dāng)遵循如下操作步驟:1中斷服務(wù)程序應(yīng)保護(hù)現(xiàn)場:將用到的寄存器壓如堆棧保護(hù);2關(guān)中斷,禁止其它中斷申請;3中斷處理;4開中斷;5向中斷控制寄存器發(fā)出中斷結(jié)束命令;6恢復(fù)現(xiàn)場;7返回下面程序是中斷程序設(shè)計的示例。該程序

25、中的ring過程為中斷執(zhí)行程序,當(dāng)每次時鐘信號到來時執(zhí)行該過程一次。每次執(zhí)行檢查變量count的值,如果count等于100就顯示字符串"the bell is ring!",然后將count清0;如果count小于100不顯示字符串,只是將count增1后返回。.model small.data mess db "the bell is ring!",0dh,0ah,"$" count dw 1.code ring proc near push ds pushu ax push cx push dx ;保護(hù)現(xiàn)場,將ds、ax、cx、dx值壓入堆棧 mov ax,data mov ds, ax cli ;關(guān)中斷 inc count cmp count, 100 jnz exit mov dx, offset mess mov ah, 09h int 21h ;調(diào)用dos的09h功能顯示字符串 mov count, 0 ;恢復(fù)count值exit: sti ;開中斷 mov al,20h out 20h, al ;發(fā)中斷結(jié)束命令 pop dx pop cx pop ax pop ds ;恢復(fù)現(xiàn)場 iret ;中斷返回 rin

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論