第一篇匯編語言16位匯編 (2)_第1頁
第一篇匯編語言16位匯編 (2)_第2頁
第一篇匯編語言16位匯編 (2)_第3頁
第一篇匯編語言16位匯編 (2)_第4頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、跟我一起學(xué)編程系列課程:第一篇匯編語言16位匯編 第四節(jié)輸入輸出與中斷 輸入輸出的基本概念 查詢方式傳送數(shù)據(jù) 中斷 基本輸入輸出系統(tǒng)BIOS 軟中斷處理程序舉例 第三部分匯編語言程序設(shè)計基礎(chǔ)回顧:計算機的構(gòu)成1.CPU2.主板3.內(nèi)存4.硬盤5.顯卡6.顯示器7.光驅(qū)8.鍵盤9.鼠標(biāo)10.機箱11.電源12.網(wǎng)卡13.聲卡14.其他外設(shè)顯示器鍵盤鼠標(biāo)機箱光驅(qū)輸入輸出的基本概念1、 I/O端口地址和I/O指令每種輸入和輸出設(shè)備都要通過一個硬件接口或者控制器和CPU相連。打印機,顯示器,鍵盤鼠標(biāo)等。從程序設(shè)計的角度來看,接口由一組寄存器組成,是完成輸入輸出的橋梁。程序利用I/O指令,存取接口上的寄

2、存器,獲得外部設(shè)備的狀態(tài)信息,控制外部設(shè)備的動作,從而實現(xiàn)輸入和輸出。1. I/O端口地址為了存取接口上的寄存器,系統(tǒng)給這些寄存器分配專門的存取地址,這樣的地址稱為I/O端口地址。某些微型機上,I/O端口地址和存儲單元地址統(tǒng)一編址。相當(dāng)于把I/O接口視為一個或幾個存儲單元,利用存取內(nèi)存單元的指令就可以取接口上的寄存器。 缺點:占用有限的內(nèi)存單元,延長外部設(shè)備與處理器進行數(shù)據(jù)交換的時間。8086 I/O地址和存儲單元的地址是各自獨立的,分別占用兩個不同的地址空間。8086提供I/O端口地址空間64K個8位端口,或可接32K個16位端口。實際只使用了03FFH之間的I/O端口地址,只占整個I/O地

3、址空間很少一部分。輸入輸出的基本概念1、 I/O端口地址和I/O指令8086PC機內(nèi)存地址空間分配3FFH輸入輸出的基本概念2. I/O指令由于8086的I/O端口地址和內(nèi)存單元地址是獨立的,所以要用專門的I/O指令來存取端口上的寄存器,即專門的I/O指令進行輸入和輸出。I/O指令屬于數(shù)據(jù)傳送指令組(1)輸入指令I(lǐng)N 累加器,端口地址輸入指令從一個輸入端口讀取一個字節(jié)或一個字,傳送至AL(若是一個字節(jié))或AX(一個字)。端口地址可以采用直接方式表示,也可以是間接方式。直接方式:端口地址僅為8位立即數(shù),0255之間。間接方式:端口地址存放在DX寄存器,可以是16位IN AL,PORT ;AL=P

4、ORTIN AX,PORT ;AX=(PORT+1:PORT)例:IN AL,21HIN AL,DX ;AL=(DX)IN AX,DX ;AX=(DX+1:DX)例:MOV DX,2FCHIN AX,DX注意:當(dāng)端口n輸入一個字時,相當(dāng)于同時從端口n和n+1分別讀取一個字節(jié)。如果兩條指令連續(xù)執(zhí)行,相當(dāng)于從端口2FCH輸入一個字節(jié)送入AL,從2FDH輸入一個字節(jié)送入AH。輸入輸出的基本概念(2)輸出指令OUT 端口地址,累加器輸出指令將AL或AX輸出到指定端口。其他和輸入指令類似OUT PORT,AL ;(PORT)=ALOUT PORT,AX ;(PORT+1:PORT)=AXOUT DX,A

