版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第5章 輸入輸出和中斷5.1 I/O設(shè)備數(shù)據(jù)傳送方式5.2 中斷傳送方式5.3 BIOS中斷調(diào)用方式5.4 綜合舉例開 始5.1 I/O設(shè)備數(shù)據(jù)傳送方式 5.1.1 端口尋址方式 5.1.2 CPU與外設(shè)的傳送方式返回本章目錄5.1.1 端口尋址方式 接口芯片實際占用的端口數(shù)目端口號(16進制)8237DMA控制器16000F8259A中斷控制器220218255并行接口46063DMA頁面寄存器(74LS670)48083NMI寄存器1A08253計數(shù)器/定時器44043表5.1 IBM-PC接口芯片的端口地址分配表返回本節(jié)5.1.2 CPU與外設(shè)的傳送方式控制信息:是由CPU發(fā)送給外部設(shè)備
2、的,命令其處于某種方式或執(zhí)行某種操作。狀態(tài)信息:從接口輸入的狀態(tài)信息表示I/O設(shè)備當前的狀態(tài)。數(shù)據(jù)信息則是I/O設(shè)備和CPU真正要交換的信息。數(shù)據(jù)信息可分為三種類型:數(shù)字量、模擬量和開關(guān)量。各種外設(shè)的工作速度相差很大,根據(jù)其工作狀態(tài),大致可分為三類:l外設(shè)的工作狀態(tài)是可以確定的。l 外設(shè)的工作狀態(tài)是不能確定的。l高速的外設(shè)與計算機進行數(shù)據(jù)交換。CPU與外設(shè)之間傳輸數(shù)據(jù)的控制方式有三種:即程序方式、中斷方式和DMA方式。 1程序方式(1)無條件傳輸方式,如圖5.1所示?!纠?.1】用一個8位輸出鎖存器控制8個發(fā)光二極管,使發(fā)光管從上向下依次一個一個地閃亮,每個發(fā)光管亮一段規(guī)定的時間。設(shè)輸出鎖存器
3、的地址為84H。圖5.1 用無條件傳送方式的例子控制程序如下:START:MOV AL,01H;控制代碼01HALNEXT:OUT84H,AL;(AL)84H CALLDELAY ;延時一定時間ROLAL,1;控制代碼循環(huán)左移1位JMPNEXT;無條件轉(zhuǎn)NEXT繼續(xù)程序循環(huán)DELAY:PROC ;定義延時子程序DELAYPUSHAX MOVAX,COUNT TIME: DECAX (2)條件傳送方式JNZTIME POPAX RET ;返回調(diào)用程序DELAY ENDP ;子程序調(diào)用結(jié)束 【例5.2】假設(shè)從某輸入設(shè)備上輸入一組數(shù)據(jù)送緩沖區(qū),接口電路如圖5.2所示:程序如下:DATASEGMENT
4、MESSIDB “BUFFER OVERFLOW”, “$”BUFFDB 60 DUP(?)DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBX,OFFSET BUFF;送緩沖區(qū)指針MOVCX,60;送計數(shù)初值OUT0FCH,AL;啟動設(shè)備WAIT:INAL,0FAH;查詢狀態(tài),READY=0,則等待TESTAL,01HJZWAITWAIT:INAL,0FAH;查詢狀態(tài)READY=0,則等待TESTAL,01HJZWAITINAL,0F8H;輸入數(shù)據(jù)MOVBX,ALINCBXLOOPWAIT;檢測緩沖區(qū)是否
5、滿,不滿再輸入MOVDX,OFFSET MESSI;緩沖區(qū)滿,輸出標志字符串。MOVAH,09H INT21HMOVAH,4CH INT21HCODEENDS ENDSTART圖5.2 查詢式輸入接口電路CPU打印機控制器打印機DBSTBBUSYCB DB AB圖5.3 打印機連接示意圖 【例5.3】向打印機輸出字符。 圖5.4 例5.3程序流程圖源程序:MOVBX ,OFFSET, BUFFER;置緩沖區(qū)偏移量MOVCX,CHRTL;置輸出字符計數(shù)器BG:MOVAL,BX;取字符MOVDX,378H;輸出字符到控制器OUTDX,ALMOVDX,379H;讀打印機狀態(tài)WT:INAL,DXTES
6、TAL,80H ;判忙否?JZWT ;忙,重查詢MOVDX,37AH ;形成選通信號MOVAL,0DH ;令打印機打印字符OUTDX,AL MOVAL,0CHOUTDX,ALINCBX;指向下一輸出字符LOOPBG 2中斷方式當外設(shè)需要與CPU進行數(shù)據(jù)交換時,由外設(shè)向CPU發(fā)出中斷請求,當外部設(shè)備完成一次輸入或輸出操作后,主動向CPU報告(即中斷請求),請求CPU為它服務(wù)。允許CPU啟動多個外設(shè)工作,即允許CPU與多個外設(shè)同時工作。3直接存儲器存取方式(DMA)方式DMA方式,主要是利用DMA控制器來管理數(shù)據(jù)的輸入輸出操作。如圖5.5、5.6所示。由DMA控制器向地址總線發(fā)出存儲器地址信號,并
7、給出存儲器讀或?qū)懨?,就可以把存儲器中讀出的數(shù)據(jù)送到外部設(shè)備或者把外部設(shè)備輸出的數(shù)據(jù)寫入存儲器中。DMA主要是利用程序?qū)崿F(xiàn)對DMA控制器的初始化(置控制字),然后由DMA控制器管理數(shù)據(jù)傳送。存儲器外部設(shè)備CPUDMA請求DMA響應(yīng)HOLDHLDADMA控制器 圖5.5 DMA控制器與CPU關(guān)系圖 圖 5.6 DMA方式工作過程圖返回本節(jié)5.2 中斷傳送方式5.2.1 概述5.2.2 80868088的中斷系統(tǒng)返回本章目錄5.2.1 概述1中斷、中斷源及中斷系統(tǒng)2中斷的作用(1)并行操作(2)實時處理(3)故障處理3中斷源種類及中斷類型(1)中斷源的種類 l硬件故障l 輸入/輸出設(shè)備l外部事件(
8、2)中斷類型根據(jù)是否可屏蔽,分為不可屏蔽中斷和可屏蔽中斷。根據(jù)位置不同分為內(nèi)中斷和外中斷。根據(jù)處理程序入口的方法,分為向量中斷和非向量中斷。根據(jù)產(chǎn)生中斷的原因,又分為軟件中斷和硬件中斷。4. 中斷優(yōu)先級和中斷嵌套IBM-PC規(guī)定中斷的優(yōu)先級次序為:優(yōu)先級高 內(nèi)中斷(語法錯,INT0,INT) 非屏蔽中斷(NMI) 可屏蔽中斷(INTR) 低 單步中斷圖5.7中斷嵌套程序執(zhí)行過程。主程序高級中斷程序更高級中斷程序高級中斷程序低級中斷程序.中斷處理過程微型機在運行程序的過程中,若出現(xiàn)中斷申請時,CPU及時地擇優(yōu)響應(yīng),立即停止現(xiàn)行程序的執(zhí)行,并保護現(xiàn)場,接著進行相應(yīng)的中斷服務(wù)。服務(wù)完畢之后,立即恢復(fù)
9、被中斷的現(xiàn)場,返回被中斷程序的斷點,繼續(xù)往下執(zhí)行。中斷處理大致包括如下過程:中斷請求、中斷響應(yīng)、中斷處理及中斷返回。返回本節(jié)5.2.2 80868088的中斷系統(tǒng)1中斷源80868088系統(tǒng)設(shè)有如下的中斷源:l外部中斷:包括可屏蔽中斷INTR和不可屏蔽中斷NMI。l 內(nèi)部中斷:包括除法錯中斷、溢出中斷、軟中斷、和單步中斷。其中斷源間的關(guān)系如圖5.8所示。 圖5.8 8086/8088的中斷源 (1)內(nèi)部中斷內(nèi)部中斷簡稱內(nèi)中斷,又稱軟件中斷。它不需要外部硬件支持。并且不受中斷標志位狀態(tài)的影響。8086/8088內(nèi)部中斷有以下5種: l 除數(shù)為中斷類型0中斷 l 單步中斷類型1中斷 l 斷點中斷類
10、型3中斷 l 溢出中斷類型4中斷 l 中斷指令指令I(lǐng)NTn中斷(2)外部中斷l(xiāng)不可屏蔽中斷:常用于緊急故障處理或緊迫事件處理中。l可屏蔽中斷:可屏蔽中斷的設(shè)置主要是為了實現(xiàn)多中斷的處理和中斷嵌套的應(yīng)用。2中斷向量和中斷向量表圖5.9 8086/8088系統(tǒng)的中斷向量表表5.2 常用中斷類型用其名稱3設(shè)置中斷向量用指令來為中斷類型N設(shè)置中斷向量:MOVAX,0MOVES,AX MOVBX,N*4;中斷入口地址MOVAX,OFFSET INTHANDMOVES:WORD PRTBX,AX;設(shè)置中斷處理程序INTHANDMOVAX,SEG INTHAND;的入口地址MOVES:WORD PRTBX+
11、2,AXINTHAND:;中斷處理程序 IRET【例5.4】使用DOS功能調(diào)用存取中斷向量。MOVAL,N MOVAH,35H;調(diào)用DOS功能35HINT21HPUSHES ;保存原中斷向量PUSHBX PUSHDSMOVAX,SEG INTHANDMOVDS,AX;置用戶定義的中斷處理MOVDX,OFFSET INTHAND;程序INTHAND的入口MOVAL,N;地址(段地址和偏移地址)MOVAH,25H ;設(shè)置新的中斷向量INT21H POPDS POPDX;恢復(fù)原中斷向量POPDS MOVAL,N MOVAH,25H INT21HRET INTHAND:;中斷處理程序IRET4中斷過程
12、當中斷發(fā)生時,由硬件自動完成下列動作:(1)取中斷類型號N。(2)標志寄存器(PSW)內(nèi)容入棧。(3)當前代碼段寄存器(CS)內(nèi)容入棧。(4)當前指令計數(shù)器(IP)內(nèi)容入棧。(5)禁止外部中斷和單步中斷(IF=0,TF=0)。(6)從中斷向量表中取4*N的字節(jié)內(nèi)容送IP,取4*N+2的字節(jié)內(nèi)容送CS。(7)轉(zhuǎn)中斷處理程序。 圖5.10中斷響應(yīng)過程58259A可編程中斷控制器例如,只允許打印機中斷,可設(shè)置如下中斷字:MOVAL,01111111B OUT 21H,AL如果系統(tǒng)要新增設(shè)打印機中斷,則可用下列指令實現(xiàn):IN AL,21H ANDAL,01111111BOUT21H,AL結(jié)束外中斷用下
13、面的指令: MOVAL,20H OUT20H,AL 6中斷處理程序圖5.11 中斷屏蔽寄存器和中斷命令寄存器下面是主程序為中斷所做的準備工作和硬件,(包括CPU和外設(shè)接口)自動完成的動作。(1)設(shè)置中斷和向量。(2)設(shè)置設(shè)備的中斷屏蔽位。(3)設(shè)置CPU的中斷允許位IF(開中斷)。(4)外設(shè)接口送中斷請求給CPU。(5)當前指令執(zhí)行完成后,CPU送響應(yīng)信號給外設(shè)接口。(6)CPU接收中斷類型號。(7)當前的PSW,CS和IP保存入棧。(8)清除IF,TF。(9)中斷向量送IP和CS。編寫中斷處理子程序的步驟,請注意與子程序編寫的一些不同之處。(1)保存寄存器內(nèi)容。(2)如允許中斷嵌套,則開中斷
14、(STI)。(3)處理中斷。(4)關(guān)中斷。(5)送中斷結(jié)束命令(EOI)給中斷命令寄存器。(6)恢復(fù)寄存器內(nèi)容。(7)返回被中斷的程序(IRET)。【例5.5】編一段中斷處理程序,在主程序運行的過程中,每隔10秒鐘響鈴一次,同時在屏幕上顯示“The bell is ring!”。編程如下:DATASEGMENTCOUNTDW 1MESSDB The bell is ring!,0DH,0AH,$DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATA,ES:DATAMAINPROC FARSTART:PUSHDSSUBAX,AXPUSHAXMOVAX,DATAMOVD
15、S,AXMOVAL,1CH;取中斷向量MOVAH,35HINT21HPUSHES;存原中斷向量段址PUSHBX;存原中斷向量偏移量PUSHDSMOVDX,OFFSET RING;新偏移量送DXMOVAX,SEG RINGMOVDS,AX;新段址送DSMOVAL,1CHMOVAH,25HINT 21H;寫入新的中斷向量POP DSIN AL,21H;讀取中斷屏蔽字ANDAL,11111110B;允許定時器中斷OUT21H,ALSTI;開中斷MOVDI,2000DELAY:MOV SI,3000;延時 DELAY1:DECSIJNZDELAY1DECDIJNZDELAYPOPDX;恢復(fù)原中斷向量P
16、OPDSMOVAL,1CHMOVAH,25HINT21HRETMAINENDPRING:PROCNEARPUSHDS;各工作寄存器內(nèi)容入棧PUSHAXPUSHCXPUSHDXMOVAX,DATAMOVDS,AXSTIDECCOUNT;計秒值JNZEXITMOVDX,OFFSET MESSMOVAH,09HINT21HMOVDX,100INAL,61HANDAL,0FCHSOUND:XORAL,02OUT61H,AL;揚聲器發(fā)聲MOVCX,140HWAIT1:LOOPWAIT1;延時等待DECDXJNESOUNDMOVCOUNT,182EXIT:CLI;關(guān)中斷POPDXPOPCXPOPAXPOP
17、DSIRET;中斷返回RINGENDPCODEENDSENDSTART返回本節(jié)5.3 BIOS中斷調(diào)用方式5.3.1 概述5.3.2 常用BIOS功能調(diào)用5.3.3 圖形顯示程序設(shè)計返回本章目錄5.3.1 概述BIOS使用的中斷類型號為10H 1FH。下面給出BIOS中斷調(diào)用表(見表5-3)。BIOS中斷調(diào)用方法:調(diào)用BIOS程序模塊,需要給出入口參數(shù)(有的調(diào)用無入口參數(shù))。然后通過跟有中斷類型號的軟中斷指令調(diào)用,經(jīng)中斷向量表取出調(diào)用模塊的入口地址,就可自動地轉(zhuǎn)入相應(yīng)的BIOS處理模塊中去了。表5.3 BIOS中斷調(diào)用表返回本節(jié)5.3.2 常用BIOS功能調(diào)用1鍵盤I/O中斷調(diào)用(16H中斷調(diào)
18、用)16H中斷調(diào)用有三個功能,功能號為02。(1)AH=0 本功能為從鍵盤讀字符到AL寄存器中。(2)AH=1 本功能為讀鍵盤緩沖區(qū)字符到AL寄存器中,并置ZF標志位。(3)AH=2 本功能為讀取特殊功能鍵的狀態(tài)。2打印機I/O中斷調(diào)(17H中斷調(diào)用)17H中斷調(diào)用有三個功能,功能號為02。(1)AH=0 本功能為把AL中指定的字符在打印機上打印出來。(2)AH=1 本功能為對指定的打印機初始化。(3)AH=2 本功能為讀取打印機的狀態(tài)信息。MOVDX,0;用0號機打印機MOVAL,A;輸出A字符MOVAH,0;0號功能INT17H;調(diào)用17H中斷TESTAH,08H;判I/O錯否JNZIOE
19、R;有錯,轉(zhuǎn)錯誤處理 JOER:【例5.6】打印機輸出一字符,判I/O錯否。如錯,轉(zhuǎn)錯誤處理程序段。3時鐘中斷調(diào)用(1AH中斷調(diào)用)1AH中斷調(diào)用有二個功能。功能號為0和1。(1)AH=0 本功能為讀取時鐘計數(shù)器的當前值。(2)AH=1 本功能為設(shè)置時鐘計數(shù)器的當前值?!纠?.7】計算程序執(zhí)行時間。圖5.12給出有關(guān)程序段流程圖。執(zhí)行測試程序段TDB0;時單元MDB0;分單元SDB0;秒單元取時間計數(shù)器值TNEQU65520;小時運算數(shù)MNEQU1092;分鐘運算數(shù)計算執(zhí)行時間為時、分、秒SNEQU18;秒運算數(shù)轉(zhuǎn)換為BCD時間MOV CX,0;置時鐘計數(shù)器MOVDX,0;初值為0顯示時間MO
20、VAH,1INT1AH ;被測程序段. MOVAH,0;取時鐘計數(shù)器當前值INT1AHCALLTDIV;計算當前執(zhí)行時間子程序CALLTBCD;轉(zhuǎn)為BCD數(shù)子程序CALLTDISP;顯示執(zhí)行時間子程序被測程序段.;其他處理圖5.12 例5-7程序段流程圖【例5.8】生成隨機數(shù)程序。源程序:RANDPROCPUSHCXPUSHDXPUSHAXSTIMOVAH,0;讀時鐘計數(shù)器值INT 1AHMOVAX,DX;清高6位ANDAH,3MOVDL,101;除101,產(chǎn)生0100余數(shù)DIVDLMOVBL,AH;余數(shù)存BX,作隨機數(shù)POPAXPOPDXPOPCXRETRANDENDP返回本節(jié)5.3.3 圖
21、形顯示程序設(shè)計10H中斷調(diào)用共有16個功能。功能號為015。(1)設(shè)置顯示方式(0號功能)入口參數(shù):AH=0(功能號),AL=設(shè)置方式(07)。出口參數(shù):無。(2)設(shè)置光標類型(1號功能)入口參數(shù):AH=1(功能號),CH=光標開始行,CL=光標結(jié)束行。出口參數(shù):無。根據(jù)CX給出光標的大小。AL顯示方式04025黑白文本方式14025彩色文本方式28025黑白文本方式38025彩色文本方式4320200彩色圖形方式5320200黑白圖形方式6640200黑白圖形方式78025黑白文本方式(單色顯示卡)(3)設(shè)置光標位置(2號功能) 入口參數(shù):AH=2(功能號),BH=頁號,DH=行號,DL=列
22、號。 出口參數(shù):無。根據(jù)DX確定了光標位置。(4)讀當前光標位置(3號功能)入口參數(shù);AH=3(功能號),BH=頁號。出口參數(shù):DH=行號,DL=列號,CX=光標大小。(5)初始窗口或向上滾動(6號功能)入口參數(shù):AH=6,AL=上滾行數(shù),CX=上滾窗口左上角的行、列號。DX=上滾窗口右下角的行、列號。BH=空白行的屬性。出口參數(shù):無。當滾動后,底部為空白輸入行。(6)初始窗口或向下滾動(7號功能)入口參數(shù):AH=7,AL=下滾行數(shù),CX=下滾窗口左上角的行、列號。DX=下滾窗口右下角的行、列號。BH=空白行的屬性。出口參數(shù):無。當滾動后,頂部為空白輸入行。(7)讀當前光標位置的字符與屬性(8
23、號功能)入口參數(shù):AH=08H,BH=頁號。出口參數(shù):AL為讀出的字符,AH為字符屬性。表5.4 黑白方式顯示屬性字節(jié)表5.5 彩色文本方式顯示屬性字節(jié)位號76 5 43 2 1 0屬性字節(jié)BLR G BI R G B閃爍選擇背景顏色前景顏色110 棕RGB顏色000 黑001藍010綠011青100紅101品紅111白表5.6 背景顏色組合IRGB顏色IRGB顏色0000黑1000灰0001藍1001淺藍0010綠1010淺綠0011青1011淺青0100紅1100淺紅0101品紅1101淺品紅0110棕1110黃0111白1111強度白表5.7 前景顏色組(8)在當前光標位置寫字符和屬性(
24、9號功能)入口參數(shù):AH=9,BH=頁號,AL=字符的ASCII碼,BL=字符屬性,CX=寫入字符數(shù)。出口參數(shù):無。(9)在當前光標位置寫字符(10號功能)入口參數(shù):AH=0AH,BH=頁號,AL=字符的ASCII碼,CX=寫入字符數(shù)。出口參數(shù):無。(10)設(shè)置彩色組或背景顏色(11號功能)入口參數(shù):AH=0BH,BH=0或1,BH為0時,設(shè)置背景顏色。當BH=1時 ,可設(shè)置彩色組,即為顯示的像素點確定顏色組。出口參數(shù):無。背顏色與對應(yīng)值見表5.8。(11)寫像素(12號功能)入口參數(shù):AH=0CH,DX=行數(shù),CX=列數(shù),AL=彩色值(AL的D7為1,則彩色值與當前點內(nèi)容作異或運算)。出口參
25、數(shù):無。(12)讀像素(13號功能)BLIRGB顏色BLIRGB顏色00000黑81000灰10001藍91001淺藍20010綠101010淺綠30011青111011淺青藍40100紅121100淺紅50101品紅131101淺品紅60110棕141110黃70111亮灰151111白表5.8 背景顏色組合表表5.9 彩色分組入口參數(shù):AH=0DH,DX=行數(shù),CX=列數(shù)。出口參數(shù):AL=彩色值。(13)寫字符并移光標位置(14號功能)入口參數(shù):AH=0EH,AL=寫入字符,BH=頁號,BL=前景顏色(圖形方式)。出口參數(shù):無。(14)讀當前顯示狀態(tài)(15號功能)入口參數(shù):AH=0FH。出
26、口參數(shù):AL=當前顯示方式,BH=頁號,AL=屏幕上字符列數(shù)?!纠?.9】在屏幕10行2024列處顯示五朵梅花,顏色各異,且要求中間一個朵能夠閃爍。 源程序:DATASEGMENTATRIDB 6EH,52H,94H,52H,6EHDATAENDSSTACK SEGMENT PARA STACK STACKDB 200 DUP(0)STACKENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACKST:MOVAX,DATAMOVDS,AXMOVAH,0;設(shè)置8025彩色文本方式MOVAL,3INT10HLENSI,ATRI;屬性字節(jié)值表首址存SIMOVDI,
27、5;顯示5個字符MOVDX,0A13H;顯示位置MOVAH,15;取當前頁號INT10H LP:MOVAH,2;置光標位置INCDLINT10HMOVAL,5;顯示梅花形字符MOVBL,SIMOVCX,1MOVAH,9INT10HINCSI、;指向下一屬性字節(jié)DECDI;判顯示完否 JNZLP;未完轉(zhuǎn)LP再顯示MOVAH,4CH;完,返回DOSINT21HCODEENDSENDST返回本節(jié)5.4 綜合舉例【例5.10】【例5.11】【例5.12】【例5.13】【例5.14】【例5.15】返回本章目錄【例5.10】下面給出一個利用鍵盤I/O功能的程序例。用INT 16H(AH=0)調(diào)用實現(xiàn)鍵盤輸
28、入字符。DATASEGMENT BUFFDB 100 DUP(?)MESSDB NO CHARACTER!,0DH,0AH,$DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATA START:MOVAX,DATA MOVDS,AX MOVCX,100 MOVBX,OFFSET BUFF;內(nèi)存緩沖區(qū)首址 LOP1:MOVAH,1 PUSHCX MOVCX,0 MOVDX,0 INT1AH ;設(shè)置時間計數(shù)器值為0LOP2:MOVAH,0INT1AH;讀時間計數(shù)值 CMP DL,100 NZLOP2;定時時間未到,等待MOV AH,1INT16H;判有無鍵入字符JZDO
29、NE;無鍵輸入,則結(jié)束MOV AH,0INT16H;有鍵輸入,則讀出鍵的ASCII碼MOVBX,AL ;存入內(nèi)存緩沖區(qū)INCBXPOPCXLOOPLOP1;100個未輸完JMPENDONE:MOV DX,OFFSET MESSMOVAH, 09HINT21H;顯示提示信息EN:MOV AH,4CH INT21HCODEENDS ENDSTART返回本節(jié)【例5.11】利用8253-5演奏樂曲。圖5.13 鋼琴上的部分音符對應(yīng)頻率程序如下:EXTRN NEW-:FARDATASEGMENTFTANBLEDW 262,190,220,190,220,262,220,262,294,0TTABLEDW
30、 40,40,40,0,10,40,20,80DATAENDSSTACKSEGMENT DW 100 DUP(?)STACKENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSINGPROCFARMOVAX,DATAMOVDS,AXMOVSI,OFFSET FTABLELEABP,TTABLECALLPLAYMOVAX,4C00HINT21HRETSINGENDPPLAYPROCPUSHBXPUSHDIPUSHSIPUSHBPAGAIN:MOVDI,SI;取音調(diào)頻率CMPDI,0;是否演奏完JEEND-PLAYMOVBX,DS:BP;取持續(xù)時間CALL
31、NEW-BEEP;演奏一個音符ADDSI,2 ADDBP,2;修改指針JMPAGAIN POPDIPOPBXRET PLAYENDPNEW-BEEPPROCNEARPUSHAXPUSHCXPUSHDXPUSHDIMOVAL,0B6H OUT43H,AL;8253-5通道2設(shè)置方式3MOVDX,12H;16位,二進制計數(shù)MOVAX,34DAHDIVDI;計算時間常數(shù)OUT42H, ALMOVAL,AHOUT42H,AL;送時間常數(shù)MOVAL,03HOUT61H,AL;使與門打開,GETE2有效,揚聲器響DELAY2:MOV CX,12500DELAY1:OOP ELAY1;延時10ms,使聲音維
32、持DECBXJNZDELAY2;根據(jù)BX的內(nèi)容延遲MOVAL,00H OUT 61H,AL;關(guān)閉揚聲器POPDI POPDXPOPCX POPAXRETNEW-BEEPENDPCODEENDSENDSING返回本節(jié)【例5.12】使用0AH系統(tǒng)功能從鍵盤中接收一個以回車符結(jié)尾的字符串。 程序如下:STACKSEGMENT PARA STACK STACKDB 64 DUP(STACK)STACKENDSDATASEGMENT PARA PUBLIC DATAKBUFLDB 255KBUFCDB ?KBUFFDB 255 DUP(?)DATAENDSCODESEGMENT PARA PUBLIC
33、CODEASSUME CS:CODE,SS:STACK,DS:DATAPRNTYPPROC FARPUSHDS;保存舊的數(shù)據(jù)段SUBAX,AXPUSUAXMOVAX,DATAMOVDS,AXMOVAH,0FH ;重建顯示模式以清屏INT10H MOVAH,0INT10HMOVDX,0000H ;設(shè)定光標為0行0列MOVBH,0;0頁MOVAH,2INT10HMOVDX,1碼 ;1號打印機接口MOVAH,1;初始化打印機INT17HPRT1:MOVDX,OFFSET KBUFL;DS:DX指向輸入緩沖區(qū)MOVAH,0AH;用鍵盤向緩沖區(qū)輸入字符串INT21HMOVCL,KBUFCCMPCL,0;
34、若鍵入回車符則退出JEEXITMOVCH,0;使CX為串長(不包括結(jié)尾回車符)LEASI,KBUFFMOVDX,1;1號打印機接口PRT2:LODSB;以DS:SI為指針取1字符至ALMOVAH,0;向打印機送此字符INT17HTESTAH,01H;打印機超時否?JNZEXIT;是,結(jié)束程序LOOPPRT2;CX減1,不為0再送下一字符MOVAL,ODH;字符串打印完畢,打印機回車換行MOVAH,0 INT17HMOVAL,0AHMOVAH,0INT17HMOVBH,0;讀0頁光標當前位置MOVAH,3INT10HINCDH;光標下移一行MOVDL,0;并移至左端返回本節(jié)【例5.13】鍵盤輸入
35、09間任一數(shù),分別顯示內(nèi)定的一串字符。程序如下:STACKSEGMENT PARA STACK STACKDB 256 DUP(0)STACKENDSDATASEGMENT PARA PUBLIC DATATHIRTYDB 30PARMDB 128 DUP(0MSG0DB I LIKE IBM PCMSG1DB 8080 PROGRAMMING IS FUNMSG2DB TIME TO BUY MOUY DISKETTES MSG3DB THIS PROGRAM WORKSMSG4DB TURN OFF THAT PRINTER! MSG5DB I HAVE MORY ME MORY THEN
36、 YOU MSG6DB THE PSP CAN BE USEFULMSG7DB BASIC WAS EASIER THENTHISMSG8DB DOS IS INDISPENSABLE MSG9DB LSAT MESSAGE OF THE DAYERRMSGDB ERROR! INVALID PARAMETER!DATAENDSCODESEGMENT PARA PUBLIC CODESTARTPROC FARASSUMECS:CODE PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVES,AX ASSUMEES:DATAMOVDS,AXASSUMEDS:DATAMOVAH,0;
37、功能號為0INT16H;鍵盤入,字符在AL SUBAL,0;減去字符0的ASCII碼JCERROR;鍵入字符編碼小于30H則轉(zhuǎn)移CMPAL,9;是9嗎?JAERROR;大于9轉(zhuǎn)移,否則順序MOVBX ,OFFSET MSG0;MSG0 位移送BX MULTHIRTY;鍵入字符之二進制數(shù)30ADDBX ,AX;計算輸出信息在表中位移CALLDISPLAY;轉(zhuǎn)子顯示信息RET;返回ERROR:MOVBX,OFFSET ERRMSG;出錯顯示信息位移送BXCALLDISPLAY;轉(zhuǎn)子顯示信息RET;返回DISPLAYPROCNEARMOVCX,30;顯示的字符總數(shù)DISP:MOVAL,BX;取字符送
38、ALCALLDISPCHAR;轉(zhuǎn)子顯示字符INCBX;指向下一字符LOOPDISP MOVAL,0DH;回車符送ALCALLDISPCHAR;轉(zhuǎn)子顯示MOVAL,0AH;換行符送ALCALLDISPCHAR;顯示RET;返回 DISPLAYENDP DISPCHARPROCNEARPUSHBX;保護BXMOVBX,0;0送BX MOVAH,14;功能調(diào)用輸出字符POPBX;恢復(fù)BXRET;返回DISPCHARENDPSTARTENDPCODEENDSENDSTART返回本節(jié)【例5.14】在屏幕上顯示包括隱含文件在內(nèi)的所有文件目錄程序如下:STACKSEGMENT PARA STACK STAC
39、KDB 256 DUP(0);256個字節(jié)棧STACKENDSDATASEGMENT PARA PUBLIC DATADIRECTORYDB 3584 DUP(0);存放盤目錄區(qū)域NAMECOUNT DB 0;文件名計數(shù)ERRMSGDB DISK ACCESS ERROR!DATAENDSCODESEGMENT PARA PUBLIC CODESTARTPROC FARASSUME CS:CODEPUSHDS;保留PSP段址MOVAX,0PUSHAX;保留返回地址偏移MOVAX,DATAMOVDS,AX;建立數(shù)據(jù)段可尋址性ASSUME DS:DATAMOVES,AX;建立特別段可尋址性ASSU
40、ME ES:DATAMOVCX,3;讀盤次數(shù)RETRY:PUSHCX;保留再試計MOVBX,OFFSET DIRECTORY;指向內(nèi) 存目錄存放區(qū)MOVDL,0;驅(qū)動器號AMOVDH,0;盤的0面MOVCH,0;0道MOVCL,6;6個扇區(qū)MOVAL,7;從第7扇區(qū)開始MOVAH,2;讀盤功能號INT13H;BIOS 讀盤POPCX;恢復(fù)計數(shù)值JNCREADOK;CF=0讀盤成功轉(zhuǎn)READOKMOVAH,0;CF=1置AH=0INT13H;復(fù)位磁盤BIOS調(diào)用LOOPRETRY;不夠三次轉(zhuǎn)RETRY再試ERROR: MOV BX,OFFSET ERRMSG;夠三次不成功取出錯信息位移CALLD
41、ISPLAY ;轉(zhuǎn)子顯示錯信息RET ;返回READOK:MOV CX,112 ;雙面雙密軟盤目錄數(shù)NEXT:CMPBYTE PTRBX,0E5H ;是空目錄標志E5H嗎JZEMPTY ;是轉(zhuǎn)PUSHBX ;不是保護BXMOVDL,8 ;文件名主名長度PNAME: MOV AL,BX ;取文件名字符CALLDISPCHAR ;顯示INCBX ;下一字符DECDL ;字符數(shù)減1JNZPNAME ;不夠8個轉(zhuǎn)PNAME,夠順序執(zhí)行MOVAL,.CALLDISPCHAR ;顯示主名與擴展名之間的分隔符.MOVDL,3 ;擴展名長度ENAME: MOV AL,BX ;取擴展名字符CALLDISPCHA
42、R ;顯示INCBXDECDLJNZENAMEPOPBX ;恢復(fù)BXMOVDL,8 ;空格數(shù) BLANK:MOVAL, CALLDISPCHAR ;顯示文件名間的DECDL ;8個空格JNZBLANKINCNAMECOUNT ;文件名計數(shù)增1CMPNAMECOUNT,92 ;滿屏嗎?JNZEMPTY ;若不,轉(zhuǎn)MOVAH,0;讀鍵盤功能號INT16H ;BIOS鍵盤入,用戶擊鍵后繼續(xù)MOVNAMECOUNT,0 ;復(fù)原計數(shù)初值EMPTY:ADD BX,32 ;指向下一目錄項,每項32個字節(jié)LOOPNEXT;不夠112個轉(zhuǎn),夠順序執(zhí)行 RET ;返回DOSDISPLAY PROC NEAR ;顯示信息子程序MOVCX,30;顯示字符數(shù)DISP1: MOV AL,BX ;取字符CALLDISPCHAR ;轉(zhuǎn)子顯示INCBXLOOPDISP1;做30次MOVA
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年臨泉縣招教考試備考題庫帶答案解析(必刷)
- 2024年涉縣招教考試備考題庫含答案解析(奪冠)
- 2025年交口縣招教考試備考題庫帶答案解析
- 2025年環(huán)縣招教考試備考題庫附答案解析
- 2025年正安縣幼兒園教師招教考試備考題庫附答案解析(奪冠)
- 2025年中山職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性測試題庫附答案解析
- 2025年上海南湖職業(yè)技術(shù)學(xué)院馬克思主義基本原理概論期末考試模擬題附答案解析(必刷)
- 2024年貴州輕工職業(yè)大學(xué)馬克思主義基本原理概論期末考試題帶答案解析(必刷)
- 2025屆山東省濟寧市鄒城市兗礦第一中學(xué)高三模擬測試生物試題(一)(解析版)
- 2026年教育心理學(xué)專業(yè)考試學(xué)生心理輔導(dǎo)方案設(shè)計題
- 2024年山東省濟南市中考化學(xué)試卷( 含答案)
- 建筑結(jié)構(gòu)改造設(shè)計和加固技術(shù)綜合分析的開題報告
- 管理會計學(xué) 第10版 課件 第1、2章 管理會計概論、成本性態(tài)與變動成本法
- 喪葬費用補助申請的社保授權(quán)委托書
- 2024年度初會《經(jīng)濟法基礎(chǔ)》高頻真題匯編(含答案)
- 課例研究報告
- 啤酒營銷促銷實戰(zhàn)技巧之經(jīng)銷商管理技巧知識培訓(xùn)
- 建筑工程各部門職能及各崗位職責(zé)201702
- 機柜端口對應(yīng)表
- GB/T 3934-2003普通螺紋量規(guī)技術(shù)條件
- 車輛贈與協(xié)議模板
評論
0/150
提交評論