




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第8章輸入輸出程序設計
CPUMEMI/O設備總線I/O接口CPU可以直接讀寫3個地方的數據:(1)CPU內部的寄存器;(2)內存單元;(3)端口。CPU與I/O接口進行通信是通過接口電路內部的一組寄存器實現的,這些寄存器稱為端口,包括:數據端口、狀態端口和命令端口。1數據狀態CPU接口外設控制I/O接口CPU與外設交換的信息類型:1、控制信息——命令寄存器2、狀態信息——狀態寄存器3、數據信息——數據寄存器端口的編址方式①I/O端口與存儲器統一編址②I/O端口單獨編址(80X86微機)CPU與外設不同外設具有的端口數各不相同,計算機中為每一個端口都賦予一個惟一編號——稱為端口地址(或端口號PORT)。
8086CPU采用I/O端口獨立編址的方式,采用16位地址最多能管理64K個端口,即端口占64KB地址空間,端口號為0~65535。必須使用專門的I/O指令訪問端口。2(只能用AX或AL與端口傳送信息)
輸入指令
IN(I/OCPU)
長格式:INAL,PORT(字節)INAX,PORT(字)執行操作:(AL)(PORT)(字節)(AX)(PORT+1,PORT)(字)
短格式:MOVDX,PORTINAL,DX(字節)INAX,DX(字)執行操作:(AL)((DX))(字節)(AX)((DX)+1,(DX))(字)
PORT是端口地址(00~FFH)端口號>255時,先送到DX輸出指令OUT(CPUI/O)長格式:OUTPORT,AL(字節)OUTPORT,AX(字)功能:將寄存器中內容輸出到指定端口。短格式:MOVDX,PORTOUTDX,AL(字節)OUTDX,AX(字)累加器專用傳送指令IN/OUT3訪問端口:inal,60h;從60h號端口讀入一個字節執行時與總線相關的操作:①
CPU通過地址線將地址信息60h發出;②CPU通過控制線發出端口讀命令,選中端口所在的芯片,并通知它,將要從中讀取數據;③端口所在的芯片將60h端口中的數據通過數據線送入CPU。注意:在in和out指令中,只能使用ax或al來存放從端口中讀入的數據或要發送到端口中的數據。過程演示451、查詢方式(程序控制方式)2、中斷方式3、DMA方式(直接存儲器存取方式/成組傳送方式)8.1I/O設備的數據傳送方式61.查詢傳送方式
CPU和內存通過端口與外部設備進行通信。CPU在執行主程序過程中,當需要進行I/O操作時,很難保證輸入設備已經準備好了數據,或者是輸出設備已經處在可以接收數據的狀態。因此,一般要在外部設備準備就緒并且I/O接口已經做好數據傳送的情況下,才能進行數據傳送,這種傳送方式稱為查詢傳送方式。
開始結束讀外設狀態準備好?傳送數據N傳送完?NYY查詢傳送工作流程查詢過程使CPU很容易與不同速度的外設實現速度配合,使接口電路十分簡單,適用于較少數據傳輸情況下使用。72.中斷傳送方式
采用中斷方式,CPU執行主程序,等待中斷的發生。I/O設備與CPU并行操作,進行數據傳輸的準備工作。當輸入設備將數據準備好,或者輸出設備空閑時,便通過I/O接口向CPU發申請中斷。CPU在每執行完一條指令之后都會檢查是否有中斷請求,只要滿足中斷響應條件,CPU就暫停執行當前的程序,轉向執行中斷處理程序,進行數據傳送,等傳送完成后,CPU返回到被中斷的主程序,繼續進行原來的工作。
中斷服務程序中斷服務程序發申請發申請中斷源83、DMA方式——成組數據傳送方式DREQHOLDHLDADACKCPUDMA控制器存儲器I/O接口DMA傳送方式主要由硬件DMA控制器實現其傳送功能,用于一些高速的I/O設備(比如磁盤),能使I/O設備直接與存儲器進行成批數據的快速傳送。9
程序查詢方式:要占用CPU大量時間去查詢I/O設備的狀態。
中斷方式:需要保護現場和恢復現場,數據傳輸由CPU完成。DMA方式:用DMA控制器來控制存儲器和I/O設備之間的數據傳送時,并不經過CPU,傳輸過程中CPU不占用總線,CPU處于原地等待。這樣,傳輸時就不需要保存斷點等額外操作了。另外,整個控制數據塊傳送的過程,包括地址增量和計數器減量的操作,都是由硬件控制完成的,因而大大縮短了數據傳送的控制時間,提高了整個系統的處理效率。三種方式的比較10
I/O指令是主機與外設進行通信的最基本途徑。DOS功能調用和BIOS例行程序中的輸入/輸出功能也是由IN和OUT指令完成的。例:循環測試某狀態寄存器的2位是否為1AGAIN:INAL,STATUS_PORTTESTAL,00000100BJZAGAIN8.2程序直接控制I/O方式讀I/O狀態準備好?傳送數據NYINAL,DATA_PORT
MOVAL,DATAOUTDATA_PORT,AL狀態寄存器的端口地址(00~FFH)數據寄存器的端口地址(00~FFH)11輪流查詢幾種I/O設備:DEV1: IN AL,STAT1 TEST AL,STAT1_BIT JZ DEV2 CALL FARPTRPROC1DEV2: IN AL,STAT2 TEST AL,STAT2_BIT JZ DEV3 CALL FARPTRPROC2DEV3: IN AL,STAT3 TEST AL,STAT3_BIT JZ DEV1 CALL FARPTRPROC3優:程序安排或修改設備的優先次序缺:查詢等待浪費CPU大量有效時間使用I/O指令直接控制輸入輸出比調用DOS功能或BIOS例行程序效率更高,但其對硬件的依賴性很大,所以一般的程序設計還是盡可能使用DOS或BIOS功能調用。12發聲系統為了具有音響輸出能力,系統板上裝有一個2.25英寸的揚聲器以及控制電路和驅動電路。控制電路能以位觸發和定時器控制兩種不同的方式驅動揚聲器發聲。設備控制寄存器(61h)1/00
控制其它外部設備與門放大器2號定時器門控10(1)位觸發方式程序直接控制PPI(8255A可編程序外圍接口芯片)的輸出控制寄存器(I/O端口61H)的1位,使該位按所需的頻率進行1和0的交替變化,從而控制開關電路產生一串脈沖波形,經放大后驅動揚聲器發聲。如果控制這一串脈沖的脈寬和長度就可以產生不同頻率和不同音長的聲音。13例8.1:Sound程序;-------發聲程序,
……
movdx,100;50個周期,脈沖持續的時間
inal,61handal,11111100b;置0、1位為0sound:xoral,2;改變1位的值,與1異或取反
out61h,almovcx,2800;控制延遲時間,即脈寬wait1:loopwait1;8086CPUloop指令;執行17個時鐘周期;延遲時間2800*17*T;(T為主頻的倒數)decdxjnesound;假如系統頻率為4.7MHZ,;得到延遲時間為10ms……14
使用LOOP指令實現延遲的程序延遲時間依賴CPU主頻和LOOP指令的執行周期,為了建立一個與處理器無關的時間延遲,IBM采用了一種利用硬件產生時間延遲的方法。……wait1:movcx,633;633*
15.08*10-6s=10mscallwaitf;調用延時15.08*10-6s
decbx;BX控制音頻
jnzwait1…….
15利用硬件產生延遲的方法,與處理器無關
;-----------------------利用端口61h的PB4延時15.08*10-6s子程序;-----------------------入口參數為CX,必須裝入15.08*10-6s的倍數waitfprocnear push axwaitf1: in al,61h and al,10h cmp al,ah je waitf1 mov ah,al loop waitf1 pop ax retwaitfendp16(2)定時器觸發方式
可編程時間間隔定時器8253/8254計數器0:用于控制系統時鐘正常運轉,端口地址為40H。計數器1:用于存儲器刷新,端口地址為41H。計數器2:用于控制揚聲器發聲,端口地址為42H。公用的控制寄存器:端口地址為43H178253/8254定時器作為發聲源計數器2的G端與61H端口的bit0位相連,將61H端口的bit0位置成1,那么計數器2就被啟動,此時將有一組信號從OUT端輸出,信號的頻率可以用程序控制(設初值);若61H端口bit0位為0,則定時器被關閉,OUT端就會恒定為1。系統將定時器產生的方波信號同8255的端口B相與來控制揚聲器發聲,因此當PB1=1時,才能控制揚聲器的音調。在系統中8255的B口地址為61H。
圖控制揚聲器發聲原理圖18揚聲器驅動
與門用在這里相當一個“可控開關”,如果將61H端口的bit0、bit1位都置成1,則相當于既打開了定時器又打開了開關,這時候定時器產生的聲音信號就會送到放大器推動喇叭發聲;稱為定時器觸發方式若將bit0位置0,則定時器關閉,此時OUT端為1,這時候如果連續改變bit1位的狀態,也可以從喇叭中聽到聲音,這就是位觸發方式;若將bit1位置0,則開關關閉,此時即使打開定時器也不能聽到聲音。
INAL,61H
;讀狀態
MOVAH,AL
;保存原狀態,pushax
ORAL,00000011B
;置bit0,bit1為1
OUT61H,AL…….
MOVAL,AH
;恢復原狀態,popax
OUT61H,AL19GENSOUND PROC FAR
PUSHAX
PUSH CXPUSH DXPUSH DI;入口參數(DI)=指定聲音的頻率
MOV AL,0B6H;向8253-5/8254-2計數器2寫控制字 OUT 43H,AL
;方式3、雙字節寫和二進制計數方式寫到控制口 MOV DX,12H;設置被除數(DX:AX)=1193181.7Hz MOV AX,348CH DIV DI;其商(AX)為預置值 OUT 42H,AL;先送LSBMOV AL,AH OUT 42H,AL;后送MSB揚聲器發聲通用子程序20
IN AL,61H;讀8255端口B(61H)原值 MOV AH,AL;保存端口原值 OR AL,3 OUT 61H,AL;接通揚聲器WAIT1:MOVCX,633;等待10ms
callwaitf;調用延時15.08*10-6s DEC BX;入口參數(BX)=循環次數 JNZ WAIT1;音長=BX*10msMOV AL,AH;寫回61H口原值,關閉揚聲器OUT 61H,AL21 POP DI;恢復寄存器 POP DX POP CX POP BX POP AX RET ;子程序結束返回GENSOUND ENDPCODE ENDSEND返回本節22演奏樂曲程序音名CDEFGABCDEFGABC唱名12345671234567i頻率(Hz)131147165175196220247262294330349392440492523表1
音律與頻率對應表低中高23TITLEMUSIC–樂曲“瑪麗有只小羊羔”DATA SEGMENTMUS_FREQ
;為演奏的樂曲定義一個頻率表DW330,294,262,294,3DUP(330);1,2節DW3DUP(294),330,392,392;3,4節
DW330,294,262,294,4DUP(330);5,6節DW294,294,330,294,262,-1;7,8節MUS_TIME
;為演奏的樂曲定義一個節拍時間表DW 6DUP(25*8),50*8;全音符為8*100DW 2DUP(25*8,25*8,50*8)DW 12DUP(25*8),100*8DATA ENDS24;CODE SEGMENT ASSUMECS:CODE,SS:STACK,DS:DATAMUSIC PROC FARPUSH DSSUB AX,AXPUSH AXMOV AX,DATA ;指向數據指針MOV DS,AXLEA SI,MUS_FREQ;將頻率表的偏移地址送入SILEABP,MUS_TIME;將節拍時間表的偏移地址送入BPFREQ:MOV DI,[SI];取音符頻率 CMP DI,-1 ;結束? JE END_MUS;是,退出
25
MOV BX,DS:[BP];取音符持續時間CALL GENSOUND ;調用GENSOUND發音子程序 ADD SI,2 ;頻率表指針增2(字類型) ADD BP,2;時間表指針增2 JMP FREQ ;繼續演奏END_MUS: RET ;返回DOSMUSIC ENDPCODE ENDS END 返回本節26補充知識:CMOSRAM芯片PC機中有一個CMOSRAM芯片,其有如下特征:(1)包含一個實時鐘和一個有128個存儲單元的RAM存儲器。(2)該芯片靠電池供電。所以,關機后其內部的實時鐘仍可正常工作,RAM中的信息不丟失。(3)128個字節的RAM中,內部實時鐘占用0~0dh單元來保存時間信息,其余大部分分單元用于保存系統配置信息,供系統啟動時BIOS程序讀取。BIOS也提供了相關的程序,使我們可以在開機的時候配置CMOSRAM中的系統信息。27補充知識:CMOSRAM芯片CMOSRAM芯片特征:(4)該芯片內部有兩個端口,端口地址為70h和71h。CPU通過這兩個端口讀寫CMOSRAM。(5)70h為地址端口,存放要訪問的CMOSRAM單元的地址;71h為數據端口,存放從選定的CMOSRAM單元中讀取的數據,或要寫入到其中的數據。可見,CPU對CMOSRAM的讀寫分兩步進行。比如:讀CMOSRAM的2號單元:1、將2送入端口70hmoval,2out70h,al2、從71h讀出2號單元的內容inal,71h28CMOSRAM中存儲的時間信息在CMOSRAM中,存放著當前時間:秒:00H分:02H時:04H星期:06H日:07H月:08H年:09H這6個信息的長度都為1個字節。這些數據以BCD碼的方式存放:數碼:01234BCD碼:00000001001000110100數碼:56789BCD碼:0101011001111000100129CMOSRAM中存儲的時間信息比如:數值26,用BCD碼表示為:00100110可見,一個字節可表示兩個BCD碼。則CMOSRAM存儲時間信息的單元中,存儲了用兩個BCD碼表示的兩位十進制數,高4位的BCD碼表示十位,低4位的BCD碼表示個位。比如:00010100b表示14。
30CMOSRAM中存儲的時間信息編程:在屏幕上顯示當前的月份。分析:這個程序主要做兩部分工作:(1)從CMOSRAM的8號單元讀出當前月份的BCD碼;(2)將用BCD碼表示的月份以十進制的形式顯示到屏幕上。BCD碼值=十進制數碼值,則BCD碼值+30h=十進制數對應的ASCII碼。從CMOSRAM的8號單元讀出的一個字節中,包含了用兩個BCD碼表示的兩位十進制數,高4位的BCD碼表示十位,低4位的BCD碼表示個位。要分兩次進行轉換顯示。
31要讀取CMOSRAM的信息,我們首先要向地址端口70h寫入要訪問的單元的地址:moval,8out70h,al然后從數據端口71h中取得指定單元中的數據:inal,71h
movah,al;al中為從CMOSRAM的8號單元讀出的數據movcl,4shrah,cl;ah中為月份的十位數碼值
andal,00001111b;ah中為月份的個位數碼值addah,30h;ah中為月份的十位數SACII碼addal,30h;ah中為月份的個位數SACII碼32請編程在屏幕上以“年/月/日時:分:秒”的格式,顯示當前的日期、時間。33中斷:使cpu中止正在執行的程序而轉去處理特殊事件的操作。中斷源:引起中斷的事件。8086/8088CPU最多有256個中斷源,這些中斷源根據來自CPU的內部還是外部分為兩大類:內部中斷源和外部中斷源。外中斷(硬中斷):外設的I/O請求——可屏蔽中斷INTR電源掉電/奇偶錯——非屏蔽中斷NMI所謂不可屏蔽中斷是指該中斷請求不能通過軟件的方式對其屏蔽,一旦出現NMI中斷請求,CPU必須立即響應。內中斷(軟中斷):
INT指令/CPU錯(除法錯、溢出)/為調試程序設置的中斷(t、g命令)8.3中斷傳送方式34非屏蔽中斷請求
中斷邏輯INTnINTO除法錯單步n401CPU2NMI8259A可編程中斷控制器(PIC)IR0系統定時器IR1鍵盤IR2彩色/圖形接口IR3保留IR4串行通訊口IR5保留IR6軟盤IR7打印機INTR08090A0B0C0D0E0F80x86中斷源(圖中引線端標示的數字為分配的終端類型號N(0-255)):8259A外部有28個引腳。有9片8259A可構成64級中斷源。35
類型0的(IP)
類型0的(CS)
類型1的(IP)
類型1的(CS)
類型N的(IP)
類型N的(CS)
類型255的(IP)
類型255的(CS)00000000044*N003FC中斷向量—中斷處理程序的入口地址(段址):(偏址)中斷向量表:各類型(0~0FFH)中斷處理程序的入口地址表36設置CPU中斷允許位:
FLAGS中的IF位=1允許中斷(STI開中斷)=0禁止中斷(CLI關中斷)設置中斷屏蔽位:
中斷屏蔽寄存器的中斷屏蔽位=0允許I/O設備請求中斷=1禁止I/O設備請求中斷76543210定時器鍵盤打印機中斷屏蔽寄存器21H76543210中斷命令寄存器20HEOIMOVAL,20HOUT20H,AL8259A中斷的條件(從外設發出中斷請求到CPU響應中斷,有兩個控制條件起決定性作用):INAL,21HANDAL,0FDH
OUT21H,AL結束硬件中斷RSL37CPU中斷過程:(1)取中斷類型:CPU←typeN(2)保護現場:FLAGS、CS、IP入棧(3)IF=0(關中斷),TF=0(禁止單步中斷)(4)計算中斷向量地址,取中斷向量:(4×N)→IP (4×N+2)→CS(5)轉中斷處理程序以上步驟都由硬件完成。采用向量中斷的方法,大大加快了中斷處理的速度。因為計算機可直接通過中斷向量表轉向相應的處理程序,而不需要CPU去逐個檢測和確定中斷原因。38int指令格式:intn;n為中斷類型碼。功能:是引發n號中斷過程。CPU執行intn過程如下:(1)取中斷類型碼n;(2)標志寄存器入棧,IF=0,TF=0;(3)CS、IP入棧;(4)(IP)=(n*4),(CS)=(n*4+2)。從此處轉去執行n號中斷的中斷處理程序。39IRET指令可見,int指令的最終功能和call指令相似,都是調用一段程序。一般情況下,系統將一些具有一定功能的子程序,以中斷處理程序的方式提供給應用程序調用。我們在編程的時候,可以用int指令調用這些子程序,而在子程序中安排iret指令返回。我們將這樣的中斷處理子程序簡稱為中斷例程。Iret指令的執行過程相當于:popippopcspopflags40中斷程序的編寫步驟:中斷處理程序的編寫與子程序類似,先保護現場,再完成功能,然后恢復現場,最后用IRET指令返回,返回地址是中斷發生時緊接著的下一條指令。中斷處理子程序:保存寄存器內容如允許中斷嵌套,則開中斷(STI)中斷處理功能關中斷(CLI)送中斷結束命令(EOI)給中斷命令寄存器恢復寄存器內容IRET中斷返回主程序:1、設置中斷向量2、設置CPU的中斷允許位IF3、設置設備的中斷屏蔽位41注意:程序員在編程的時候可以調用系統設置好的中斷例程,也可以自己編寫中斷處理程序。
中斷類型號0、1、3、4是固定的內部中斷,向量2是非屏蔽中斷,向量5~31是保留給系統使用的中斷,向量32~255則是用戶可用的中斷。用戶可擴充自己需要的中斷功能。42例:為中斷類型N設置中斷向量……MOVAX,0MOVES,AX;中斷向量表的段地址為0000MOVBX,N*4;計算類型N的中斷向量地址
MOVAX,OFFSETINTHAND
MOVES:WORDPTR[BX],AX
;中斷處理程序的偏移地址(N*4)
MOVAX,SEGINTHANDMOVES:WORDPTR[BX+2],AX
;段地址(N*4+2)……INTHAND:;中斷處理程序……IRET43注意:在設置自己的中斷向量時,應先保存原中斷向量再設置新的中斷向量,在程序結束之前要恢復原中斷向量。一般是使用DOS功能調用(21H)存取中斷向量:設置中斷向量:AH=25HAL=中斷類型號DS:DX=中斷向量INT21H取中斷向量:AH=35HAL=中斷類型號INT21H返回時送ES:BX=中斷向量44MOVAL,NMOVAH,35HINT21H
;取原中斷向量PUSHESPUSHBX
;保存原中斷向量PUSHDSMOVAX,SEGINTHANDMOVDS,AXMOVDX,OFFSETINTHANDMOVAL,NMOVAH,25HINT21H
;設置新的中斷向量
POPDS……POPDXPOPDSMOVAL,NMOVAH,25HINT2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山西職業技術學院《中級財務會計上》2023-2024學年第二學期期末試卷
- 江蘇財經職業技術學院《遙感原理與方法》2023-2024學年第二學期期末試卷
- 山西電力職業技術學院《水利類專業概論》2023-2024學年第二學期期末試卷
- 四平職業大學《護理禮儀與人際溝通(實驗)》2023-2024學年第二學期期末試卷
- 九江理工職業學院《書寫技能》2023-2024學年第二學期期末試卷
- 上海市黃埔區2025年初三5月仿真考試數學試題含解析
- 山東省鄆城第一中學2025屆初三下學期第18周物理試題考試試題含解析
- 山西工程科技職業大學《環境資源保護法》2023-2024學年第二學期期末試卷
- 南方醫科大學《植物生物學》2023-2024學年第二學期期末試卷
- 二零二五版租賃合同補充協議書范例
- (二調)武漢市2025屆高中畢業生二月調研考試 政治試卷(含標準答案)
- 2025年共青團團課考試題庫及答案
- T-CECS120-2021套接緊定式鋼導管施工及驗收規程
- 2024年湖北省武漢市高考數學一調試卷
- 河北工業大學碩士生指導教師(含新申請者)簡況表.
- TAIYE370-DTH-IV液壓鉆機操作維護說明書
- 金屬壓鑄機的plc控制
- 吉林大學第一臨床醫學院進修人員申請表
- 吉爾吉斯斯坦共和國公司法
- 進制轉換(課堂PPT)
- C++程序設計(譚浩強完整版).pdf
評論
0/150
提交評論