5、L ;(DX)=ALOUT DX,AX ;(DX+1:DX)=AX注意:當(dāng)端口n輸出一個字時,相當(dāng)于向端口n輸出AL中的內(nèi)容和向端口n+1輸出AH中的內(nèi)容。例如下面的程序片段向2FCH端口輸出23H,向2FDH端口輸出45H:MOV AX,4523HMOV DX,2FCHOUT DX,AX輸入輸出的基本概念2 、數(shù)據(jù)傳送方式1.CPU與外設(shè)之間交換的信息包括數(shù)據(jù),控制和狀態(tài)信息,都是通過IN和OUT指令在數(shù)據(jù)總線上進行傳送,所以通常采用分配不同端口的方法將他們加以區(qū)別。數(shù)據(jù)是CPU和外設(shè)真正要交換的信息。數(shù)據(jù)通常為8位或16位,可分為各種不同類型。不同的外設(shè)要傳送的數(shù)據(jù)類型也是不同的??刂菩畔?/p>

6、輸出到I/O接口,告訴接口和設(shè)備要做什么工作。從接口輸入的狀態(tài)信息表示I/O設(shè)備當(dāng)前的狀態(tài)。在輸入數(shù)據(jù)前,通常要先取得表示設(shè)備是否已準(zhǔn)備好的狀態(tài)信息;在輸出數(shù)據(jù)前,往往要先取得表示設(shè)備是否忙的狀態(tài)信息。2.數(shù)據(jù)傳送方式(1)無條件傳送方式不需要查詢外設(shè)的狀態(tài),即已知外設(shè)已準(zhǔn)備好或不忙時,可以直接使用IN或OUT指令實現(xiàn)數(shù)據(jù)傳送。這種方式軟件實現(xiàn)簡單,只要指令中指明端口地址,就可以連通指定外設(shè)進行輸入和輸出。(2)查詢方式查詢方式適用于CPU與外設(shè)不同步的情況。輸入之前,查詢外設(shè)數(shù)據(jù)是否已準(zhǔn)備好,若數(shù)據(jù)已準(zhǔn)備好,則輸入;否則繼續(xù)查詢,直到數(shù)據(jù)準(zhǔn)備好。輸出之前查詢設(shè)備是否忙或不忙,等待到外設(shè)準(zhǔn)備好

7、時才能輸入或輸出數(shù)據(jù),通常外設(shè)速度遠遠慢于CPU速度,于是查詢過程將花費大量時間。輸入輸出的基本概念(3)中斷方式為了提高CPU的效率,可采用中斷方式。當(dāng)外設(shè)準(zhǔn)備好時,外設(shè)向CPU發(fā)出中斷請求,CPU轉(zhuǎn)入中斷處理程序,完成輸入輸出工作。(4)直接存儲器傳送(DAM)方式由于高速I/O設(shè)備(硬盤等)準(zhǔn)備數(shù)據(jù)的時間短,要求傳輸速度快,采用DAM直接存儲器傳送方式,即直接交換數(shù)據(jù)。這種方式是成組進行的。其過程是:先把數(shù)據(jù)在高速外設(shè)中存放的起始位置。數(shù)據(jù)在內(nèi)存存儲器中存放的起始地址、傳送數(shù)據(jù)長度等參數(shù)輸出到連接高速外設(shè)的接口(控制器),然后啟動高速外設(shè),設(shè)備準(zhǔn)備開始直接傳送數(shù)據(jù)。當(dāng)高速外設(shè)直接傳送準(zhǔn)備

