匯編第8章IO程序設(shè)計(jì)_第1頁(yè)
匯編第8章IO程序設(shè)計(jì)_第2頁(yè)
匯編第8章IO程序設(shè)計(jì)_第3頁(yè)
匯編第8章IO程序設(shè)計(jì)_第4頁(yè)
匯編第8章IO程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1第第8 8章章 輸入輸出程序設(shè)計(jì)輸入輸出程序設(shè)計(jì) CPUMEMI/O設(shè)備設(shè)備總線(xiàn)總線(xiàn)I/O接口接口CPU可以直接讀寫(xiě)可以直接讀寫(xiě)3 個(gè)地方的個(gè)地方的數(shù)據(jù):數(shù)據(jù):(1)CPU 內(nèi)部的寄存器;內(nèi)部的寄存器;(2)內(nèi)存單元;)內(nèi)存單元;(3)端口。)端口。CPU與與I/O接口進(jìn)行通信是接口進(jìn)行通信是通過(guò)接口電路內(nèi)部的一組通過(guò)接口電路內(nèi)部的一組寄存器實(shí)現(xiàn)的,這些寄存寄存器實(shí)現(xiàn)的,這些寄存器稱(chēng)為端口,包括:數(shù)據(jù)器稱(chēng)為端口,包括:數(shù)據(jù)端口、狀態(tài)端口和命令端口。端口、狀態(tài)端口和命令端口。2數(shù)據(jù)數(shù)據(jù)狀態(tài)狀態(tài)CPU接口接口外設(shè)外設(shè)控制控制 I/O I/O接口接口CPU與外設(shè)交換的信息類(lèi)型:與外設(shè)交換的信息類(lèi)型

2、:1、控制信息、控制信息命令寄存器命令寄存器2、狀態(tài)信息、狀態(tài)信息狀態(tài)寄存器狀態(tài)寄存器3、數(shù)據(jù)信息、數(shù)據(jù)信息數(shù)據(jù)寄存器數(shù)據(jù)寄存器端口的編址方式端口的編址方式 I/O端口與存儲(chǔ)器統(tǒng)一編址端口與存儲(chǔ)器統(tǒng)一編址 I/O端口單獨(dú)編址(端口單獨(dú)編址(80X86微微機(jī))機(jī))CPU與外設(shè)與外設(shè)不同外設(shè)具有的端口數(shù)各不相同,不同外設(shè)具有的端口數(shù)各不相同,計(jì)算機(jī)中為每一個(gè)端口都賦予一計(jì)算機(jī)中為每一個(gè)端口都賦予一個(gè)惟一編號(hào)個(gè)惟一編號(hào)稱(chēng)為稱(chēng)為端口地址端口地址(或或端口號(hào)端口號(hào)PORT)。 8086CPU采用采用I/O端口端口獨(dú)立編址獨(dú)立編址的的方式,采用方式,采用16位地址最多能管理位地址最多能管理64K個(gè)端口個(gè)端

3、口,即端口占即端口占64KB地址空地址空間,端口號(hào)為間,端口號(hào)為065535。必須使用。必須使用專(zhuān)門(mén)的專(zhuān)門(mén)的I/O指令指令訪問(wèn)端口。訪問(wèn)端口。3(只能用(只能用AX或或AL與端口傳送信息)與端口傳送信息) 輸入指令輸入指令 IN (I/O CPU) 長(zhǎng)格式:長(zhǎng)格式: IN AL, PORT (字節(jié))(字節(jié)) IN AX, PORT (字)(字) 執(zhí)行操作:執(zhí)行操作:(AL) ( PORT ) (字節(jié))(字節(jié)) (AX) ( PORT+1, PORT )(字)(字) 短格式:短格式: MOV DX, PORT IN AL, DX (字節(jié))(字節(jié)) IN AX, DX (字)(字) 執(zhí)行操作:執(zhí)行

4、操作:(AL) ( (DX) ) (字節(jié))(字節(jié)) (AX) ( (DX)+1, (DX) )(字)(字) PORT是端口地是端口地址址(00FFH)端口號(hào)端口號(hào)255時(shí),時(shí),先送到先送到DX輸出指令輸出指令 OUT (CPU I/O)長(zhǎng)格式:長(zhǎng)格式: OUT PORT, AL (字節(jié))(字節(jié)) OUT PORT, AX (字)(字)功能:將寄存器中內(nèi)容輸出到指定端口。功能:將寄存器中內(nèi)容輸出到指定端口。短格式:短格式: MOV DX , PORT OUT DX, AL (字節(jié))(字節(jié)) OUT DX, AX (字)(字)累加器專(zhuān)用傳送指令I(lǐng)N/OUT4訪問(wèn)端口:訪問(wèn)端口: in al,60h

5、;從從60h號(hào)端口讀入一個(gè)字節(jié)號(hào)端口讀入一個(gè)字節(jié) 執(zhí)行時(shí)與總線(xiàn)相關(guān)的操作:執(zhí)行時(shí)與總線(xiàn)相關(guān)的操作: CPU通過(guò)地址線(xiàn)將地址信息通過(guò)地址線(xiàn)將地址信息60h發(fā)出;發(fā)出; CPU通過(guò)控制線(xiàn)發(fā)出端口讀命令,選中端口所通過(guò)控制線(xiàn)發(fā)出端口讀命令,選中端口所在的芯片,并通知它,將要從中讀取數(shù)據(jù);在的芯片,并通知它,將要從中讀取數(shù)據(jù); 端口所在的芯片將端口所在的芯片將60h端口中的數(shù)據(jù)通過(guò)數(shù)據(jù)端口中的數(shù)據(jù)通過(guò)數(shù)據(jù)線(xiàn)送入線(xiàn)送入CPU。 注意:在注意:在in和和out 指令中,只能使用指令中,只能使用 ax 或或al 來(lái)存來(lái)存放從端口中讀入的數(shù)據(jù)或要發(fā)送到端口中的數(shù)據(jù)。放從端口中讀入的數(shù)據(jù)或要發(fā)送到端口中的數(shù)據(jù)。

