使用BIOS進行鍵盤輸入和磁盤讀寫_第1頁
使用BIOS進行鍵盤輸入和磁盤讀寫_第2頁
使用BIOS進行鍵盤輸入和磁盤讀寫_第3頁
使用BIOS進行鍵盤輸入和磁盤讀寫_第4頁
使用BIOS進行鍵盤輸入和磁盤讀寫_第5頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

《匯編語言》課件

王爽著-清華大學出版社制作工具:MicrosoftPowerPoint本課件由匯編網(wǎng)()制作提供使用BIOS進行鍵盤輸入和磁盤讀寫第1頁第17章使用BIOS進行鍵盤輸入和磁盤讀寫17.1int9中止例程對鍵盤輸入處理17.2使用int16h中止例程讀取鍵盤緩沖區(qū)17.3字符串輸入17.4應用int13h中止例程對磁盤進行讀寫使用BIOS進行鍵盤輸入和磁盤讀寫第2頁引言大多數(shù)有用程序都需要處理用戶輸入,鍵盤輸入是最基本輸入。程序和數(shù)據(jù)通常需要長久存放,磁盤是最慣用存放設備。BIOS為這兩種外設I/O提供了最基本中止例程,在本章中,我們對它們應用和相關問題進行討論。使用BIOS進行鍵盤輸入和磁盤讀寫第3頁17.1int9中止例程對鍵盤輸入處理我們已經(jīng)講過,鍵盤輸入將引發(fā)9號中止,BIOS提供了int9中止例程。CPU在9號中止發(fā)生后,執(zhí)行int9中止例程,從60h端口讀出掃描碼,并將其轉化為對應ASCII碼或狀態(tài)信息,存放在內存指定空間(鍵盤緩沖區(qū)或狀態(tài)字節(jié))中。使用BIOS進行鍵盤輸入和磁盤讀寫第4頁17.1int9中止例程對鍵盤輸入處理普通鍵盤輸入,在CPU執(zhí)行完int9中止例程后,都放到了鍵盤緩沖區(qū)中。鍵盤緩沖區(qū)中有16個字單元,能夠存放15個按鍵掃描碼和對應入ASCII碼。使用BIOS進行鍵盤輸入和磁盤讀寫第5頁17.1int9中止例程對鍵盤輸入處理下面我們按照鍵盤緩沖區(qū)邏輯結構,來看一下鍵盤輸入掃描碼和對應ASCII碼是怎樣寫入鍵盤緩沖區(qū)。注意使用BIOS進行鍵盤輸入和磁盤讀寫第6頁17.1int9中止例程對鍵盤輸入處理注意:在我們課程中,僅在邏輯結構基礎上,討論BIOS鍵盤緩沖區(qū)讀寫問題。其實鍵盤緩沖區(qū)是用環(huán)形隊列結構管理內存區(qū),但我們不對隊列和環(huán)形隊列實現(xiàn)進行討論,因為那是另一門專業(yè)課《數(shù)據(jù)結構》內容。使用BIOS進行鍵盤輸入和磁盤讀寫第7頁17.1int9中止例程對鍵盤輸入處理下面,我們經(jīng)過下面幾個鍵:

A、B、C、D、E、shift_A、A

輸入過程,簡明地看一下int9中止例程對鍵盤輸入處理方法:

處理鍵盤輸入演示使用BIOS進行鍵盤輸入和磁盤讀寫第8頁使用BIOS進行鍵盤輸入和磁盤讀寫第9頁17.2使用int16h中止例程讀取鍵盤緩沖區(qū)BIOS提供了int16h中止例程供程序員調用。

int16h中止例程中包含一個最主要功效是從鍵盤緩沖區(qū)中讀取一個鍵盤輸入,該功效編號為0。使用BIOS進行鍵盤輸入和磁盤讀寫第10頁17.2使用int16h中止例程讀取鍵盤緩沖區(qū)下面指令從鍵盤緩沖區(qū)中讀取一個鍵盤輸入,而且將其從緩沖區(qū)中刪除:

movah,0

int16h

結果:(ah)=掃描碼,

(al)=ASCII碼。

使用BIOS進行鍵盤輸入和磁盤讀寫第11頁17.2使用int16h中止例程讀取鍵盤緩沖區(qū)下面,我們接著上一節(jié)中鍵盤輸入過程,看一下int16h怎樣讀取鍵盤緩沖區(qū)。

int16h讀鍵盤緩沖區(qū)演示使用BIOS進行鍵盤輸入和磁盤讀寫第12頁使用BIOS進行鍵盤輸入和磁盤讀寫第13頁17.2使用int16h中止例程讀取鍵盤緩沖區(qū)從上面我們能夠看出,int16h中止例程0號功效,進行以下工作:(1)檢測鍵盤緩沖區(qū)中是否有數(shù)據(jù);(2)沒有則繼續(xù)做第1步;(3)讀取緩沖區(qū)第一個字單元中鍵盤輸入;(4)將讀取掃描碼送入ah,ASCII碼送入al;(5)將己讀取鍵盤輸入從緩沖區(qū)中刪除。

