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

下載本文檔

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

文檔簡(jiǎn)介

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

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

3、址空間很少一部分。輸入輸出的基本概念1、 I/O端口地址和I/O指令8086PC機(jī)內(nèi)存地址空間分配3FFH輸入輸出的基本概念2. I/O指令由于8086的I/O端口地址和內(nèi)存單元地址是獨(dú)立的,所以要用專門的I/O指令來存取端口上的寄存器,即專門的I/O指令進(jìn)行輸入和輸出。I/O指令屬于數(shù)據(jù)傳送指令組(1)輸入指令I(lǐng)N 累加器,端口地址輸入指令從一個(gè)輸入端口讀取一個(gè)字節(jié)或一個(gè)字,傳送至AL(若是一個(gè)字節(jié))或AX(一個(gè)字)。端口地址可以采用直接方式表示,也可以是間接方式。直接方式:端口地址僅為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輸入一個(gè)字時(shí),相當(dāng)于同時(shí)從端口n和n+1分別讀取一個(gè)字節(jié)。如果兩條指令連續(xù)執(zhí)行,相當(dāng)于從端口2FCH輸入一個(gè)字節(jié)送入AL,從2FDH輸入一個(gè)字節(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輸出一個(gè)字時(shí),相當(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ù)總線上進(jìn)行傳送,所以通常采用分配不同端口的方法將他們加以區(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)備好或不忙時(shí),可以直接使用IN或OUT指令實(shí)現(xiàn)數(shù)據(jù)傳送。這種方式軟件實(shí)現(xiàn)簡(jiǎn)單,只要指令中指明端口地址,就可以連通指定外設(shè)進(jìn)行輸入和輸出。(2)查詢方式查詢方式適用于CPU與外設(shè)不同步的情況。輸入之前,查詢外設(shè)數(shù)據(jù)是否已準(zhǔn)備好,若數(shù)據(jù)已準(zhǔn)備好,則輸入;否則繼續(xù)查詢,直到數(shù)據(jù)準(zhǔn)備好。輸出之前查詢?cè)O(shè)備是否忙或不忙,等待到外設(shè)準(zhǔn)備好

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

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

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

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

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

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

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

14、 RAM的位移10H2DH單元的內(nèi)容求和,并與保存的累加和比較。若兩者不等,則置狀態(tài)字節(jié)第6位,表示累加和錯(cuò)。這往往會(huì)導(dǎo)致要求用戶重新進(jìn)行系統(tǒng)配置。下面的程序片段進(jìn)行累加和檢查,在累加和錯(cuò)時(shí)設(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;累加和檢查錯(cuò)標(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 ;或上累加和檢查錯(cuò)標(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、請(qǐng)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論