6、 過(guò)程演示過(guò)程演示561、查詢(xún)方式、查詢(xún)方式(程序控制方式程序控制方式)2 、中斷方式、中斷方式3 、DMA方式方式(直接存儲(chǔ)器存取方式直接存儲(chǔ)器存取方式/ /成組傳送方式成組傳送方式)8.1 I/O 設(shè)備的數(shù)據(jù)傳送方式設(shè)備的數(shù)據(jù)傳送方式71查詢(xún)傳送方式查詢(xún)傳送方式CPU和內(nèi)存通過(guò)端口與外部設(shè)備進(jìn)行通信。和內(nèi)存通過(guò)端口與外部設(shè)備進(jìn)行通信。CPU在在執(zhí)行主程序過(guò)程中,當(dāng)需要進(jìn)行執(zhí)行主程序過(guò)程中,當(dāng)需要進(jìn)行I/O操作時(shí),很難保證輸操作時(shí),很難保證輸入設(shè)備已經(jīng)準(zhǔn)備好了數(shù)據(jù),或者是輸出設(shè)備已經(jīng)處在可以入設(shè)備已經(jīng)準(zhǔn)備好了數(shù)據(jù),或者是輸出設(shè)備已經(jīng)處在可以接收數(shù)據(jù)的狀態(tài)。因此,一般要在外部設(shè)備準(zhǔn)備就緒并且接

7、收數(shù)據(jù)的狀態(tài)。因此,一般要在外部設(shè)備準(zhǔn)備就緒并且I/O接口已經(jīng)做好數(shù)據(jù)傳送的情況下,才能進(jìn)行數(shù)據(jù)傳送,接口已經(jīng)做好數(shù)據(jù)傳送的情況下,才能進(jìn)行數(shù)據(jù)傳送,這種傳送方式稱(chēng)為查詢(xún)傳送方式。這種傳送方式稱(chēng)為查詢(xún)傳送方式。開(kāi)始開(kāi)始結(jié)束結(jié)束讀外設(shè)狀態(tài)讀外設(shè)狀態(tài)準(zhǔn)備好?準(zhǔn)備好?傳送數(shù)據(jù)傳送數(shù)據(jù)N傳送完?傳送完?NYY 查詢(xún)傳送工作流程查詢(xún)傳送工作流程查詢(xún)過(guò)程使查詢(xún)過(guò)程使CPU很容易很容易與不同速度的外設(shè)實(shí)現(xiàn)與不同速度的外設(shè)實(shí)現(xiàn)速度配合,使接口電路速度配合,使接口電路十分簡(jiǎn)單,適用于較少十分簡(jiǎn)單,適用于較少數(shù)據(jù)傳輸情況下使用。數(shù)據(jù)傳輸情況下使用。82中斷傳送方式中斷傳送方式采用中斷方式,采用中斷方式, CPU執(zhí)

8、行主程序,等待中斷執(zhí)行主程序,等待中斷的發(fā)生。的發(fā)生。I/O設(shè)備與設(shè)備與CPU并行操作,進(jìn)行數(shù)據(jù)傳并行操作,進(jìn)行數(shù)據(jù)傳輸?shù)臏?zhǔn)備工作。當(dāng)輸入設(shè)備將數(shù)據(jù)準(zhǔn)備好,或者輸?shù)臏?zhǔn)備工作。當(dāng)輸入設(shè)備將數(shù)據(jù)準(zhǔn)備好,或者輸出設(shè)備空閑時(shí),便通過(guò)輸出設(shè)備空閑時(shí),便通過(guò)I/O接口向接口向CPU發(fā)申請(qǐng)發(fā)申請(qǐng)中斷。中斷。CPU在每執(zhí)行完一條指令之后都會(huì)檢查是在每執(zhí)行完一條指令之后都會(huì)檢查是否有中斷請(qǐng)求,只要滿(mǎn)足中斷響應(yīng)條件,否有中斷請(qǐng)求,只要滿(mǎn)足中斷響應(yīng)條件,CPU就就暫停執(zhí)行當(dāng)前的程序,轉(zhuǎn)向執(zhí)行中斷處理程序,暫停執(zhí)行當(dāng)前的程序,轉(zhuǎn)向執(zhí)行中斷處理程序,進(jìn)行數(shù)據(jù)傳送,等傳送完成后,進(jìn)行數(shù)據(jù)傳送,等傳送完成后,CPU返回到被

9、中返回到被中斷的主程序,繼續(xù)進(jìn)行原來(lái)的工作。斷的主程序,繼續(xù)進(jìn)行原來(lái)的工作。 中斷服務(wù)程序中斷服務(wù)程序中斷服務(wù)程序中斷服務(wù)程序發(fā)申請(qǐng)發(fā)申請(qǐng)發(fā)申請(qǐng)發(fā)申請(qǐng)中斷源中斷源93、DMA方式方式成組數(shù)據(jù)傳送方式成組數(shù)據(jù)傳送方式DREQHOLDHLDADACKCPUDMA控制器控制器存儲(chǔ)器存儲(chǔ)器I/O接口接口DMA傳送方式傳送方式主要由硬件主要由硬件DMA控制器實(shí)現(xiàn)其傳送功能,用于一些控制器實(shí)現(xiàn)其傳送功能,用于一些高速的高速的I/O設(shè)備設(shè)備(比如磁盤(pán)比如磁盤(pán)),能使,能使I/O設(shè)備直接與存儲(chǔ)器設(shè)備直接與存儲(chǔ)器進(jìn)行成批數(shù)據(jù)的快速傳送。進(jìn)行成批數(shù)據(jù)的快速傳送。10程序查詢(xún)方式:程序查詢(xún)方式:要占用要占用CPU大