使用BIOS進行鍵盤輸入和磁盤讀寫第14頁17.2使用int16h中止例程讀取鍵盤緩沖區(qū)可見,B1OSint9中止例程和int16h中止例程是一對相互配合程序,int9中止例程向鍵盤緩沖區(qū)中寫入,int16h中止例程從緩沖區(qū)中讀出。它們寫入和讀出時機不一樣,int9中止例程在有鍵按下時候向鍵盤緩沖區(qū)中寫入數(shù)據(jù);而int16h中止例程是在應用程序對其進行調用時候,將數(shù)據(jù)從鍵盤緩沖區(qū)中讀出。

使用BIOS進行鍵盤輸入和磁盤讀寫第15頁17.2使用int16h中止例程讀取鍵盤緩沖區(qū)我們在編寫普通處理鍵盤輸入程序時候,能夠調用int16h從鍵盤緩沖區(qū)中讀取鍵盤輸入。編程,接收用戶鍵盤輸入,輸入“r”,將屏幕上字符設置為紅色:輸入“g”,將屏幕上字符設置為綠色;輸入“b”,將屏幕上字符設置為藍色。程序源碼使用BIOS進行鍵盤輸入和磁盤讀寫第16頁尤其提醒檢測點17.1(page294)沒有經(jīng)過此檢測點,請不要向下進行!使用BIOS進行鍵盤輸入和磁盤讀寫第17頁17.3字符串輸入用戶經(jīng)過鍵盤輸入通常不但僅是單個字符而是字符串。下面我們討論字符串輸入中問題和簡單處理方法。使用BIOS進行鍵盤輸入和磁盤讀寫第18頁17.3字符串輸入最基本字符串輸入程序,需要具備下面功效:(1)在輸入同時需要顯示這個字符串;(2)普通在輸入回車符后,字符串輸入結束;(3)能夠刪除已經(jīng)輸入字符。對于這三個功效,我們能夠想象在DOS中,輸入命令行時情況。使用BIOS進行鍵盤輸入和磁盤讀寫第19頁17.3字符串輸入編寫一個接收字符串輸入子程序,實現(xiàn)上面三個基本功效。因為在輸入過程中需要顯示,子程序參數(shù)以下:(dh)、(dl)=字符串在屏幕上顯示行、列位置;ds:si指向字符串存放空間,字符串以0為結尾符。下面我們進行分析

使用BIOS進行鍵盤輸入和磁盤讀寫第20頁17.3字符串輸入(1)字符輸入和刪除。

每個新輸入字符都存放在前一個輸入字符之后,而刪除是從最終面字符進行。我們看下面過程:空字符串:輸入“a”:a

輸入“b”:ab

輸入“c”:abc

輸入“d”:abcd

刪除一個字符:abc

刪除一個字符:ab

刪除一個字符:a

刪除一個字符:使用BIOS進行鍵盤輸入和磁盤讀寫第21頁17.3字符串輸入能夠看出在字符串輸入過程中,字符輸入和輸出是按照棧訪問規(guī)則進行,即后進先出。這么,我們就能夠用棧方式來管理字符串存放空間,也就是說,字符串存放空間實際上是一個字符棧。字符棧中全部字符,從棧底到棧頂,組成一個字符串。使用BIOS進行鍵盤輸入和磁盤讀寫第22頁17.3字符串輸入(2)在輸入回車符后,字符串輸入結束。輸入回車符后,我們能夠在字符串中加入0,表示字符串結束。

使用BIOS進行鍵盤輸入和磁盤讀寫第23頁17.3字符串輸入(3)在輸入同時需要顯示這個字符串。每次有新字符輸入和刪除一個字符時候,都應該重新顯示字符串,即從字符棧棧底到棧頂,顯示全部字符。

使用BIOS進行鍵盤輸入和磁盤讀寫第24頁17.3字符串輸入(4)程序處理過程。現(xiàn)在我們能夠簡單地確定程序處理過程以下:①調用int16h讀取鍵盤輸入;②假如是字符,進入字符棧,顯示字符棧中全部字符;繼續(xù)執(zhí)行①;③假如是退格鍵,從字符棧中彈出一個字符,顯示字符棧中全部字符;繼續(xù)執(zhí)行①;④假如是Enter鍵,向字符棧中壓入0,返回。

使用BIOS進行鍵盤輸入和磁盤讀寫第25頁17.3字符串輸入從程序處理過程中能夠看出,字符棧入棧、出棧和顯示棧中內容,是需要在多處使用功效,我們應該將它們寫為子程序。