8、好之后,向處理機發(fā)送一個直接傳送的請求信號,處理機以最短實際批準(zhǔn)進行直接傳送。并讓出總線控制權(quán),高速外設(shè)在其控制器控制下交換數(shù)據(jù)。數(shù)據(jù)交換完畢后,由高速外設(shè)發(fā)出“完成中斷請求”,并交回總線控制權(quán)。處理機響應(yīng)上述中斷,由對應(yīng)的中斷處理程序?qū)Ω咚偻庠O(shè)進行控制或?qū)σ还?jié)傳送的數(shù)據(jù)進行處理,中斷返回后,原程序繼續(xù)運行。計算機結(jié)構(gòu)1.典型的馮.諾伊曼結(jié)構(gòu):(巴貝奇的分析機原理)2.以存儲為中心計算機結(jié)構(gòu)數(shù)據(jù)線控制線控制線反饋線數(shù)據(jù)線輸入輸出的基本概念3 、存取RT/CMOS RAM1.關(guān)于RT/CMOS RAMIBM及其兼容機都有RT/CMOS RAM芯片,即互補金屬氧化物半導(dǎo)體隨機存取存儲器,不僅可以長

9、期保存系統(tǒng)配置狀況,而且記錄包括世紀(jì),年,月,日和時分秒在內(nèi)的實時鐘信息。(real-time-clock)拓展:在PC機當(dāng)中,有一個CMOS RAM芯片,我們一般簡稱為CMOS,這個芯片的特征如下所示1、包含一個實時鐘和一個有128個存儲單元的RAM存儲器,關(guān)機后其內(nèi)部的實時鐘還是可以正常工作的,RAM當(dāng)中的信息不會丟失2、這個芯片常保存計算機基本啟動信息(如日期、時間、啟動設(shè)置等)的芯片,其實CMOS是主板上的一塊可讀寫的并行或串行FLASH芯片,是用來保存BIOS的硬件配置和用戶對某些參數(shù)的設(shè)定3、又稱BIOS存儲器,是電腦主板上的一種存儲器,用于存儲開機、初始化基本設(shè)備的信息,由主板B

10、IOS調(diào)用其存儲資料,最后由BIOS將電腦管理權(quán)交給操作系統(tǒng)4、主板電池是用于記錄計算機系統(tǒng)的時間,也就是維持系統(tǒng)時鐘的準(zhǔn)確性,電量不夠時,時間會回到出廠日期,還有記錄啟動時要用的硬件信息,也就是維持CMOS的BIOS信息。主板電池在我們使用的過程中沒有電的情況下是可以充電的。如果主板電池沒電了,電腦兩天不開機,開機后系統(tǒng)時間不是準(zhǔn)確的時間,會回到主板生產(chǎn)的時間,電量不足了,系統(tǒng)時間會變慢,比如現(xiàn)在是2013年1月1日10:00,可能會顯示顯示的時間是2013年1月1日 9:00,很容易識別.5、128個字節(jié)的RAM當(dāng)中,內(nèi)部實時鐘占用0-0dh單元來保存時間信息,其余大部分單元用于保存系統(tǒng)配

11、置信息,供系統(tǒng)啟動的時BIOS程序讀取。BIOS中提供了相關(guān)的程序,使我們可以在開機的時候配置CMOS RAM當(dāng)中的系統(tǒng)信息輸入輸出的基本概念6、這個芯片內(nèi)部有兩個端口,端口地址為70h和71h,CPU通過這兩個端口來讀寫CMOS RAM7、70h為地址端口,存放要訪問的CMOS RAM單元的地址,71h位數(shù)據(jù)端口,存放從選定的CMOS RAM單元中讀取的數(shù)據(jù),或者要寫入到其中的數(shù)據(jù),其實CPU對CMOS RAM的讀寫分為兩部分,比如說讀CMOS RAM 的2號單元 RT/CMOS RAM作為一個I/O接口芯片,系統(tǒng)分配的I/O端口地址區(qū)為70H至7FH,通過IN和OUT指令可對其進行存取。它