10、量時(shí)間去查詢(xún)大量時(shí)間去查詢(xún)I/O設(shè)備的狀態(tài)。設(shè)備的狀態(tài)。 中斷方式:中斷方式:需要保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng),數(shù)據(jù)傳輸由需要保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng),數(shù)據(jù)傳輸由CPU完成。完成。DMA方式:方式:用用DMA控制器來(lái)控制存儲(chǔ)器和控制器來(lái)控制存儲(chǔ)器和I/O設(shè)備之間的數(shù)設(shè)備之間的數(shù)據(jù)傳送時(shí),并不經(jīng)過(guò)據(jù)傳送時(shí),并不經(jīng)過(guò)CPU,傳輸過(guò)程中,傳輸過(guò)程中CPU不占用總線(xiàn),不占用總線(xiàn),CPU處于原地等待。這樣,傳輸時(shí)就不需要保存斷點(diǎn)等額外處于原地等待。這樣,傳輸時(shí)就不需要保存斷點(diǎn)等額外操作了。另外,整個(gè)控制數(shù)據(jù)塊傳送的過(guò)程,包括地址增量操作了。另外,整個(gè)控制數(shù)據(jù)塊傳送的過(guò)程,包括地址增量和計(jì)數(shù)器減量的操作,都是由硬件控制完

11、成的,因而大大縮和計(jì)數(shù)器減量的操作,都是由硬件控制完成的,因而大大縮短了數(shù)據(jù)傳送的控制時(shí)間,提高了整個(gè)系統(tǒng)的處理效率。短了數(shù)據(jù)傳送的控制時(shí)間,提高了整個(gè)系統(tǒng)的處理效率。三種方式的比較三種方式的比較11 I/O 指令指令是主機(jī)與外設(shè)進(jìn)行通信的最基本途徑。是主機(jī)與外設(shè)進(jìn)行通信的最基本途徑。DOS 功能調(diào)用和功能調(diào)用和BIOS例行程序中的輸入例行程序中的輸入/ /輸出功能也是由輸出功能也是由IN和和OUT指令完成的。指令完成的。例:循環(huán)測(cè)試某例:循環(huán)測(cè)試某狀態(tài)寄存器狀態(tài)寄存器的的2位是否為位是否為1 AGAIN: AGAIN: IN AL, IN AL, STATUS_PORTSTATUS_PORT

12、 TEST AL, 00000100B TEST AL, 00000100B JZ AGAIN JZ AGAIN8.2 程序直接控制程序直接控制 I/O 方式方式 讀讀I/O狀態(tài)狀態(tài)準(zhǔn)備好?準(zhǔn)備好? 傳送數(shù)據(jù)傳送數(shù)據(jù)NYIN AL,DATA_PORTIN AL,DATA_PORT MOV AL, DATAOUT DATA_PORT, AL狀態(tài)寄存器的端狀態(tài)寄存器的端口地址口地址(00FFH)數(shù)據(jù)寄存器的端數(shù)據(jù)寄存器的端口地址口地址(00FFH)12輪流查詢(xún)幾種輪流查詢(xún)幾種I/O設(shè)備:設(shè)備:DEV1: INAL, STAT1TESTAL, STAT1_BITJZDEV2CALLFAR PTR P

13、ROC1DEV2: INAL, STAT2TESTAL, STAT2_BITJZDEV3CALLFAR PTR PROC2DEV3: INAL, STAT3TESTAL, STAT3_BITJZDEV1CALLFAR PTR PROC3優(yōu):程序安排或修改優(yōu):程序安排或修改 設(shè)備的優(yōu)先次序設(shè)備的優(yōu)先次序缺:查詢(xún)等待浪費(fèi)缺:查詢(xún)等待浪費(fèi)CPU大量有效時(shí)間大量有效時(shí)間使用使用I/O指令直接控指令直接控制輸入輸出比調(diào)用制輸入輸出比調(diào)用DOS功能或功能或BIOS例行例行程序效率更高,但其程序效率更高,但其對(duì)硬件的依賴(lài)性很大,對(duì)硬件的依賴(lài)性很大,所以一般的程序設(shè)計(jì)所以一般的程序設(shè)計(jì)還是盡可能使用還是盡可能

14、使用DOS或或BIOS功能調(diào)用。功能調(diào)用。13發(fā)聲系統(tǒng)發(fā)聲系統(tǒng) 為了具有音響輸出能力,系統(tǒng)板上裝有一個(gè)為了具有音響輸出能力,系統(tǒng)板上裝有一個(gè)2.25英寸的揚(yáng)聲器英寸的揚(yáng)聲器以及控制電路和驅(qū)動(dòng)電路。控制電路能以位觸發(fā)和定時(shí)器控制兩以及控制電路和驅(qū)動(dòng)電路??刂齐娐纺芤晕挥|發(fā)和定時(shí)器控制兩種不同的方式驅(qū)動(dòng)揚(yáng)聲器發(fā)聲。種不同的方式驅(qū)動(dòng)揚(yáng)聲器發(fā)聲。設(shè)備控制寄存器設(shè)備控制寄存器( 61h61h )1/0 01/0 0 控制其它外部設(shè)備控制其它外部設(shè)備與門(mén)與門(mén)放大器放大器2號(hào)定時(shí)器門(mén)控號(hào)定時(shí)器門(mén)控1 0(1 1)位觸發(fā)方式)位觸發(fā)方式 程序直接控制程序直接控制PPI(8255APPI(8255A可編程序外圍

15、接口芯片可編程序外圍接口芯片) )的輸出控的輸出控制寄存器(制寄存器(I/OI/O端口端口61H61H)的)的1 1位,使該位按所需的頻率進(jìn)行位,使該位按所需的頻率進(jìn)行1 1和和0 0的交替變化,從而控制開(kāi)關(guān)電路產(chǎn)生一串脈沖波形,經(jīng)放大后的交替變化,從而控制開(kāi)關(guān)電路產(chǎn)生一串脈沖波形,經(jīng)放大后驅(qū)動(dòng)揚(yáng)聲器發(fā)聲。如果控制這一串脈沖的脈寬和長(zhǎng)度就可以產(chǎn)生驅(qū)動(dòng)揚(yáng)聲器發(fā)聲。如果控制這一串脈沖的脈寬和長(zhǎng)度就可以產(chǎn)生不同頻率和不同音長(zhǎng)的聲音。不同頻率和不同音長(zhǎng)的聲音。14例例8.1:Sound 程序程序; -發(fā)聲程序,發(fā)聲程序, mov dx, 100 mov dx, 100 ;50;50個(gè)周期個(gè)周期, ,脈

