版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第9章 BIOS和DOS中斷調(diào)用程序設(shè)計(jì),9.1 鍵盤輸入中斷調(diào)用9.2 顯示器輸出中斷調(diào)用,開 始,DOS中斷和BIOS中斷,在存儲(chǔ)器系統(tǒng)中,內(nèi)存從0FE000H高端8K的ROM中存放有基本輸入輸出系統(tǒng)(Basic Input/Output System,BIOS)例行程序。BIOS給PC系列的不同微處理器提供了兼容的系統(tǒng)加電自檢、引導(dǎo)裝入、主要I/O設(shè)備的處理程序以及接口控制等功能模塊來處理所有的系統(tǒng)中斷。
2、 使用BIOS功能調(diào)用,給程序員編程帶來極大方便。程序員不必了解硬件的具體細(xì)節(jié),可直接使用指令設(shè)置參數(shù),并中斷調(diào)用BIOS例行程序,所以利用BIOS功能調(diào)用編寫的程序簡潔,可讀性好,而且易于移植,磁盤操作系統(tǒng)(Disk Operating System)是PC機(jī)上最重要的操作系統(tǒng),它是由軟盤或硬盤提供的。它的兩個(gè)DOS模塊IBMBIO.COM和IBMDOS.COM使BIOS使用起來更方便。因?yàn)镈OS模塊提供了更多更必要的測試,使用DOS
3、操作比使用相應(yīng)功能的BIOS操作更簡易,而且DOS對(duì)硬件的依賴性更少些。 DOS模塊和ROM BIOS的關(guān)系如下圖所示。,DOS中斷和BIOS中斷使用方法,DOS功能調(diào)用與BIOS功能都通過軟件中斷調(diào)用。在中斷調(diào)用前需要把功能號(hào)裝入AH寄存器,把子功能號(hào)裝入AL寄存器,除此之外,還需要在CPU的寄存器中提供專門的調(diào)用參數(shù)。一般來說,調(diào)用DOS或BIOS功能時(shí),有以下幾個(gè)步驟:(1)將調(diào)用參數(shù)裝入指定的寄存器。(2)
4、如需功能調(diào)用號(hào),把它裝入AH。(3)如需子功能調(diào)用號(hào),把它裝入AL。(4)按中斷號(hào)調(diào)用DOS或BIOS。(5)檢查返回參數(shù)是否正確。,表9.1 BIOS中斷類型,地址(Hex) 類型碼 中斷名稱 0—3 0 除以0 4—7 1 單步 8—B 2
5、 非屏蔽 C—F 3 斷點(diǎn) 10—13 4 溢出 14—17 5 打印屏幕 18—1B 6 保留 1D—1F 7 保留 20—23
6、 8 定時(shí)器 24—27 9 鍵盤 28—2B A 保留的硬中斷 2C—2F B 異步通信(COM2) 30—33 C 異步通信(COM1) 34—37 D
7、 硬盤 38—3B E 軟盤 3C—3F F 并行打印機(jī),地址(Hex) 類型碼 中斷名稱40—43 10 視頻顯示I/O調(diào)用44—47 11 設(shè)備檢測調(diào)用48—4B 12
8、 存儲(chǔ)器容量檢測4C—4F 13 軟/硬盤I/O調(diào)用50—53 14 通信I/O調(diào)用54—57 15 盒式磁帶I/O調(diào)用58—5B 16 鍵盤I/O調(diào)用5C—5F 17 打
9、印機(jī)I/O調(diào)用60—63 18 ROM BASIC64—67 19 引導(dǎo)程序入口68—6B 1A 時(shí)間調(diào)用6C—6F 1B 鍵盤CTRL-BREAK控制70—73 1C 定時(shí)器報(bào)時(shí)74—
10、77 1D 顯示器參數(shù)表78—7B 1E 軟盤參數(shù)表,,,,,,,,,,,,,,,,,,,,,,,7C—7F 1F 字符點(diǎn)陣結(jié)構(gòu)參數(shù)表,BIOS中斷向量,表9.2 DOS中斷類型,9.1 鍵盤輸入中斷調(diào)用,9.1.1 ASCII與掃描碼 9.1.2 BIOS鍵盤中斷 9.1.3 DOS中
11、斷調(diào)用,9.1.1 ASCII與掃描碼,鍵盤是計(jì)算機(jī)最基本的一種輸入設(shè)備,用來輸入信息,以達(dá)到人機(jī)對(duì)話的目的。鍵盤主要由3種基本類型的鍵組成:(1)字符數(shù)字鍵:(2)擴(kuò)展功能鍵:如Home、End、Backspace、Delete、Insert、PgUp、PgDown以及功能鍵F1~F10(3)和其他鍵組合使用的控制鍵:如Alt,Ctrl,Shift等,鍵盤和主機(jī)通過5芯電纜相連,這5根線分別是電源線、地線、復(fù)位線以及鍵盤數(shù)據(jù)
12、線和鍵盤時(shí)鐘線。PC機(jī)系列的鍵盤觸點(diǎn)電路按16行×8列的矩陣來排列,用單片機(jī)Intel8048來控制對(duì)鍵盤的掃描。按鍵的識(shí)別采用行列掃描法,即根據(jù)對(duì)行線和列線的掃描結(jié)果來確定閉合鍵的位置,這個(gè)位置值稱為按鍵的掃描碼,通過數(shù)據(jù)線將8位掃描碼送往主機(jī)。當(dāng)在鍵盤上“按下”或“放開”一個(gè)鍵時(shí),如果鍵盤中斷是允許的(21H端口的第一位等于0),就會(huì)產(chǎn)生一個(gè)類型9的中斷,并轉(zhuǎn)入到BIOS的鍵盤中斷處理程序。,該處理程序從8255可編程外圍
13、接口芯片的輸入端口讀取一個(gè)字節(jié),這個(gè)字節(jié)的低7位是按鍵的掃描碼。最高位為0或者為1,分別表示鍵是“按下”狀態(tài)還是“放開”狀態(tài)。按下時(shí),取得的字節(jié)稱為通碼,放開時(shí)取得的字節(jié)稱為斷碼。如ESC鍵按下取得的通碼為01H(00000001B),放開ESC鍵時(shí)會(huì)產(chǎn)生一個(gè)斷碼81H(10000001B)。 BIOS鍵盤處理程序?qū)⑷〉玫膾呙璐a轉(zhuǎn)換成相應(yīng)的字符碼,大部分的字符碼是一個(gè)標(biāo)準(zhǔn)的ASCII碼;沒有相應(yīng)ASCII的鍵,如Alt和功
14、能鍵(F1~F10),字符碼為0;還有一些非ASCII碼鍵產(chǎn)生一個(gè)指定的操作。,鍵盤緩沖區(qū)鍵盤緩沖區(qū)是一個(gè)先進(jìn)先出的環(huán)形隊(duì)列,其所占內(nèi)存區(qū)域如下:,鍵盤緩沖區(qū)是一個(gè)環(huán)形隊(duì)列,其性質(zhì)與《數(shù)據(jù)結(jié)構(gòu)》課程中對(duì)“環(huán)形隊(duì)列”所描述的性質(zhì)完全一致。雖然緩沖區(qū)的本身長度為16個(gè)字,但出于判斷“對(duì)列滿”的考慮,它最多只能保存15個(gè)鍵盤信息。當(dāng)緩沖區(qū)滿時(shí),系統(tǒng)將不再接受按鍵信息,而會(huì)發(fā)出“嘟”的聲音,以示要暫緩按鍵。當(dāng)KBHead=KBTail時(shí),表
15、示無鍵盤輸入。,KBHead DW ? ;其內(nèi)存地址為0000:041AH,緩沖區(qū)頭指針KBTail DW ? ;其內(nèi)存地址為0000:041CH,緩沖區(qū)尾指針KBBuff DW 16 DUP(?) ;其內(nèi)存地址為0000:041EH,該緩沖區(qū) 的缺省長度為16個(gè)字,9.1.2 B
16、IOS鍵盤中斷,類型 16H 的中斷提供了基本的鍵盤操作,它的中斷處理程序包括3個(gè)不同的功能,分別根據(jù)AH寄存器中的子功能號(hào)來確定。 (1)AH=0 本功能為從鍵盤讀字符到AL寄存器中。(AL=字符碼,AH=掃描碼) (2)AH=1 本功能為讀鍵盤緩沖區(qū)字符到AL寄存器中, 并置ZF標(biāo)志位。(若ZF=0,則AL=字符碼,AH=掃描碼, ZF=1,緩沖區(qū)空) (3)AH=2 本功能為讀取特殊功能鍵的狀態(tài)。(AL=鍵盤
17、狀態(tài)字節(jié)),code segment assume cs:code mov ah, 0 int 16h mov ah, 4ch int 21h code endsend,從鍵盤讀字符,在計(jì)算機(jī)鍵盤上除了可輸入各種字符(字母、數(shù)字和符號(hào)等)的按鍵之外,還有一些功能鍵(如:F1、F2、…等)、控制鍵(如:Ctrl、Alt、Sh
18、ift等)、雙態(tài)鍵(如:Num Lock、Caps Lock等)和特殊請(qǐng)求鍵(如:Print Screen、Scroll Lock等)。 鍵盤中的控制鍵和雙態(tài)鍵是非打印按鍵,它們是起控制或轉(zhuǎn)換作用的。當(dāng)使用者按下控制鍵或雙態(tài)鍵時(shí),系統(tǒng)要記住其所按下的按鍵。為此,在計(jì)算機(jī)系統(tǒng)中,特意安排的一個(gè)字來標(biāo)志這些按鍵的狀態(tài),我們稱該字為鍵盤狀態(tài)字。 鍵盤狀態(tài)字的各位含義如圖所示。,鍵盤狀態(tài)字,code segment
19、 assume cs:code mov ah, 2 int 16h mov ah, 4ch int 21h code endsend,讀取特殊功能鍵的狀態(tài),9.1.3 DOS鍵盤功能調(diào)用(INT 21H),無,get_key:mov ah, 1 int 21h
20、 cmp al , ’y’ je yes cmp al, ’n’ je no jne get_key,1)單字符輸入例9—2 接收鍵盤輸入并對(duì)其進(jìn)行測試。,wait_here: mov ah, 7 int 21h
21、 cmp al, 0dh jne wait_here,例9—3 檢測鍵盤輸入的字符是否是回車鍵。,code segment assume cs:code mov ah,7 int 21h cmp al,0 je get_char jmp errorget_cha
22、r_ mov ah,7 int 21h cmp al,3bh;F1 je option1 cmp al,3ch;F2 je option2 mov ah,4ch int 21hcode endsend,如果程序要求能接收功能鍵或數(shù)字組合鍵必須進(jìn)行兩次DOS功能調(diào)用:第一次回送00第二次回送掃描碼,例9-4 檢測鍵盤輸入
23、的功能鍵。,data segment smax db 21 sact db ? stri db 21 dup(?)data endscode segment assume cs:code,ds:data Start:mov ax,data mov ds,ax lea dx, stri mov ah,0ah int 21h mov
24、ah,4ch int 21h code endsEnd start,(1) smax db 21 sact db ? stri db 21 dup(?)(2) smax db 21 db ? db 21 dup(?)(3)smax db 21, ?, 21 dup(?),例9-5 輸入字符串程序,2)輸入字符串,Int 21的功能0ch能清除鍵盤緩沖區(qū),
25、然后執(zhí)行在AL中指定的功能。AL中指定的功能可以是1,6,7,8或0AH。,…mov ah, 0chmov al, 08h int 21h inc al je exit…Exit:,3)清除鍵盤緩沖區(qū),例 編寫按任意鍵結(jié)束程序的程序段,…mov ah, 0bh int 21h inc al je exit…Exit:,4)檢驗(yàn)鍵盤狀態(tài),顯示器可以簡單的分為單色顯
26、示器和彩色顯示器。隨著顯示技術(shù)的發(fā)展,種類也更加豐富,常見的有陰極攝像管(CRT)、液晶顯示器、等離子顯示器等。 顯示器是通過顯卡與主機(jī)相連。顯示器的顯示屏通常稱之為屏幕,現(xiàn)在常用的顯示器有14"和17",常用的顯示分辨率為800×600或1024×768等。常用的顯示卡類型為VGA、SVGA、EVGA和TVGA等,顯示卡上也都帶有大量的顯示存儲(chǔ)器,能快速顯示精美的圖象。1.MDA M
27、DA(Monochrome Display Adapter )屬于單色顯示適配器,是IBM最早研制的視頻顯示適配器。2.CGA 在MDA推出的同時(shí),IBM也推出了彩色圖形顯示適配器──CGA(Color Graphics Adapter)。,9.2 顯示器I/O,3.EGA 增強(qiáng)圖形顯示適配器──EGA(Enhanced Graphics Adapter)是IBM公司推出的第二代圖形顯示適配器,它兼容了
28、MDA和CGA的全部功能。4.VGA 視頻圖形陣列顯示適配器──VGA(Video Graphics Array)是IBM公司推出的第三代圖形顯示適配器,它兼容了MDA、CGA和EGA的全部功能。5. XGA XGA(Extended Graphics Array)是IBM公司繼VGA之后推出的擴(kuò)展圖形顯示適配器。,顯示模式 計(jì)算機(jī)系統(tǒng)中的顯示器都有二種顯示方式:文本顯示方式和圖形顯示方式。
29、 在DOS操作系統(tǒng)環(huán)境下,其默認(rèn)的顯示方式為文本顯示方式,而在Windows操作系統(tǒng)環(huán)境下,其顯示方式是圖形顯示方式,其絕大多數(shù)操作界面是以圖形界面的窗口形式出現(xiàn)的。,文本顯示方式 文本顯示方式是指以字符為最小單位的顯示方式,每個(gè)字符都是以矩形塊形式顯示的。在BIOS ROM中存有多種不同大小的字符集,主要的顯示字符集大小為:8×8(標(biāo)準(zhǔn))、8×14和8×16等。
30、 在常用的文本顯示模式(模式3)下,屏幕被劃分成25行,每行可顯示80個(gè)字符,所以,每屏最多可顯示2000(80×25)個(gè)字符。為了便于標(biāo)識(shí)屏幕上的每個(gè)顯示位置,我們就用其所在行和列來表示之,并規(guī)定:屏幕的左上角坐標(biāo)為(0, 0),右下角坐標(biāo)為(24, 79)。 在顯示字符時(shí),用一個(gè)字節(jié)存儲(chǔ)該字符的ASCII碼,用另一個(gè)字節(jié)存儲(chǔ)的顯示屬性,即:顯示顏色。 在80×25的文本顯示模式下,
31、滿屏可顯示2000個(gè)字符,也就需要4000個(gè)字節(jié)來存儲(chǔ)一屏的顯示信息。,圖形顯示方式 圖形顯示是目前最常用的一種顯示方式,也是Windows操作系統(tǒng)的默認(rèn)顯示方式。在該顯示方式下,我們可以看到優(yōu)美的圖象、VCD、瀏覽豐富多彩的網(wǎng)頁等。 圖形顯示的最小單位是象素,對(duì)每個(gè)象素可用不同的顏色來顯示。所以,在顯示緩沖區(qū)內(nèi)記錄的信息是屏幕各象素的顯示顏色。 由于各種圖形顯示模式所能顯示的顏色和象素是不同的,它決定了顯示緩沖
32、區(qū)的存儲(chǔ)方式也是不同的。下面給出三個(gè)具體的圖形顯示模式及其存儲(chǔ)方式,通過它們可看出各種顯示模式在顯示緩沖區(qū)存儲(chǔ)方式上的明顯差異。,4色320×200圖形顯示模式 由于每個(gè)象素只能是四種顏色之一,而四種情況用2位二進(jìn)制就可表示,所以,一個(gè)字節(jié)可表示4個(gè)象素的顯示顏色,存儲(chǔ)一行上的所有象素信息就需要80個(gè)字節(jié)。 在具體存儲(chǔ)過程中,它又把偶數(shù)行象素和奇數(shù)行分開來存儲(chǔ)。偶數(shù)行和齊數(shù)行的象素總數(shù)各有32000個(gè),也都需要
33、8000個(gè)字節(jié)來存儲(chǔ),并規(guī)定: 偶數(shù)行象素從0B800:0000H開始存儲(chǔ), 奇數(shù)行象素從0B800:2000H開始存儲(chǔ)。 該顯示模式的存儲(chǔ)形式如圖所示。,16色640×480圖形顯示模式 640×480圖形顯示模式共有307200個(gè)象素,每個(gè)象素可選用16種顏色,它需要用4位二進(jìn)制來表示。該顯示模式在存儲(chǔ)顯示信息時(shí),把該4位分在四個(gè)位平面P1、P2、P3和P4上,所以,位平面Pi(i=1,2
34、,3,4)共有307200個(gè)二進(jìn)制位,即有38400個(gè)字節(jié)。其顯示緩沖區(qū)的存儲(chǔ)形式如圖所示。,256色320×200圖形顯示模式 表達(dá)256種不同顏色需要8位二進(jìn)制,即一個(gè)字節(jié)。在該模式下,其顯示緩沖區(qū)的存儲(chǔ)方式是非常簡單的,即:第一個(gè)字節(jié)存儲(chǔ)第一個(gè)象素的顏色,第二個(gè)字節(jié)存儲(chǔ)第二個(gè)象素的顏色,以此類推,所以,存儲(chǔ)滿屏象素所需要的字節(jié)數(shù)為:320×200×1=64000。其顯示緩沖區(qū)的存儲(chǔ)方
35、式如圖所示。,從上面三種不同圖形顯示模式的介紹,不難看出:各種顯示模式在顯示緩沖區(qū)存儲(chǔ)方式上的明顯差異,操作象素方法的難易程度相差也很大,所以,再次建議:程序員不要用直接操作顯示緩沖區(qū)的辦法來達(dá)到改變顯示象素的目的,最好是通過BIOS內(nèi)的中斷功能來實(shí)現(xiàn)相應(yīng)的功能,這樣,所編寫的程序能很方便地適應(yīng)不同的圖形顯示模式。,9.2.1 字符屬性 顯示器的屏幕通常劃分為行和列的二維系統(tǒng),顯示適配器就在行列組成的網(wǎng)格位置上顯示字符
36、。對(duì)應(yīng)屏幕上的每個(gè)字符位置,主存空間都有相應(yīng)的存儲(chǔ)單元與之對(duì)應(yīng),因此可說是顯示屏幕式“存儲(chǔ)器的映像”。對(duì)應(yīng)顯示屏幕上的每個(gè)字符,在存儲(chǔ)器中由連續(xù)的兩個(gè)字節(jié)表示,一個(gè)字節(jié)表示ASCII碼,另一個(gè)字節(jié)保存字符的屬性。,單色顯示的屬性值,7 6 5 4 3 2 1 0,,,背景,前景,,,閃爍,亮度,1、單色字符屬性,2、彩色字符顯示,彩色字符顯示
37、屬性字節(jié),背景顏色組合,前景顏色組合,3. 顯示存儲(chǔ)器,對(duì)于所有的顯示適配器,文本方式下顯示字符的原理是一樣的,所不同的是顯存的起始地址不同,對(duì)于MDA,顯存的起始地址為B000:0000;對(duì)于CGA、EGA、VGA是B800:0000.每個(gè)字符的ASCII碼和屬性碼字節(jié)存放于兩個(gè)連續(xù)的字節(jié)中。圖形顯示方式下,其顯示緩沖區(qū)段地址為0A000H。 在25 X 80的文本顯示方式下,屏幕可有2000個(gè)字符位置,因每個(gè)字符需要用兩
38、個(gè)字節(jié),顯存容量需要多少?如果顯存有16K,可保存幾屏幕的數(shù)據(jù)?對(duì)CGA,EGA和VGA的80列顯示方式,0頁的起始地址是B800:0000,1頁的起始地址是B800:1000,2頁的起始地址為B800:2000,3頁的起始地址為B800:3000 。 如何計(jì)算一個(gè)字符在顯存中的位置?,9.2.2 BIOS顯示中斷調(diào)用,10H中斷調(diào)用為顯示器中斷,共有17種功 能。下面列出幾種主要功能的使用情況。 (1)設(shè)置顯示方式(0
39、號(hào)功能)入口參數(shù):AH=0(功能號(hào)),AL=設(shè)置方式(0~7)。出口參數(shù):無。(2)設(shè)置光標(biāo)類型(1號(hào)功能)入口參數(shù):AH=1(功能號(hào)),CH=光標(biāo)開始行,CL=光標(biāo)結(jié)束行。出口參數(shù):無。根據(jù)CX給出光標(biāo)的大小。,(3)設(shè)置光標(biāo)位置(2號(hào)功能) 入口參數(shù):AH=2(功能號(hào)),BH=頁號(hào),DH=行號(hào),DL=列號(hào)。 出口參數(shù):無。根據(jù)DX確定了光標(biāo)位置。(4)讀當(dāng)前光標(biāo)位置(3號(hào)功能)入口參數(shù);AH=3(功能號(hào)),BH=
40、頁號(hào)。出口參數(shù):DH=行號(hào),DL=列號(hào),CX=光標(biāo)大小。(5)初始窗口或向上滾動(dòng)(6號(hào)功能)入口參數(shù):AH=6,AL=上滾行數(shù),CX=上滾窗口左上角的行、列號(hào)。DX=上滾窗口右下角的行、列號(hào)。BH=空白行的屬性。出口參數(shù):無。當(dāng)滾動(dòng)后,底部為空白輸入行。,(6)初始窗口或向下滾動(dòng)(7號(hào)功能)入口參數(shù):AH=7,AL=下滾行數(shù),CX=下滾窗口左上角的行、列號(hào)。DX=下滾窗口右下角的行、列號(hào)。BH=空白行的屬性。出口參數(shù):無。
41、當(dāng)滾動(dòng)后,頂部為空白輸入行。(7)讀當(dāng)前光標(biāo)位置的字符與屬性(8號(hào)功能)入口參數(shù):AH=08H,BH=頁號(hào)。出口參數(shù):AL為讀出的字符,AH為字符屬性。,(8)在當(dāng)前光標(biāo)位置寫字符和屬性(9號(hào)功能)入口參數(shù):AH=9,BH=頁號(hào),AL=字符的ASCII碼,BL=字符屬性,CX=寫入字符重復(fù)次數(shù)。出口參數(shù):無。(9)在當(dāng)前光標(biāo)位置寫字符(10號(hào)功能)入口參數(shù):AH=0AH,BH=頁號(hào),AL=字符的ASCII碼,CX=寫入
42、字符重復(fù)次數(shù)。出口參數(shù):無。,(10)顯示字符串(13號(hào)功能)ES:BP=串地址CX=串長度DH,DL=起始行列BH=頁號(hào)AL=0,BL=屬性串:char,char…char 光標(biāo)返回到起始位置AL=1,BL=屬性串:char,char…char 光標(biāo)跟隨串移動(dòng)AL=2串:char,char…char 光標(biāo)返回起始位置AL=3串:char,char…char
43、 光標(biāo)跟隨串移動(dòng),code segment assume cs:code start:mov ch,5 mov cl,7 mov ah,1 int 10h mov dh,5 mov dl,6 mov bh,0 mov ah,2 int 10h mov ah,4ch
44、int 21hcode endsend start,例 置光標(biāo)開始行為5,結(jié)束行為7,并把它設(shè)置到第五行第六列,設(shè)置光標(biāo)位置(2號(hào)功能) 入口參數(shù):AH=2(功能號(hào)),BH=頁號(hào),DH=行號(hào),DL=列號(hào)。 出口參數(shù):無。根據(jù)DX確定了光標(biāo)位置。,設(shè)置光標(biāo)類型(1號(hào)功能)入口參數(shù):AH=1(功能號(hào)),CH=光標(biāo)開始行,CL=光標(biāo)結(jié)束行。出口參數(shù):無。根據(jù)CX給出光標(biāo)的大小。,例:編寫清除全屏幕的程序,clear segme
45、nt assume cs:clear mov ah,6 mov al,0 mov bh,7 mov ch,0 mov cl,0 mov dh,24 mov dl,79 int 10h mov dx,2 mov ah,2 int 10h mov ah,4ch int 21h
46、clear endsend,初始窗口或向上滾動(dòng)(6號(hào)功能)入口參數(shù):AH=6,AL=上滾行數(shù),CX=上滾窗口左上角的行、列號(hào)。DX=上滾窗口右下角的行、列號(hào)。BH=空白行的屬性。出口參數(shù):無。當(dāng)滾動(dòng)后,底部為空白輸入行。,設(shè)置光標(biāo)位置(2號(hào)功能) 入口參數(shù):AH=2(功能號(hào)),BH=頁號(hào),DH=行號(hào),DL=列號(hào)。 出口參數(shù):無。根據(jù)DX確定了光標(biāo)位置。,,,例 清除左上角為(00)右下角為(24,39)的窗口,初始化為反相
47、顯示。該窗口相當(dāng)于屏幕的左上角,clear segment assume cs:clear mov ah,7 mov al,0 mov bh,70h mov ch,0 mov cl,0 mov dh,24 mov dl,39 int 10h mov dx,2 mov ah,2 int 10h
48、 mov ah,4ch int 21hclear endsend,設(shè)置光標(biāo)位置(2號(hào)功能) 入口參數(shù):AH=2(功能號(hào)),BH=頁號(hào),DH=行號(hào),DL=列號(hào)。 出口參數(shù):無。根據(jù)DX確定了光標(biāo)位置。,初始窗口或向下滾動(dòng)(7號(hào)功能)入口參數(shù):AH=7,AL=下滾行數(shù),CX=下滾窗口左上角的行、列號(hào)。DX=下滾窗口右下角的行、列號(hào)。BH=空白行的屬性。出口參數(shù):無。當(dāng)滾動(dòng)后,頂部為空白輸入行。,,,例 在屏
49、幕中心顯示小窗口,data segment esc_key equ 1bh win_ulc equ 30 win_ulr equ 8 win_lrc equ 50 win_lrr equ 16 win_width equ 20data endscode segment ass
50、ume cs:code,ds:datastart:mov ah,2 mov dh,win_lrr mov dl,win_ulc mov bh,0 int 10h mov cx,win_widthget_char: mov ah,1 int 21h,cmp al, esc_key jz exit loop ge
51、t_char mov ah,6 mov al,1 mov ch,win_ulr mov cl,win_ulc mov dh,win_lrr mov dl,win_lrc mov bh,7 int 10h jmp startexit:mov ah,4ch int 21h code ends
52、end,,設(shè)置光標(biāo)位置(2號(hào)功能) 入口參數(shù):AH=2(功能號(hào)),BH=頁號(hào),DH=行號(hào),DL=列號(hào)。 出口參數(shù):無。根據(jù)DX確定了光標(biāo)位置。,初始窗口或向上滾動(dòng)(6號(hào)功能)入口參數(shù):AH=6,AL=上滾行數(shù),CX=上滾窗口左上角的行、列號(hào)。DX=上滾窗口右下角的行、列號(hào)。BH=空白行的屬性。出口參數(shù):無。當(dāng)滾動(dòng)后,底部為空白輸入行。,,例:在品紅背景下,顯示5個(gè)淺綠色閃爍的星號(hào),code segment assu
53、me cs:codestart: mov ah,9 mov al,'*' mov bh,0 mov bl,0dah mov cx,5 int 10h mov ah,4ch int 21h code endsend start,在當(dāng)前光標(biāo)位置寫字符和屬性(9號(hào)功能)入口參數(shù):AH=9,BH=頁號(hào),
54、AL=字符的ASCII碼,BL=字符屬性,CX=寫入字符數(shù)。出口參數(shù):無。,,在屏幕上以紅底藍(lán)字顯示字符串“WORLD SCENERY”,data segmentstring db 'world scenear'len equ $-stringdata endscode segment assume cs:codestart:mov ah,0 mov al,3
55、 int 10h mov bp,seg string mov es,bp mov bp,offset string,mov cx,len mov dx,0 mov bl,41h mov al,0 mov ah,13h int 10h mov ah,4ch int
56、 21h code endsend start,設(shè)置顯示方式(0號(hào)功能)入口參數(shù):AH=0(功能號(hào)),AL=設(shè)置方式(0~7)。出口參數(shù):無。,(10)顯示字符串(13號(hào)功能)ES:BP=串地址CX=串長度DH,DL=起始行列BH=頁號(hào)AL=0,BL=屬性串:char,char…char 光標(biāo)返回到起始位置AL=1,BL=屬性串:char,char…char 光標(biāo)跟隨移動(dòng)A
57、L=2串:char,char…char 光標(biāo)返回起始位置AL=3串:char,char…char 光標(biāo)跟隨移動(dòng),例 用直接寫屏方式在屏幕第5行、第10列以黃色(0EH)顯示字符串"Hello"。解:在文本顯示方式下,每行顯示80個(gè)字符,每個(gè)字符占2個(gè)字節(jié),所以,顯示一行需要160個(gè)字節(jié)。若在第m行、第n列位置顯示字符,則該位置所對(duì)應(yīng)存儲(chǔ)單元的偏移量為:m×
58、160 + n×2。,.MODEL SMALL.DATA Yellow EQU 0EH MSG1 DB "Welcome..." Count EQU $-MSG1.CODE .STARTUP MOV AX, 0B800H MOV ES, AX ;彩色顯示器的顯示緩沖區(qū)段地址 MOV DI, 5 IMUL DI, 160 ;5行所跳過的顯示存儲(chǔ)單元,M
59、OV CX, 10 SHL CX, 1 ;10列所跳過的顯示存儲(chǔ)單元 ADD DI, CX ;第5行、第10列之前所跳過的所有顯示單元 MOV CX, Count LEA SI, MSG1 ;CX:字符個(gè)數(shù),SI:顯示字符首地址 MOV AH, Yellow ;設(shè)置顯示屬性,即顯示顏色 .REPEAT LODSB;取顯示字符 STOSW ;向顯示緩沖區(qū)設(shè)置顯示字符和屬性 .UNTILCX
60、Z .EXIT 0 END,9.2.3 DOS顯示功能,計(jì)算機(jī)與外設(shè)交換信息的過程中:并行通信:多位數(shù)據(jù)通過多條數(shù)據(jù)線同時(shí)傳送。串行通信:多位數(shù)據(jù)通過同一條數(shù)據(jù)線按位傳送。 并行通信就是把一個(gè)字符的各數(shù)位用幾條線同時(shí)進(jìn)行傳輸。與串行通信(一位一位傳輸)相比,在相同傳輸率下,并行通信的信息實(shí)際傳輸速度快、信息率高。但并行通信比串行通信所用電纜多,隨著距離的增加,電纜的開銷會(huì)成為突出的問題。所以,并行通信總是用在
61、數(shù)據(jù)傳輸率要求較高,而傳輸距離較短的場合。,9.3 串行通信口I/O,串行通信可以分為兩種類型:同步通信、異步通信。,異步通信,一個(gè)字符一個(gè)字符地傳輸,每個(gè)字符一位一位地傳輸,傳輸一個(gè)字符時(shí),以起始位開始,然后傳輸字符本身的各位,接著傳輸校驗(yàn)位,最后以停止位結(jié)束該字符的傳輸。一次傳輸?shù)钠鹗嘉?、字符各位、校?yàn)位、停止位構(gòu)成一組完整的信息,稱為幀(Frame)。幀與幀之間可有任意個(gè)空閑位。起始位之后時(shí)數(shù)據(jù)的最低位。,在異步通信中
62、,每個(gè)字符都要用起始位作為字符的開始和結(jié)束的標(biāo)志,占用了傳輸?shù)臅r(shí)間,所以在數(shù)據(jù)塊傳送時(shí),為了提高效率,就要去掉這些標(biāo)志,采用同步通信。同步通信方式不給每個(gè)字符都加起始位和停止位,而把字符順序的連接起來,組成一個(gè)數(shù)據(jù)塊(首尾相連的數(shù)據(jù)串),把這樣一個(gè)數(shù)據(jù)塊稱為一個(gè)信息楨。在數(shù)據(jù)的開始加上一個(gè)同步字符,而在信息的末尾加有一定的差錯(cuò)檢驗(yàn)字符,其格式如下:,同步通信,,,,,,,同步字符 字符1 字符2
63、 …… 字符n 校驗(yàn)字符,,數(shù)據(jù)塊,實(shí)現(xiàn)串行通信有專用的接口芯片,常用的有USART(通用同步/異步接收/發(fā)送器)——如Intel8251和UART(通用異步接收/發(fā)送器)——如Ins 8250。無論是UART,還是USART,均能實(shí)現(xiàn)數(shù)據(jù)發(fā)送時(shí)所需要的并串轉(zhuǎn)換以及數(shù)據(jù)被CPU接收時(shí)所需要的串并轉(zhuǎn)換。,串行通信接口,串行通信基礎(chǔ),起始位,最低位,最高位,奇偶位,停止位,,,,,數(shù)據(jù)位,起始位邏輯0
64、1位數(shù)據(jù)位邏輯0或15位、6位、7位、8位校驗(yàn)位邏輯0或11位或無停止位邏輯11位、1.5位或2位空閑位邏輯1任意數(shù)量,異步通信的信息格式:,并行通信中,傳輸速率以每秒鐘傳輸多少字節(jié)來表示。而串行通信中,傳輸速率是用波特率來表示。所謂波特率是指單位時(shí)間內(nèi)傳送二進(jìn)制數(shù)據(jù)的位數(shù)(簡寫為bps)。在計(jì)算機(jī)里,每秒傳輸多少位和波特率的含義是完全一致的。但是要注意,在最初的定義上(波特率是每秒傳輸離散信號(hào)的數(shù)目),每
65、秒傳輸多少位和波特率是不相同的。收、發(fā)雙方的波特率必須一致。傳輸一位所需要的時(shí)間T叫“位周期”。,波特率和傳輸率,例:計(jì)算串行傳輸5頁,每頁80x25個(gè)字符總共需要多少位?假設(shè)每個(gè)字符8位,1位起始位和1位終止位。計(jì)算傳輸上述五頁所需要的時(shí)間。數(shù)據(jù)傳輸率分別為2400bps 和9600bps,RS232串行通信接口,為了兼容各廠家生產(chǎn)的數(shù)據(jù)通信設(shè)備,1960年電子工業(yè)協(xié)會(huì)(Electronics Industries associa
66、tion ,EIA)制定了RS-232接口標(biāo)準(zhǔn),以后又陸續(xù)發(fā)布了修訂版本RS-232A,RS-232B和RS-232C。目前廣泛應(yīng)用于個(gè)人計(jì)算機(jī)上的RS-232串行接口,他安裝于PC機(jī)內(nèi)的通信適配器版上。PC機(jī)上的COM1、COM2接口,就是RS-232C接口,使用9針和25針連接器,RS-232C采用負(fù)邏輯,且信號(hào)電平與TTL不兼容,規(guī)定邏輯“1”在-3V~-15V之間,邏輯“0”在+3V~+15V之間。RS-232C不是TT
67、L電平的接口標(biāo)準(zhǔn),當(dāng)計(jì)算機(jī)與外設(shè)進(jìn)行通信時(shí),必須有相應(yīng)的電平轉(zhuǎn)換電路。通常采用的是MC1488和MC1489電平轉(zhuǎn)換器。,串行接口芯片8250、8251均使用TTL電平,應(yīng)使用電平轉(zhuǎn)換電路與RS-232C連接器連接。MC1488:TTL電平→RS232電平 (用于發(fā)送方)MC1489:TTL電平←RS232電平 (用于接收方),IBM PC通信端口 在微機(jī)系統(tǒng)中,可以有兩個(gè)或多個(gè)端口連接到不同的外部設(shè)備上進(jìn)行通信
68、,如IBM PC和80X86兼容機(jī)可以連接4個(gè)通信端口,他們的編號(hào)為COM1—4(BIOS編號(hào)為COM0—3),但程序每次只能對(duì)其中一個(gè)端口進(jìn)行存取。當(dāng)微機(jī)加電自檢時(shí),由加電自檢程序來測試通用異步收發(fā)器的4個(gè)COM端口是否存在,如果微機(jī)系統(tǒng)中設(shè)置了COM端口,則設(shè)置的每個(gè)COM端口的I/O地址就寫到BIOS數(shù)據(jù)區(qū)的0040:0000—0040:0007,每個(gè)端口地址占用兩個(gè)字節(jié)。如果沒有連接串行端口,BIOS數(shù)據(jù)區(qū) 的這幾個(gè)單元的內(nèi)容就
69、成為0??梢杂肈EBUG查看URAT的端口地址。 保存在BIOS數(shù)據(jù)區(qū)的COM端口地址稱為基地址,因?yàn)槊總€(gè) COM端口都包括一組8位的寄存器,程序員可以通過這些寄存器進(jìn)行編程,以控制數(shù)據(jù)按設(shè)定的格式發(fā)送或接收數(shù)據(jù)。 BIOS數(shù)據(jù)區(qū)的COM端口地址是第一個(gè)寄存器的地址。,串行口功能調(diào)用1、DOS串行通信口功能使用DOS命令可以設(shè)置串行通信參數(shù),如波特率,字長,校驗(yàn)位和終止位。格式:MODE COMm:b ,p ,d
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- ibm-pc匯編語言程序設(shè)計(jì)5.
- ibm-pc匯編語言程序設(shè)計(jì)試題及答案
- ibm-pc匯編語言程序設(shè)計(jì)習(xí)題答案打印
- ibm-pc匯編語言程序設(shè)計(jì)(第2版)答案
- ibm-pc匯編語言程序設(shè)計(jì)第二版課后習(xí)題答案清華大學(xué)
- ibm-pc匯編語言程序設(shè)計(jì)第2章80x86計(jì)算機(jī)組織.
- bios和dos中斷
- 匯編語言程序設(shè)計(jì)
- 匯編語言程序設(shè)計(jì)
- dos和bios中斷
- bios和dos中斷84543
- 匯編語言程序設(shè)計(jì)前言
- ibm—pc匯編語言程序設(shè)計(jì)(第二版)電子教案第九章
- 匯編語言程序設(shè)計(jì)課后答案
- 實(shí)驗(yàn)一 匯編語言程序設(shè)計(jì)
- 匯編語言程序設(shè)計(jì)競賽報(bào)告
- 匯編語言程序設(shè)計(jì)習(xí)題-答案
- 4匯編語言程序設(shè)計(jì)基礎(chǔ)
- 匯編語言程序設(shè)計(jì)課后答案
- 循環(huán)結(jié)構(gòu)bios中斷程序設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論