12、共提供64K個字節(jié)RAM單元,分配使用情況如表5.1所示。前14個字節(jié)用于實時鐘,剩下的50個字節(jié)用于系統(tǒng)配置。輸入輸出的基本概念2.存取RT/CMOS RAM存取RT/CMOS RAM芯片內(nèi)部64個字節(jié)內(nèi)容時,分兩步進行。即先把要存取單元的地址送端口70H,然后再存取端口71H。需要注意,14個記錄時鐘信息的單元(位移0至0DH)的地址就是表中位移,其他單元的地址時表5.1所示位移上加80H。(1)讀操作代碼如下:MOV AL,n ;n是要訪問單元地址OUT 70H,AL ;把要訪問單元的地址送地址端口JMP $+2 ;延時IN AL,71H ;從數(shù)據(jù)端口取訪問單元的內(nèi)容(2)寫操作代碼片段

13、如下:MOV AL,n ;n是要訪問單元地址OUT 70H,AL ;把要訪問單元的地址送地址端口JMP $+2 ;延時MOV AL,m ;m是要輸出的數(shù)據(jù)OUT 71H,AL ;把數(shù)據(jù)從數(shù)據(jù)端口輸出對同一個I/O設(shè)備或端口相繼發(fā)送I/O指令時,為確保I/O設(shè)備或端口有足夠的電路恢復(fù)時間,一般再I/O指令之間使用一條轉(zhuǎn)移指令JMP $+2;延時,以滿足I/O端口的需要。3.CMOS RAM累加和檢查在對系統(tǒng)配置時,要對COMS RAM的位移10H2DH的系統(tǒng)配置信息按字節(jié)求累加和,其值存放在位移2E2FH的單元中。低字節(jié)存放在2EH單元中,高字節(jié)存放在2FH單元中。在系統(tǒng)加電自檢時,將對CMOS

14、 RAM的位移10H2DH單元的內(nèi)容求和,并與保存的累加和比較。若兩者不等,則置狀態(tài)字節(jié)第6位,表示累加和錯。這往往會導(dǎo)致要求用戶重新進行系統(tǒng)配置。下面的程序片段進行累加和檢查,在累加和錯時設(shè)置診斷狀態(tài)字節(jié)的位6CMOS_PORT EQU 70H ;CMOS端口地址CMOS_BEGIN EQU 90H;求和開始地址CMOS_ENDEQU ADH;求和結(jié)束地址CHECK_SUMEQU AEH;累加和存放開始地址DIAG_STATUSEQU 8EH;診斷狀態(tài)字節(jié)地址BAD_CKSUMEQU 40H;累加和檢查錯標(biāo)志位SUB BX,BX ;累加和清0MOV CL,CMOS_BEGIN ;指向開始地址

15、MOV CH,CMOS-END+1 ;指向結(jié)束地址后一單元SUB AH,AHCMOS2:MOV AL,CLOUT CMOS_PORT,ALJMP $+2IN AL,CMOS_PORT+1 ;取一字節(jié)ADD BX,AX ;求累加和INC CL ;指向下一字節(jié)CMP CH,CL ;是否到結(jié)束地址JNZ CMOS2 ;未到,繼續(xù)求和;MOV AL,CHECK_SUM+1OUT CMOS_PORT,ALJMP $+2IN AL,CMOS_PORT+1 ;取原累加和高字節(jié)MOV AH,ALMOV AL,CHECK_SUMOUT CMOS_PORT,ALJMP $+2IN AL,CMOS_PORT+1 ;取原累加和低字節(jié)CMP AX,BXJZ CMOS4;MOV AL,DIAG_STATUSOUT CMOS_PORT,ALJMP $+2IN AL,CMOS_PORT+1 ;取診斷狀態(tài)字節(jié)MOV AH,AL ;送AHOR AH,BDA_CKSUM ;或上累加和檢查錯標(biāo)志MOV AL,DIAG_STATUSOUT CMOS_PORT,ALJMP $+2MOV AL,AHOUT CMOS_PORT+1,AL ;再送回診斷字節(jié)CMOS4:本節(jié)視頻的課后練習(xí)1、什么是I/O端口地址?8086的I/O端口地址空間有多大?2、請

溫馨提示

  • 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論