16、沖持續(xù)的時(shí)間脈沖持續(xù)的時(shí)間 in al, 61hin al, 61h and al, 11111100b and al, 11111100b ; ;置置0 0、1 1位為位為0 0sound: xor al, 2 sound: xor al, 2 ; ;改變改變1 1位的值,與位的值,與1 1異或取反異或取反 out 61h, alout 61h, al mov cx, 2800 mov cx, 2800 ; ;控制延遲時(shí)間,即脈寬控制延遲時(shí)間,即脈寬wait1: loop wait1 wait1: loop wait1 ;8086CPUloop;8086CPUloop指令指令 ; ;執(zhí)行執(zhí)行

17、1717個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期 ; ;延遲時(shí)間延遲時(shí)間28002800* *1717* *T T ;(T(T為主頻的倒數(shù)為主頻的倒數(shù)) ) dec dx dec dx jne sound jne sound ;假如系統(tǒng)頻率為;假如系統(tǒng)頻率為4.7MHZ4.7MHZ, ; ;得到延遲時(shí)間為得到延遲時(shí)間為10ms10ms 15 使用使用LOOP指令實(shí)現(xiàn)延遲的程序延遲時(shí)間依賴(lài)指令實(shí)現(xiàn)延遲的程序延遲時(shí)間依賴(lài)CPU主主頻和頻和LOOP指令的執(zhí)行周期,為了建立一個(gè)與處理器指令的執(zhí)行周期,為了建立一個(gè)與處理器無(wú)關(guān)的時(shí)間延遲,無(wú)關(guān)的時(shí)間延遲,IBM采用了一種利用硬件產(chǎn)生時(shí)間采用了一種利用硬件產(chǎn)生時(shí)間延遲的方法。

18、延遲的方法。 wait1: mov cx, 633 ;633* 15.08*10-6s =10ms call waitf ;調(diào)用延時(shí)調(diào)用延時(shí)15.08*10-6s dec bx ;BX 控制音頻控制音頻 jnz wait1 . 16利用硬件產(chǎn)生延遲的方法,與處理器無(wú)關(guān)利用硬件產(chǎn)生延遲的方法,與處理器無(wú)關(guān) ;-利用端口利用端口61h的的PB4延時(shí)延時(shí)15.08*10-6s子程序子程序;-入口參數(shù)為入口參數(shù)為CX,必須裝入,必須裝入15.08*10-6s的倍數(shù)的倍數(shù)waitf proc nearpushaxwaitf1:inal, 61handal, 10hcmpal, ahje waitf1mo

19、vah, alloopwaitf1popaxretwaitf endp17(2)定時(shí)器觸發(fā)方式)定時(shí)器觸發(fā)方式可編程時(shí)間間隔定時(shí)器可編程時(shí)間間隔定時(shí)器8253/82548253/8254計(jì)數(shù)器計(jì)數(shù)器0:用于控制系統(tǒng)時(shí)鐘正常運(yùn)轉(zhuǎn),端口地:用于控制系統(tǒng)時(shí)鐘正常運(yùn)轉(zhuǎn),端口地址為址為40H。 計(jì)數(shù)器計(jì)數(shù)器1:用于存儲(chǔ)器刷新:用于存儲(chǔ)器刷新 ,端口地址為,端口地址為41H。 計(jì)數(shù)器計(jì)數(shù)器2:用于控制揚(yáng)聲器發(fā)聲,端口地址為:用于控制揚(yáng)聲器發(fā)聲,端口地址為42H。 公用的控制寄存器公用的控制寄存器:端口地址為:端口地址為43H188253/82548253/8254定時(shí)器作為發(fā)聲源定時(shí)器作為發(fā)聲源計(jì)數(shù)器計(jì)數(shù)

20、器2 的的G端與端與61H端口的端口的bit0位相連,將位相連,將61H端口的端口的bit0位置成位置成1,那,那么計(jì)數(shù)器么計(jì)數(shù)器2就被啟動(dòng),此時(shí)將有一組信號(hào)從就被啟動(dòng),此時(shí)將有一組信號(hào)從OUT端輸出,信號(hào)的頻率可以端輸出,信號(hào)的頻率可以用程序控制用程序控制(設(shè)初值設(shè)初值);若;若61H端口端口bit0位為位為0,則定時(shí)器被關(guān)閉,則定時(shí)器被關(guān)閉,OUT端就端就會(huì)恒定為會(huì)恒定為1。 系統(tǒng)系統(tǒng)19揚(yáng)聲器驅(qū)動(dòng)揚(yáng)聲器驅(qū)動(dòng) 與門(mén)用在這里相當(dāng)一個(gè)與門(mén)用在這里相當(dāng)一個(gè)“可控開(kāi)關(guān)可控開(kāi)關(guān)”,如果將,如果將61H端口端口的的bit0、bit1位都置成位都置成1,則相當(dāng)于既打開(kāi)了定時(shí)器又打開(kāi)了,則相當(dāng)于既打開(kāi)了定