使用BIOS進行鍵盤輸入和磁盤讀寫第26頁17.3字符串輸入子程序:字符棧入棧、出棧和顯示。參數(shù)說明:(ah)=功效號,0表示入棧,1表示出棧,2表示顯示;ds:si指向字符棧空間;對于0號功效:(al)=入棧字符;對于1號功效:(al)=返回字符;對于2號功效:(dh)、(dl)=字符串在屏幕上顯示行、列位置。使用BIOS進行鍵盤輸入和磁盤讀寫第27頁17.3字符串輸入子程序代碼字符棧訪問規(guī)則以下所表示:(1)棧空(2)“a”入棧(3)“b”入棧使用BIOS進行鍵盤輸入和磁盤讀寫第28頁17.3字符串輸入另外一個要注意問題是:顯示棧中字符時候,要注意去除屏幕上上一次顯示內容。我們現(xiàn)在寫出完整接收字符串輸入子程序。使用BIOS進行鍵盤輸入和磁盤讀寫第29頁17.4應用int13h中止例程對磁盤進行讀寫我們主要以3.5英寸軟盤為例,進行講解。慣用3.5英寸軟盤結構:分為上下兩面,每面有80個磁道,每個磁道又分為18個扇區(qū),每個扇區(qū)大小為512B??側萘繛椋?面×80磁道×18扇區(qū)×512B=1440KB≈1.44MB使用BIOS進行鍵盤輸入和磁盤讀寫第30頁17.4應用int13h中止例程對磁盤進行讀寫磁盤實際訪問由磁盤控制器進行,我們能夠經(jīng)過控制磁盤控制器來訪問磁盤。只能以扇區(qū)為單位對磁盤進行讀寫。在讀寫扇區(qū)時候,要給出面號、磁道號和扇區(qū)號。面號和磁道號從0開始,而扇區(qū)號從1開始。使用BIOS進行鍵盤輸入和磁盤讀寫第31頁17.4應用int13h中止例程對磁盤進行讀寫假如我們經(jīng)過直接控制磁盤控制器來訪問磁盤,則需要包括許多硬件細節(jié)。BIOS提供了對扇區(qū)進行讀寫中止例程,這些中止例程完成了許多復雜和硬件相關工作。我們能夠經(jīng)過調用BIOS中止例程來訪問磁盤。使用BIOS進行鍵盤輸入和磁盤讀寫第32頁17.4應用int13h中止例程對磁盤進行讀寫B(tài)IOS提供訪問磁盤中止例程為int13h。以下,讀取0面0道1扇區(qū)內容到0:200:movax,0moves,axmovbx,200hmoval,1movch,0movcl,1movdl,0movdh,0movah,2int13h使用BIOS進行鍵盤輸入和磁盤讀寫第33頁17.4應用int13h中止例程對磁盤進行讀寫入口參數(shù):(ah)=int13h功效號(2表示讀扇區(qū))(al)=讀取扇區(qū)數(shù)(ch)=磁道號(cl)=扇區(qū)號(dh)=磁頭號(對于軟驅即面號,因為一個面用一個磁頭來讀寫)(dl)=驅動器號軟驅從0開始,0:軟驅A,1:軟驅B;硬盤從80h開始,80h:硬盤C,81h:硬盤D。es:bx指向接收此扇區(qū)讀入數(shù)據(jù)內存區(qū)使用BIOS進行鍵盤輸入和磁盤讀寫第34頁17.4應用int13h中止例程對磁盤進行讀寫返回參數(shù):操作成功:(ah)=0,(al)=讀入扇區(qū)數(shù)操作失?。?ah)=犯錯代碼使用BIOS進行鍵盤輸入和磁盤讀寫第35頁17.4應用int13h中止例程對磁盤進行讀寫將0:200中內容寫入0面0道1扇區(qū):movax,0moves,axmovbx,200hmoval,1movch,0movcl,1movdl,0movdh,0movah,3int13h使用BIOS進行鍵盤輸入和磁盤讀寫第36頁17.4應用int13h中止例程對磁盤進行讀寫入口參數(shù):(ah)=int13h功效號(3表示寫扇區(qū))(al)=寫入扇區(qū)數(shù)(ch)=磁道號(cl)=扇區(qū)號(dh)=磁頭號(面)(dl)=驅動器號軟驅從0開始,0:軟驅A,1:軟驅B;硬盤從80h開始,80h:硬盤C,81h:硬盤D。es:bx指向將寫入磁盤數(shù)據(jù)使用BIOS進行鍵盤輸入和磁盤讀寫第37頁17.4應用int13h中止例程對磁盤進行讀寫返回參數(shù):操作成功:(ah)=0,(al)=寫入扇區(qū)數(shù)操作失?。?ah)=犯錯代碼注意使用BIOS進行鍵盤輸入和磁盤讀寫第38頁17.4應用int13h中止例程對磁盤進行讀寫注意:下面我們要使用int13h中止例程對軟盤進行讀寫。直接向磁盤扇區(qū)寫入數(shù)據(jù)是很危險,很可能覆蓋掉主要數(shù)據(jù)。假如向軟盤0面0道1扇區(qū)中寫入了數(shù)據(jù),要使軟盤在現(xiàn)有操作系統(tǒng)下能夠使用,必須要重新格式化。使用BIOS進行鍵盤輸入和磁盤讀寫第39頁17.4應用i

溫馨提示

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

評論

0/150

提交評論