21、時(shí)器又打開(kāi)了開(kāi)關(guān),這時(shí)候定時(shí)器產(chǎn)生的聲音信號(hào)就會(huì)送到放大器推動(dòng)喇開(kāi)關(guān),這時(shí)候定時(shí)器產(chǎn)生的聲音信號(hào)就會(huì)送到放大器推動(dòng)喇叭發(fā)聲;稱(chēng)為叭發(fā)聲;稱(chēng)為 定時(shí)器觸發(fā)方式定時(shí)器觸發(fā)方式 若將若將bit0位置位置0,則定時(shí)器關(guān)閉,此時(shí),則定時(shí)器關(guān)閉,此時(shí)OUT端為端為1,這時(shí),這時(shí)候如果連續(xù)改變候如果連續(xù)改變bit1位的狀態(tài),也可以從喇叭中聽(tīng)到聲音,位的狀態(tài),也可以從喇叭中聽(tīng)到聲音,這就是這就是位觸發(fā)方式位觸發(fā)方式;若將;若將bit1位置位置0,則開(kāi)關(guān)關(guān)閉,此時(shí)即使,則開(kāi)關(guān)關(guān)閉,此時(shí)即使打開(kāi)定時(shí)器也不能聽(tīng)到聲音。打開(kāi)定時(shí)器也不能聽(tīng)到聲音。 IN AL , 61H ;讀狀態(tài)讀狀態(tài) MOV AH , AL ;保存

22、原狀態(tài),保存原狀態(tài),push ax OR AL , 00000011B ;置置bit0,bit1為為1 OUT 61H , AL . MOV AL , AH ;恢復(fù)原狀態(tài)恢復(fù)原狀態(tài), pop ax OUT 61H , AL20揚(yáng)聲器發(fā)聲通用子程序揚(yáng)聲器發(fā)聲通用子程序21 call waitf ;調(diào)用延時(shí)調(diào)用延時(shí)15.08*10-6s22返回本節(jié)返回本節(jié)23演奏樂(lè)曲程序演奏樂(lè)曲程序音名CDEFGABCDEFGABC唱名12345671234567i頻率(Hz)131147165175196220247262294330349392440492523低低中中高高242526返回本節(jié)返回本節(jié)27補(bǔ)充

23、知識(shí): CMOS RAM 芯片PC機(jī)中有一個(gè)機(jī)中有一個(gè)CMOS RAM芯片,其有如下特芯片,其有如下特征:征: (1)包含一個(gè)實(shí)時(shí)鐘和一個(gè)有)包含一個(gè)實(shí)時(shí)鐘和一個(gè)有128個(gè)存儲(chǔ)單元的個(gè)存儲(chǔ)單元的RAM存儲(chǔ)器。存儲(chǔ)器。 (2)該芯片靠電池供電。)該芯片靠電池供電。 所以,關(guān)機(jī)后其內(nèi)部的實(shí)時(shí)鐘仍可正常工作,所以,關(guān)機(jī)后其內(nèi)部的實(shí)時(shí)鐘仍可正常工作, RAM 中的信息不丟失。中的信息不丟失。 (3) 128 個(gè)字節(jié)的個(gè)字節(jié)的 RAM 中,內(nèi)部實(shí)時(shí)鐘占用中,內(nèi)部實(shí)時(shí)鐘占用 00dh單元來(lái)保存時(shí)間信息,其余大部分分單元用于單元來(lái)保存時(shí)間信息,其余大部分分單元用于保存系統(tǒng)配置信息,供系統(tǒng)啟動(dòng)時(shí)保存系統(tǒng)配置信

24、息,供系統(tǒng)啟動(dòng)時(shí)BIOS程序讀取。程序讀取。 BIOS也提供了相關(guān)的程序,使我們可以在開(kāi)機(jī)的時(shí)也提供了相關(guān)的程序,使我們可以在開(kāi)機(jī)的時(shí)候配置候配置CMOS RAM 中的系統(tǒng)信息。中的系統(tǒng)信息。28補(bǔ)充知識(shí): CMOS RAM 芯片CMOS RAM芯片特征:芯片特征: (4)該芯片內(nèi)部有兩個(gè)端口,端口地址為)該芯片內(nèi)部有兩個(gè)端口,端口地址為70h和和71h。 CPU 通過(guò)這兩個(gè)端口讀寫(xiě)通過(guò)這兩個(gè)端口讀寫(xiě)CMOS RAM。 (5)70h為地址端口為地址端口,存放要訪問(wèn)的,存放要訪問(wèn)的CMOS RAM單元的地址;單元的地址; 71h為數(shù)據(jù)端口為數(shù)據(jù)端口,存放從選定的,存放從選定的CMOS RAM 單

25、元中讀取的數(shù)據(jù),或要寫(xiě)入到其中單元中讀取的數(shù)據(jù),或要寫(xiě)入到其中的數(shù)據(jù)??梢?jiàn),的數(shù)據(jù)??梢?jiàn),CPU對(duì)對(duì)CMOS RAM的讀寫(xiě)分兩步的讀寫(xiě)分兩步進(jìn)行。進(jìn)行。比如:讀比如:讀CMOS RAM的的2號(hào)單元:號(hào)單元: 1、將、將2送入端口送入端口70h mov al, 2 out 70h, al 2、從、從71h讀出讀出2號(hào)單元的內(nèi)容號(hào)單元的內(nèi)容 in al, 71h29CMOS RAM中存儲(chǔ)的時(shí)間信息在在CMOS RAM中,存放著當(dāng)前時(shí)間:中,存放著當(dāng)前時(shí)間: 秒:秒:00H 分:分:02H 時(shí):時(shí):04H 星期:星期:06H 日:日:07H 月:月:08H 年:年:09H這這6個(gè)信息的長(zhǎng)度都為個(gè)信息

26、的長(zhǎng)度都為1個(gè)字節(jié)。個(gè)字節(jié)。這些數(shù)據(jù)以這些數(shù)據(jù)以BCD碼的方式存放:碼的方式存放:數(shù)碼:數(shù)碼: 0 1 2 3 4 BCD碼:碼:0000 0001 0010 0011 0100數(shù)碼:數(shù)碼: 5 6 7 8 9 BCD碼:碼:0101 0110 0111 1000 100130CMOS RAM中存儲(chǔ)的時(shí)間信息比如:比如: 數(shù)值數(shù)值26,用,用BCD碼表示為:碼表示為:0010 0110可見(jiàn),一個(gè)字節(jié)可表示兩個(gè)可見(jiàn),一個(gè)字節(jié)可表示兩個(gè)BCD碼。碼。 則則CMOS RAM存儲(chǔ)時(shí)間信息的單元中,存儲(chǔ)時(shí)間信息的單元中,存儲(chǔ)了用兩個(gè)存儲(chǔ)了用兩個(gè) BCD碼表示的兩位十進(jìn)制碼表示的兩位十進(jìn)制數(shù),高數(shù),高 4

27、 位的位的BCD碼表示十位,低碼表示十位,低4 位的位的BCD 碼表示個(gè)位。碼表示個(gè)位。 比如:比如:00010100b表示表示14。31CMOS RAM中存儲(chǔ)的時(shí)間信息編程:在屏幕上顯示當(dāng)前的月份。編程:在屏幕上顯示當(dāng)前的月份。 分析:這個(gè)程序主要做兩部分工作:分析:這個(gè)程序主要做兩部分工作: (1)從)從CMOS RAM的的8號(hào)單元讀出當(dāng)前月份的號(hào)單元讀出當(dāng)前月份的BCD碼;碼; (2)將用)將用BCD碼表示的月份以十進(jìn)制的形式顯碼表示的月份以十進(jìn)制的形式顯示到屏幕上。示到屏幕上。BCD 碼值十進(jìn)制數(shù)碼值,則碼值十進(jìn)制數(shù)碼值,則BCD碼值碼值30h十進(jìn)制數(shù)對(duì)應(yīng)的十進(jìn)制數(shù)對(duì)應(yīng)的ASCII碼。

28、碼。 從從CMOS RAM的的8號(hào)單元讀出的一個(gè)字節(jié)中,號(hào)單元讀出的一個(gè)字節(jié)中,包含了用兩個(gè)包含了用兩個(gè) BCD 碼表示的兩位十進(jìn)制數(shù),高碼表示的兩位十進(jìn)制數(shù),高4位的位的 BCD碼表示十位,低碼表示十位,低 4位的位的 BCD碼表示碼表示個(gè)位。要分兩次進(jìn)行轉(zhuǎn)換顯示。個(gè)位。要分兩次進(jìn)行轉(zhuǎn)換顯示。 32 要讀取要讀取 CMOS RAM的信息,我們首先要向地址端的信息,我們首先要向地址端口口70h寫(xiě)入要訪問(wèn)的單元的地址:寫(xiě)入要訪問(wèn)的單元的地址: mov al,8 out 70h,al 然后從數(shù)據(jù)端口然后從數(shù)據(jù)端口71h中取得指定單元中的數(shù)據(jù):中取得指定單元中的數(shù)據(jù): in al,71h mov a

29、h,al ;al中為從中為從CMOS RAM的的 8 號(hào)單元讀出的數(shù)據(jù)號(hào)單元讀出的數(shù)據(jù) mov cl,4 shr ah,cl ;ah中為月份的十位數(shù)碼值中為月份的十位數(shù)碼值 and al,00001111b ;ah中為月份的個(gè)位數(shù)碼值中為月份的個(gè)位數(shù)碼值 add ah,30h ;ah中為月份的十位數(shù)中為月份的十位數(shù)SACII碼碼 add al,30h ;ah中為月份的個(gè)位數(shù)中為月份的個(gè)位數(shù)SACII碼碼33請(qǐng)編程在屏幕上以“年/月/日時(shí):分:秒”的格式,顯示顯示當(dāng)前的日期、時(shí)間。 34中斷:中斷:使使cpu中止正在執(zhí)行的程序而轉(zhuǎn)去處理特殊事件的操作。中止正在執(zhí)行的程序而轉(zhuǎn)去處理特殊事件的操作。

30、中斷源:中斷源:引起中斷的事件。引起中斷的事件。8086/8088CPU最多有最多有256個(gè)中斷源個(gè)中斷源,這些中斷源根據(jù)來(lái)自,這些中斷源根據(jù)來(lái)自CPU的內(nèi)部還是外部分為兩大類(lèi):內(nèi)部中的內(nèi)部還是外部分為兩大類(lèi):內(nèi)部中斷源和外部中斷源。斷源和外部中斷源。外中斷外中斷(硬中斷硬中斷): 外設(shè)的外設(shè)的 I/O 請(qǐng)求請(qǐng)求 可屏蔽中斷可屏蔽中斷INTR 電源掉電電源掉電 / 奇偶錯(cuò)奇偶錯(cuò) 非屏蔽中斷非屏蔽中斷NMI所謂不可屏蔽中斷是指該中斷請(qǐng)求不能通過(guò)軟件的方式對(duì)其屏蔽,一旦所謂不可屏蔽中斷是指該中斷請(qǐng)求不能通過(guò)軟件的方式對(duì)其屏蔽,一旦出現(xiàn)出現(xiàn)NMI中斷請(qǐng)求,中斷請(qǐng)求,CPU必須立即響應(yīng)。必須立即響應(yīng)。

31、內(nèi)中斷內(nèi)中斷(軟中斷軟中斷): INT 指令指令 / CPU 錯(cuò)(除法錯(cuò)、溢出)錯(cuò)(除法錯(cuò)、溢出)/ 為調(diào)試程序設(shè)置的中斷(為調(diào)試程序設(shè)置的中斷(t、g命令)命令)8.3 中斷傳送方式中斷傳送方式35非屏蔽中斷請(qǐng)求非屏蔽中斷請(qǐng)求 中斷邏輯中斷邏輯INT nINTO除法錯(cuò)除法錯(cuò)單步單步 n 4 0 1CPU 2 NMI8259A可編程中斷控制器可編程中斷控制器(PIC)IR0 系統(tǒng)定時(shí)器系統(tǒng)定時(shí)器IR1 鍵盤(pán)鍵盤(pán)IR2 彩色彩色/圖形接口圖形接口IR3 保留保留IR4 串行通訊口串行通訊口IR5 保留保留IR6 軟盤(pán)軟盤(pán)IR7 打印機(jī)打印機(jī)INTR08090A0B0C0D0E0F80 x86 中

32、斷源(中斷源(圖中引線(xiàn)端標(biāo)示的數(shù)字為分配的圖中引線(xiàn)端標(biāo)示的數(shù)字為分配的終端類(lèi)型號(hào)終端類(lèi)型號(hào)N(0-255)):):8259A外部有外部有28個(gè)引腳。有個(gè)引腳。有9片片8259A可構(gòu)成可構(gòu)成64級(jí)中斷源。級(jí)中斷源。36 類(lèi)型類(lèi)型0的的(IP) 類(lèi)型類(lèi)型0的的(CS) 類(lèi)型類(lèi)型1的的(IP) 類(lèi)型類(lèi)型1的的(CS) 類(lèi)型類(lèi)型N的的(IP) 類(lèi)型類(lèi)型N的的(CS) 類(lèi)型類(lèi)型255的的(IP) 類(lèi)型類(lèi)型255的的(CS)0000000004 4*N003FC中斷向量中斷向量中斷處理程序的入口中斷處理程序的入口 地址(段址)地址(段址):(偏址)(偏址)中斷向量表中斷向量表:各類(lèi)型(各類(lèi)型(00FFH)

33、中斷處理程序的入口地址表)中斷處理程序的入口地址表37設(shè)置設(shè)置CPU中斷允許位:中斷允許位: FLAGS 中的中的 IF 位位 = 1 允許中斷允許中斷 ( STI 開(kāi)中斷)開(kāi)中斷) = 0 禁止中斷禁止中斷 ( CLI 關(guān)中斷)關(guān)中斷)設(shè)置中斷屏蔽位:設(shè)置中斷屏蔽位: 中斷屏蔽寄存器的中斷屏蔽位中斷屏蔽寄存器的中斷屏蔽位 = 0 允許允許I/O設(shè)備請(qǐng)求中斷設(shè)備請(qǐng)求中斷 = 1 禁止禁止I/O設(shè)備請(qǐng)求中斷設(shè)備請(qǐng)求中斷 7 6 5 4 3 2 1 0定時(shí)器定時(shí)器鍵鍵 盤(pán)盤(pán) 打印機(jī)打印機(jī)中斷屏蔽寄存器中斷屏蔽寄存器21H 7 6 5 4 3 2 1 0中斷命令寄存器中斷命令寄存器20H EOIMO

34、V AL, 20HOUT 20H, AL8259A中斷的條件(中斷的條件(從外設(shè)發(fā)出中斷請(qǐng)求到從外設(shè)發(fā)出中斷請(qǐng)求到CPU響應(yīng)中斷,有響應(yīng)中斷,有兩個(gè)控制條件起決定性作用兩個(gè)控制條件起決定性作用):):IN AL, 21HAND AL,0FDH OUT 21H,AL結(jié)束硬件中斷結(jié)束硬件中斷RSL38CPU中斷過(guò)程:中斷過(guò)程:(1)取中斷類(lèi)型:)取中斷類(lèi)型:CPU type N(2)保護(hù)現(xiàn)場(chǎng):)保護(hù)現(xiàn)場(chǎng):FLAGS、CS、IP入棧入棧(3)IF=0 (關(guān)中斷關(guān)中斷), TF=0(禁止單步中斷)(禁止單步中斷)(4)計(jì)算中斷向量地址,取中斷向量)計(jì)算中斷向量地址,取中斷向量:(:(4N) IP (4

35、N2) CS(5)轉(zhuǎn)中斷處理程序)轉(zhuǎn)中斷處理程序 以上步驟都由硬件完成。采用向量中斷的方法,大大加快了以上步驟都由硬件完成。采用向量中斷的方法,大大加快了中斷處理的速度。因?yàn)橛?jì)算機(jī)可直接通過(guò)中斷向量表轉(zhuǎn)向相應(yīng)中斷處理的速度。因?yàn)橛?jì)算機(jī)可直接通過(guò)中斷向量表轉(zhuǎn)向相應(yīng)的處理程序,而不需要的處理程序,而不需要CPU去逐個(gè)檢測(cè)和確定中斷原因。去逐個(gè)檢測(cè)和確定中斷原因。39 int指令指令格式:格式: int n ;n為中斷類(lèi)型碼。為中斷類(lèi)型碼。功能:是引發(fā)功能:是引發(fā)n號(hào)中斷過(guò)程。號(hào)中斷過(guò)程。CPU 執(zhí)行執(zhí)行int n過(guò)程如下:過(guò)程如下: (1)取中斷類(lèi)型碼)取中斷類(lèi)型碼n; (2)標(biāo)志寄存器入棧,)標(biāo)

36、志寄存器入棧,IF = 0,TF = 0; (3)CS、IP入棧;入棧; (4)(IP) = (n*4),(CS) = (n*4+2)。從此處轉(zhuǎn)去執(zhí)行從此處轉(zhuǎn)去執(zhí)行n號(hào)中斷的中斷處理程序。號(hào)中斷的中斷處理程序。40IRET指令可見(jiàn),可見(jiàn),int 指令的最終功能和指令的最終功能和call指令相似,都是調(diào)用指令相似,都是調(diào)用一段程序。一般情況下,系統(tǒng)將一些具有一定功能的一段程序。一般情況下,系統(tǒng)將一些具有一定功能的子程序,以中斷處理程序的方式提供給應(yīng)用程序調(diào)用。子程序,以中斷處理程序的方式提供給應(yīng)用程序調(diào)用。我們?cè)诰幊痰臅r(shí)候,可以用我們?cè)诰幊痰臅r(shí)候,可以用int指令調(diào)用指令調(diào)用這些子程序,這些子程

37、序,而在子程序中安排而在子程序中安排iret指令返回指令返回。我們將這樣的中斷處。我們將這樣的中斷處理子程序簡(jiǎn)稱(chēng)為中斷例程。理子程序簡(jiǎn)稱(chēng)為中斷例程。Iret指令的執(zhí)行過(guò)程相當(dāng)于:指令的執(zhí)行過(guò)程相當(dāng)于: pop ip pop cs pop flags41中斷程序的編寫(xiě)步驟:中斷程序的編寫(xiě)步驟: 中斷處理程序的編寫(xiě)與子程序類(lèi)似,先保護(hù)現(xiàn)場(chǎng),再完成中斷處理程序的編寫(xiě)與子程序類(lèi)似,先保護(hù)現(xiàn)場(chǎng),再完成功能,然后恢復(fù)現(xiàn)場(chǎng),最后用功能,然后恢復(fù)現(xiàn)場(chǎng),最后用IRET指令返回,返回地址指令返回,返回地址是中斷發(fā)生時(shí)緊接著的下一條指令。是中斷發(fā)生時(shí)緊接著的下一條指令。中斷處理子程序:中斷處理子程序:保存寄存器內(nèi)容

38、保存寄存器內(nèi)容如允許中斷嵌套,則開(kāi)中斷如允許中斷嵌套,則開(kāi)中斷 ( STI )中斷處理功能中斷處理功能關(guān)中斷(關(guān)中斷(CLI)送中斷結(jié)束命令送中斷結(jié)束命令( EOI )給中斷命令寄存器給中斷命令寄存器恢復(fù)寄存器內(nèi)容恢復(fù)寄存器內(nèi)容IRET中斷返回中斷返回主程序:主程序:1、設(shè)置中斷向量、設(shè)置中斷向量2、設(shè)置、設(shè)置 CPU 的中斷允許位的中斷允許位 IF3、設(shè)置設(shè)備的中斷屏蔽位、設(shè)置設(shè)備的中斷屏蔽位42注意:注意:程序員在編程的程序員在編程的時(shí)候可以調(diào)用系統(tǒng)設(shè)置時(shí)候可以調(diào)用系統(tǒng)設(shè)置好的中斷例程,也可以好的中斷例程,也可以自己編寫(xiě)中斷處理程序。自己編寫(xiě)中斷處理程序。中斷類(lèi)型號(hào)中斷類(lèi)型號(hào)0、1、3、4

39、是固定的內(nèi)部中斷,向是固定的內(nèi)部中斷,向量量2是非屏蔽中斷,向量是非屏蔽中斷,向量531是保留給系統(tǒng)使用是保留給系統(tǒng)使用的中斷,向量的中斷,向量32255則則是用戶(hù)可用的中斷。是用戶(hù)可用的中斷。用戶(hù)可擴(kuò)充自己需要用戶(hù)可擴(kuò)充自己需要的中斷功能。的中斷功能。43例例:為中斷類(lèi)型為中斷類(lèi)型 N 設(shè)置中斷向量設(shè)置中斷向量 MOV AX, 0 MOV AX, 0 MOV ES, AX MOV ES, AX ; ;中斷向量表的段地址為中斷向量表的段地址為00000000 MOV BX, N MOV BX, N* *4 4 ; ;計(jì)算類(lèi)型計(jì)算類(lèi)型N N的中斷向量地址的中斷向量地址 MOV AX, OFFSE

40、T MOV AX, OFFSET INTHAND INTHAND MOV ES: WORD PTRBX, AX MOV ES: WORD PTRBX, AX ;中斷處理程序的中斷處理程序的偏移地址偏移地址(N(N* *4)4) MOV AX, SEG MOV AX, SEG INTHANDINTHAND MOV ES: WORD PTRBX+2,AX MOV ES: WORD PTRBX+2,AX ; ;段地址段地址(N(N* *4+2)4+2) INTHAND: ; INTHAND: ;中斷處理程序中斷處理程序 IRET IRET44注意:在設(shè)置自己的中斷向量時(shí),應(yīng)先保存原中斷向量再設(shè)注意:

41、在設(shè)置自己的中斷向量時(shí),應(yīng)先保存原中斷向量再設(shè)置新的中斷向量,在程序結(jié)束之前要恢復(fù)原中斷向量。置新的中斷向量,在程序結(jié)束之前要恢復(fù)原中斷向量。一般是使用一般是使用DOS 功能調(diào)用(功能調(diào)用(21H)存取存取中斷向量:中斷向量:設(shè)置中斷向量:設(shè)置中斷向量:AH = 25HAL = 中斷類(lèi)型號(hào)中斷類(lèi)型號(hào)DS : DX = 中斷向量中斷向量INT 21H取中斷向量:取中斷向量:AH = 35HAL = 中斷類(lèi)型號(hào)中斷類(lèi)型號(hào)INT 21H返回時(shí)送返回時(shí)送 ES : BX = 中斷向量中斷向量45MOV AL, NMOV AL, NMOV AH, 35HMOV AH, 35HINT 21HINT 21H ; ; 取原中斷向量取原中斷向量PUSH ESPUSH ESPUSH BXPUSH BX ; ; 保存原中斷向量保存原中斷向量PUSH DSPUSH DSMOV AX, SEG INTHANDMOV AX, SEG IN

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論