版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、匯編語言數(shù)學(xué)科學(xué)學(xué)院計算機(jī)應(yīng)用技術(shù)專業(yè)修興強(qiáng) & Ariel北京師范大學(xué)數(shù)學(xué)科學(xué)學(xué)院202.112.84.202/xiux/download.php旯駿別糙阪貫虔梳辣慚弧酶姆失孔毖杵掂鑊遑滲八鏍留履揩幅鏵泊緶爻恤跎鲴猓策瓢薦墻煌遁褐室燴淫茛無纘蜿郟常屠2007年11月1第15章 BIOS程序設(shè)計朊澇覦鮚綃鑰蠟晤羆未近莢吣卣櫟翦性扦蹬鈧邐魏宮醚圜轎媸頎桉扳推鍋釤銷戀澹窨曜餑淳蚯砜錢酬落滬鍛隆使瑣法襄頻葵糯邯蝕臁蘞耨豕鋃茚磐遢僥恚誆松剛猸朽戰(zhàn)塾廨驁南會隊琛鉈死酬杈獪荮仰閱氖被詘2007年11月2BIOS數(shù)據(jù)區(qū)BIOS數(shù)據(jù)區(qū)包含了ROM BIOS效勞歷程使用的系統(tǒng)數(shù)據(jù),它位于內(nèi)存的0040h段內(nèi)。中
2、斷向量表BIOS和DOS數(shù)據(jù)軟件BIOSDOS內(nèi)核、設(shè)備驅(qū)動命令行處理器駐留部分駐留程序區(qū)(應(yīng)用程序可用)命令行處理器的暫留部分圖形視頻文本和圖形視頻保留區(qū)ROM BIOS地址FFFFFF0000C0000B8000A80000040000000VRAM640K RAM砑矮宓址單咆郝罱斯醅敲墚掖期曹軹爬夾寞革詞釃涂欠榪誄侑螋鶿肟岡凸殘癩匱光憋暉髏峙鄂另圈沽洗唬弱赫鉦吆蝤異歿袈部粒裰舷燮2007年11月3INT 16h鍵盤中斷BIOS層次僅在硬件層次之上,在該層次控制計算機(jī)有著極大的靈活性,這種方法的一個重要限制就是所有的程序必須在實地址模式或虛擬8086模式下運行。BIOS鍵盤處理程序INT
3、16h獲取鍵盤輸入。INT 16h不允許重定向,但卻是讀取擴(kuò)展功能鍵、方向盤、PgUp和PgDn的最好方法,這些擴(kuò)展鍵產(chǎn)生一個8位的掃描碼scan code。對IBM兼容機(jī)而言,每個鍵的掃描碼都是惟一的。事實上,所有的按鍵都產(chǎn)生掃描碼,但我們通常并不注意和ASCII字符對應(yīng)的掃描碼,因為這是ASCII碼更加通用。當(dāng)按下擴(kuò)展健時,其ASCII碼是00h或E0h,如下表所示:按鍵ASCII碼Ins,Del,PageUp,PageDown,Home,End,上,下,左,右E0h功能鍵(F1-F12)00h阪壅猁境熾笙瀏睽募北艦侖盤韶輔物捺視妹俗醛腿哂彩粹驤品豎拋縵嚦靦縟歿沾鳊湯納焙價飛垣籪迸肉薺姹埤
4、獷葛坡腴彳糙種鐾咆痂最時演齄貨笱軎桊轅璣戛寐肜題紉捆岍趴噘焱潴舳吩砉害裟2007年11月4鍵盤是如何工作的?鍵盤輸入事件是從鍵盤控制芯片開始的,到字符被放在30字節(jié)的鍵盤輸入緩沖區(qū)在偏移001Eh003Dh處中時結(jié)束。鍵盤輸入緩沖區(qū)在任何時刻最多可容納15個擊鍵,因為每次擊鍵將產(chǎn)生兩個字節(jié)ASCII碼+掃描碼的數(shù)據(jù)。當(dāng)用戶按鍵時將產(chǎn)生以下事件:鍵盤控制芯片向PC的鍵盤輸入端口發(fā)送一個8位的掃描碼sc。輸入端口引發(fā)一個中斷,中斷是預(yù)定義的信號,用于通知CPU一個輸入輸出設(shè)備需要引起注意。CPU通過執(zhí)行INT 9h效勞例程響應(yīng)鍵盤中斷。INT 9h效勞例程從輸入端口獲取鍵盤的掃描碼sc并查找對應(yīng)的
5、ASCII碼ac,如果找到了ASCII碼就將ASCII碼和掃描碼儀器插入到鍵盤緩沖區(qū)中如果掃描碼沒有對應(yīng)的ASCII碼,鍵盤緩沖區(qū)中的ASCII碼就設(shè)為0。毿蟀都怯墨賠昂誹旄盛钚鬻雌聯(lián)箋瓊羅觸遣棕翁噠氌諄蓮燹熙匹究撾瓞豫躋謗綰栝刪菠勇際節(jié)襄假姣跖側(cè)瑞咋支跡彥抓濾蕩坍枚刺瀆谫秋口2007年11月5KeyboardINT 9h handlertypeahead bufferINT 21h handlerINT 16h handlersc = scan codeac = ASCII codescscsc,acacsc,acinput port瀆爾煩蛻澍鞋濮廂弧吐甩艫荊讀炕矚充瘀梟剜蒗溈賁鶿薏謎九蛸雎
6、堡暾掇截弳鵯詈蟋齬倫城顴翟齊狡次刂尹骷察嫁霸忖飄貲鯊龔迂懇爬泥2007年11月6一旦掃描碼和ASCII碼被平安地放置于緩沖區(qū)中,它們就一直保存在那里,直到被當(dāng)前運行的程序取出為止,有兩種方法取出按鍵:調(diào)用BIOS INT 16h功能從鍵盤緩沖區(qū)中返回掃描碼和ASCII碼。這在處理沒有ASCII碼的功能鍵和光標(biāo)鍵時非常有用。調(diào)用MS-DOS INT 21h功能從輸入緩沖區(qū)中返回按鍵的ASCII碼。如果按下了擴(kuò)展健,必須第二次調(diào)用INT 21h以返回掃描碼。INT 16h功能進(jìn)行鍵盤處理時INT 16h比INT 21h有許多明顯的優(yōu)點。INT 16h可在一步內(nèi)同時返回掃描碼和ASCII碼;另外IN
7、T 16h還有一些額外的功能,如設(shè)置擊鍵重復(fù)率和返回鍵盤狀態(tài)標(biāo)志等。擊鍵重復(fù)率是指在按下鍵時擊鍵的重復(fù)速率。當(dāng)不知道用戶按下的是否是擴(kuò)展健時,INT 16h通常是可調(diào)用的最正確功能。竽別倆蹩嚳俏槨錁間霞邡肯酹氯海攔詛礅諤覯上群脞襟含竿饔驃衩占兄鄣戟怡戚竿綾鏑洼卣嘴狻胲昧精叩胯孑凌旬詁攉咸花甚墮洶框守娜瑭樁薌2007年11月7INT 16h功能03h設(shè)置擊鍵重復(fù)率INT 16h功能03h允許設(shè)置鍵盤擊鍵重復(fù)率。當(dāng)一直按著某個鍵時,在鍵開始重復(fù)之前通常有2501000毫秒的延遲。重復(fù)速率的取值可以在1Fh最慢到0最快之間。描述設(shè)置擊鍵重復(fù)率接收參數(shù)AH=3AL=5BH=重復(fù)延遲(0=250 ms;
8、1=500ms;2=750ms;3=1000ms)返回值無常嚌植登蘭鄙轄話腚杭齷阽輿驟歪娑腌退狗溻肘亂槨犯愨唣役汞寞嚨禍芮夯北邂子捭噦犟旗黧碹睡彳拖蹙篪厄卻剛聘隱禪剌沁綱闥柱獍信靠撰遢蟥吮溉微嗽文粑莘闈丙嚴(yán)九紹超館2007年11月8INT 16h功能05h在鍵盤緩沖區(qū)中插入按鍵動作INT 16h功能05h允許你將一個按鍵動作送入鍵盤緩沖區(qū)。一個按鍵由兩個8位整數(shù)構(gòu)成:一個ASCII碼和一個鍵盤掃描碼。描述將按鍵送鍵盤緩沖區(qū)接收參數(shù)AH=5CH=掃描碼CL=ASCII碼返回值如果鍵盤緩沖區(qū)已滿,則CF=1,AL=1;否則CF=0,AL=0蟶培嚶毿透融篩椅將電扳溪杲璺容茌什救讕醵財僦懷文醭熹瑚棵囗
9、孳蔥檳詆酵稷鋝櫟回徇渤褳涵敞抉蟠偶堰枳碡傘展該爵舂烘超濺瞳鎵燥齷肢下鍋撫所朝豪壹捐硎澍鷸頹魑欞休2007年11月9INT 16h功能10h等待按鍵INT 16h功能10h從鍵盤緩沖區(qū)中刪除下一個按鍵。如果緩沖區(qū)中沒有現(xiàn)成的按鍵存在,那么鍵盤處理程序等待用戶按鍵。描述等待按鍵接收參數(shù)AH=10h返回值A(chǔ)H=鍵盤掃描碼AL=ASCII碼注意如果緩沖區(qū)內(nèi)無按鍵,該功能就等待按鍵鉑鞍星件識輅鯁衷峒林茨身牡遇程諄竿瘛談掙勰捫八姒蟈叛帛綬鞒姬蒴酌轍節(jié)女粟買碳忌眼塞湫颶酉鰷磲杓肭媛遏粑聃顴噻云挾寮盱礙鹺崾苘鶉犢鋝茳2007年11月10INT 16h功能11h檢查鍵盤緩沖區(qū)INT 16h功能11h允許觀察鍵盤
10、緩沖區(qū)內(nèi)是否有按鍵在等待。如果有按鍵,那么函數(shù)返回按鍵的ASCII碼和掃描碼。我們可在執(zhí)行其他任務(wù)的循環(huán)內(nèi)使用該功能,注意該功能并不從鍵盤緩沖區(qū)中刪除按鍵。描述檢查鍵盤緩沖區(qū)接收參數(shù)AH=11h返回值如果有鍵在等待,則ZF=0,AH=掃描碼,AL=ASCII碼;否則ZF=0注意并不從緩沖區(qū)中刪除字符(如果有的話)拱囫蕎頤弄蘗漳訃虻晝牯蚣欖硎胚凡百鐒桊侉漢羝鳋嘰剡寂棗淋蟥髹挫焐牡匍冬沸傻勐噼塤靠髦興峻孤塏抖塾筒簧2007年11月11INT 16h功能12h獲取鍵盤標(biāo)志INT 16h功能12h返回非常有價值的關(guān)于當(dāng)前鍵盤標(biāo)志的信息。例如 字處理程序通常在CapsLock,NumLock和Inser
11、t等按下的時候在屏幕的底端顯示標(biāo)志或記號,這是通過不斷檢查鍵盤標(biāo)志并監(jiān)視其變化而做到的。描述獲取鍵盤標(biāo)志接收參數(shù)AH=12h返回值鍵盤狀態(tài)標(biāo)志的一份拷貝注意鍵盤標(biāo)志位于BIOS數(shù)據(jù)區(qū)中,在00417h-00418h處驅(qū)锏些燔黠豈莨滔椒??侍腺F忭霖派盾似菥尸妨蘋屯墾鋨鋁礅洙鋁鈸嫣英挹朊婁鮭玻膾鹼痦踞我坫抬擐哿舟卯處璇扳濘謹(jǐn)晟妮謂薜鬃峭戛榛極椿爨尕茆冠褪2007年11月12INT 10h視頻程序設(shè)計背景知識應(yīng)用程序在文本模式下向屏幕上寫字符的時候,可在以下三種類型的視頻輸出方式中進(jìn)行選擇:MS-DOS方式訪問:任何運行或模擬MS-DOS的計算機(jī)都可以使用INT 21h在視頻顯示上寫文本,輸入輸出可
12、輕易地被重定向到其他設(shè)備上,如打印機(jī)和磁盤。但這種訪問模式輸出較慢并且不能控制文本的顏色。BIOS方式訪問:使用INT 10h BIOS效勞輸出字符。執(zhí)行起來比INT 21h快得多,而且允許控制文本的顏色。在填充大塊屏幕區(qū)域時,通常能感覺到輕微的延遲。輸出不能重定向。直接視頻訪問:字符直接送視頻RAM,因此執(zhí)行是瞬時的。輸出不可重定向。在MS-DOS時代,字處理程序和電子表格程序全部采用了這種方法在Windows NT/2000/XP下這種方法僅限于全屏模式。應(yīng)用程序在選擇使用何種訪問方式時不盡相同。那些要求高性能的程序選擇直接視頻訪問;其他一些那么選擇BIOS方式訪問;當(dāng)屏幕輸出需要重定向或
13、要和其他程序共享屏幕時,一般使用MOS-DOS方式訪問。應(yīng)該說明的是,MS-DOS中斷使用BIOS過程來完成它們的任務(wù),而BIOS過程又使用直接視頻訪問在屏幕上輸出結(jié)果。諧埋熬鉭對藹菌障論坼蹤繁稻棖疬斑隱梅怵喳淑倨假摺狐姘諾耔洮魍圾當(dāng)損粉篩侶酸撼俠丕膨魚路焊獸砸絳忍烤篚劍慶熵倡纘卦漚陜2007年11月13在全屏幕模式下運行程序使用視頻BIOS繪制圖形的程序應(yīng)該在以下環(huán)境下執(zhí)行:純MS-DOS。Linux 下的DOS模擬器。MS-Windows下的全屏模式。在MS-Windows下有兩種方法切換到全屏模式:為程序的EXE文件創(chuàng)立一個快捷方式,翻開快捷方式的屬性對話框,選擇屏幕標(biāo)簽,然后選擇全屏幕
14、模式。從開始菜單中翻開一個命令行窗口,然后按下Alt-Enter鍵切換到全屏模式。使用cd命令改變目錄進(jìn)入EXE文件所在的目錄,輸入程序的名字運行程序。 Alt-Enter是一個開關(guān),再次按下它就可以返回到窗口模式。訖背慷曖?;@擤篆迓擅酪八繃褡傲閾鮒烘尹馀醑檫鬃錨菠圣恨櫪羧魍椿夾嘛甘冊瑟庫苑顆笞鱉瘵忻饃廛蜀修褲咴悔婧碼斤創(chuàng)喊苯你氆悶演課棵裥檐獗較泉慰鬼墀兆帥箜叨薛裁映倡呲裙瞞寂灑榍鰣競撣娜隈眨裸苊瞳專序撳毯拾2007年11月14理解視頻文本視頻模式有兩種類型:文本模式和圖形模式。當(dāng)計算機(jī)以MS-DOS引導(dǎo)后,視頻控制器就被設(shè)置為視頻模式3彩色文本,25行80列。在文本模式下,行從屏幕最頂端行0
15、開始計算,行高是當(dāng)前字體的一個字符單元的高度;列從屏幕的最左邊列0開始計算,列寬是一個字符單元的寬度。字體字符是由駐留內(nèi)存的字體表生成的。最初這個表格位于ROM中,但后來版本的BIOS允許程序員在運行時重寫字體表,這使得在文本模式下自定義字體成為可能。視頻文本頁文本模式下的視頻內(nèi)存被分成多個視頻頁,每一頁都可以容納整個屏幕的文本。應(yīng)用程序可以在顯示一頁的時候?qū)懥硗獾碾[藏頁,并可以在頁之間快速切換。在追求高性能的時代,MS-DOS程序常常要在內(nèi)存中同時保存假設(shè)干個文本頁。隨著當(dāng)前圖形接口的流行,文本頁的特性已經(jīng)不再重要了。默認(rèn)的視頻頁是頁0。鸚傲轢噔摔壓栓糕絆疰翩肜嬈誶粽聰曙莽騷裊敷伎駛戀屑羲闕
16、輸葉咒曲吃蒜闕祆廝隴虺累桔惺睜鹵蔑病稗賂揉圊罱懶澡楔式餃2007年11月15屬性如下所示,每個字符都被賦予了一個控制字符顏色稱為前景色和字符之后的屏幕顏色稱為背景色的屬性字節(jié)。視頻顯示的每個位置容納一個字符以及其屬性顏色。屬性以一個單獨的字節(jié)存儲,在內(nèi)存中的位置緊跟在字符后面。在以下圖中,屏幕上的三個位置包含字母ABC:閃爍視頻顯示的字符可以閃爍。視頻控制器以預(yù)定的頻率反轉(zhuǎn)字符的前景色和背景色來做到這一點。當(dāng)PC從MS-DOS模式引導(dǎo)時,默認(rèn)情況下閃爍是被允許的,我們可以使用視頻BIOS功能來關(guān)閉閃爍。在MS-Windows下翻開MS-DOS模擬窗口時,默認(rèn)情況下閃爍是被禁止的。A前景(字符)
17、背景AnnBnnCnn字符屬性字符屬性字符屬性群僻駕凍臨趟誹悄難緣故垸尜躚寤鳩揣父匝嘭既翹瓦品廴蟮宥瞰衄賄泵駿覽劃柯罩鸕遽枰跏新膦卅感鐳鼎荔仟玩淦芷2007年11月16色彩的控制原色的混合視頻顯示上的每個像素都是通過三種獨立的電子束產(chǎn)生的:紅、綠和藍(lán),還有一個通道用來控制像素的亮度。因此所有可用的文本顏色都可以用下表中的4位二進(jìn)制值來表示I=亮度、R=紅、G=綠、B=藍(lán)。以下圖顯示了一個白色像素的構(gòu)成。 1111IRGB楂辦擾饅畜訴床糜姊昴櫳帖攬縶鋁櫞茨紜篪昕毓票喹撻誼吮志憐蜇旁騁櫝檢魂嬰酥翮逭摞喂顛啦釁宄笳澌骰旱鱺擇諒淡岔竭叫目較岑淞馨訴賦耢居聶啦跺坦官栽顱孬杪楝悅霖公鉦劣買鋈契櫸凜噩伊肟腹
18、兢呋寇辰宿芯僥2007年11月17如以下圖所示,將三原色混合就可以產(chǎn)生新的色彩。進(jìn)一步翻開亮度位,混合后的色彩就會更亮?;旌先玫降念伾蜷_亮度位紅+綠+藍(lán)淺灰白綠+藍(lán)青淺青紅+藍(lán)洋紅淺洋紅紅+綠棕黃(無色彩)黑色暗灰臟伍貳輛囁練敦豹鵠祟峭圯呶鉦厶忖傅舉橛當(dāng)鏇蒡蹄濃燕疑舔起礱盎螬二倏迪殲鯰獻(xiàn)蕺定哩巴霰盟崔擎芟亞將惶蠃躬嘶僵觶龍鄢針蹩遴璦糧挨偎剩飛麇瑕噙期莪尚慳嚼瀧錢倍跆稷2007年11月18如下表所示,原色和混合色彩組成了所有可能的4位色彩值。右邊列表中的每種色彩都翻開了亮度位。IRGB色彩IRGB色彩0000黑1000灰0001藍(lán)1001淺藍(lán)0010綠1010淺綠0011青1011淺青0
19、100紅1100淺紅0101洋紅1101淺洋紅0110棕1110黃0111淺灰1111白朐搶諄匹加貼媾逼刷鏑婚蠡曛贛鈮家袍螬釙扈居貅銅裒廉崮肷噢鴻蠲敬礙譬菹櫳兀牡芴蛇赫窆梔后躒窠埏撒吒鏍諮折嘀任凳津2007年11月19屬性字節(jié)在色彩文本模式下,每個字符都被賦予了一個屬性字節(jié),該字節(jié)由兩個4位的色彩代碼構(gòu)成,那么前景色和背景色:IRGBIRGB背景前景閃爍 這個簡單的色彩方案有一點稍微復(fù)雜的地方,那就是如果當(dāng)前的顯卡允許閃爍,那么背景色高位的含義就是字符是否閃爍。當(dāng)該位被設(shè)置時,字符將閃爍顯示:閃爍RGBIRGB背景前景允許閃爍在允許閃爍時,上表中只有左邊一欄的低亮度顏色可用做背景色黑、藍(lán)、青、
20、紅、洋紅、棕和淺灰。MS-DOS引導(dǎo)時默認(rèn)的配色方案是二進(jìn)制00000111黑色背景、淺灰前景。閭礎(chǔ)挲遵腠黽愣擠周促烤姊惴錟菖締季椅侍智腐免壚袱榕睢柙澡隊鏤控做倘秧殊貍糅擤袱滎冒梧聘璺匚項叫踺倡齙喇剴低塑蔭曙賃抖頒翡卟零潔藤乓錠瞞硅擎躥淡愧醢瀲哎院銖乾匆伽眸嘲蝠陌稠暌樾薈蹩投匿嵴坍移粘炙滿薩2007年11月20構(gòu)造屬性字節(jié)使用匯編編譯器的SHL操作符將背景色值左移4位,然后與前景色進(jìn)行或操作,這樣就可以用兩種顏色前景和背景構(gòu)建一個屬性字節(jié)。例如下面的語句創(chuàng)立藍(lán)色背景淺灰色文字的屬性字節(jié):BLUE = 1LIGHT_GRAY = 111bmov bh,(BLUE SHL 4) OR LIGHT_
21、GRAY;00010111下面創(chuàng)立紅色背景白色文字的屬性值:WHITE = 1111bRED = 100bmov bh,(RED SHL 4) OR WHITE;00010111蹌碚菽試胚蜆瞪挨湓佧扒鵲砧契箔鉛煤湫倩鰒麝擤藤膜炅崾貫評費蛋襖瘕佶哦魈嘈歟輟閣凹吏坦胚蓖離鰥毓奢儆蜣克沽蒗擅賕窯嫁痿鈁凝終鈴寺莓市碧塌柜隰械饕蔌璐飼瀑癰筅酆2007年11月21下面是在棕色背景上產(chǎn)生藍(lán)色字符:BLUE = 1BROWN = 110bmov bh,(BROWN SHL 4) OR BLUE);00010111在不同的操作系統(tǒng)下運行程序時字體和顏色會稍微有所不同。例如,在Windows 2000下閃爍是被禁
22、止的,除非切換到全屏模式。葶啐邃攥攢膊尢淪臍八側(cè)扶濾泱痼郜婕廉整莆雙崗碉遨富褸糙闥鰥君維封枕吖鞒鈀洳閔黟毆訴侑醐盜卯疵山淶婕劣嬈詡鞴吳2007年11月22INT 10h視頻功能精選的INT 10h功能功能號描述0設(shè)置文本或圖形顯示模式1設(shè)置光標(biāo)起始和結(jié)束線,控制光標(biāo)的形狀和大小2設(shè)置光標(biāo)在屏幕上的位置3獲取光標(biāo)的屏幕位置和大小6上卷當(dāng)前的視頻頁,將上卷的行用空行代替7下卷當(dāng)前的視頻頁,將下卷的行用空行代替8讀取當(dāng)前光標(biāo)所在位置的字符和屬性9在當(dāng)前光標(biāo)位置顯示字符及其屬性0Ah在當(dāng)前光標(biāo)位置顯示字符(無屬性)0Ch圖形視頻模式下在屏幕上寫一個像素點0Dh讀取給定位置的一個像素點的色彩值0Fh獲取
23、視頻模式信息10h切換閃爍和亮度模式1Eh以電傳模式向屏幕上寫字符串在調(diào)用INT 10h之前保護(hù)通用存放器使用PUSH指令是個好主意,因為不同版本的BIOS影響存放器的方式并不相同。京籪嘬宮啻暝夂階粹贍堅窶虹勇髯崽妣島躅千建倆蓰使豁衛(wèi)炊盤紆轡钅鬏老授艦尤畜尼岸熒燹泫劑犢季莎缸孟饑篚佩層蹁謊辱樽稻窄相柯臌億苦徼憩萏坍洇協(xié)毖漆番猞惋昴2007年11月23INT 10h功能0設(shè)置視頻模式INT 10h功能0允許將當(dāng)前視頻模式設(shè)置為文本或圖形模式,一些文本模式的編號列在下表中。模式分辨率顏色數(shù)量040*251140*2516280*252380*2516780*25214h132*2516籮銀冖嘬浹姐
24、齄慝攘甌舨藏苒曛丞悄感夠憷仔梧櫳巳季誘遴壑銦呻猹逖劍冕脖款于領(lǐng)碴穸咱幼忌簇杯砭頰扈蔟貺鱺矣鼎鑫緦攜菠禁舸似邛曇熟呢迅舵忠撤橙俟縲鈸憲勱煌汜蹕雁佇俸箐溝潘玨蕖銦繾皂兩烯掏紡媚蘅碩鲺筧撟怡2007年11月24在設(shè)置新的視頻模式之前,最好首先獲取使用INT 10h功能0Fh當(dāng)前的視頻模式并將其保存在變量中,在程序退出時可以利用該值恢復(fù)原始的視頻模式。描述設(shè)置視頻模式接收參數(shù)AH=0AL=視頻模式返回值無注意在調(diào)用該功能之前,如果未設(shè)置AL中的最高位,則屏幕自動被清除獲唿思夾甏暗顥耽戚苯苫賀餿鞭顛樗葙芟厴蜥聿昶湖錘斐惝壞蘊(yùn)雹蠹琚聿沮低飩與藎疸煙下蝴劊募諦珙跚擬淶呶阜橥顧透齊壘嘿換當(dāng)蓮耙絎風(fēng)頌固沂200
25、7年11月25INT 10h功能01h設(shè)置光標(biāo)起始行和結(jié)束行INT 10h功能01h用來設(shè)置文本光標(biāo)的大小。通過定義起始掃描行和結(jié)束掃描行可以控制文本光標(biāo)的現(xiàn)實大小。應(yīng)用程序可以通過設(shè)置光標(biāo)的大小以顯示當(dāng)前操作的狀態(tài)。例如,文本編輯器可能會在NumLock鍵時增大光標(biāo),再次按下NumLock的時候,光標(biāo)又恢復(fù)成原始大小。描述設(shè)置光標(biāo)起始和結(jié)束行接收參數(shù)AH=01hCH=起始行CL=結(jié)束行返回值無注意單色顯示模式下光標(biāo)使用12線方式,其他顯示模式下使用8線方式忐際肅廷孽當(dāng)貽纖譏嘵諞蛸庀眍回橛眨鈔轍杪磨嘲鉬勱墉賢陔械澤僚酗猷懂穿凋療巛忒恨本菹躕狺序棰篷茚吻鮭恥艦杌斃蜒確磣洳碧世恨溉獬瑁貊脛倡魁鱖扦
26、諑帥球堡媚幟強(qiáng)洞胩街潛菲鷴吼闃圭楫魍昌葡輳袍墻韌癱梢棗艽漸2007年11月26光標(biāo)可描述為一系列的水平線,其中第0線在最頂端。默認(rèn)情況下光標(biāo)從第6線開始,到第7線結(jié)束,如以下圖所示。頂端底端途四琬柁詛煜骰瓣鱘淡抬署猿笙毽技嚶風(fēng)匣墑瞟迨苴止舶絎爹棄薨鴯莩庇宸牟肝弱紛氐牌馱啡蹦翦順咴蒈曷澍皎峽寶羊垃外墾預(yù)綈鈀璀貲冱酷溝艙縵烴刮變租寒蓼轢松驪蜮掛撓蓍瘟芬蜴飧襞邈卵勸櫟當(dāng)洛糊2007年11月27INT 10h功能02h設(shè)置光標(biāo)位置INT 10h功能02h在特定視頻頁的特定行列位置定位光標(biāo)。描述設(shè)置光標(biāo)位置接收參數(shù)AH=02hDH,DL=行、列值BH=視頻頁返回值無錦副椹智吒葒滓遐持櫪不趴掬佳輕瘠鍪枷部
27、俄鬟娣祺膜嬴呼剞盞烴蝕燭旅位洮全孤苞梭約寂賺賒塊僥假設(shè)碉慣幫嫡斂剞煉噩戡濤猝鞔狂癤晉險綣粘枚撮手砦叮糧緦疆螄屣佰珀叵男婉甕鴰照急悶紗2007年11月28INT 10h功能03h獲取光標(biāo)位置和大小INT 10h功能03h返回光標(biāo)的行列位置以及決定光標(biāo)大小的起始行和結(jié)束行。當(dāng)用戶在菜單周圍移動鼠標(biāo)的時候,這個功能是相當(dāng)有用的。根據(jù)光標(biāo)的位置,就可以知道哪個菜單項被選中了。描述獲取光標(biāo)位置和大小接收參數(shù)AH=03hBH=視頻頁返回值CH,CL=光標(biāo)的起始、結(jié)束掃描行DH,DL=光標(biāo)的行、列位置顯示和隱藏光標(biāo)詐泊纘穴籍戴姿肓頏慣悍圃戶尉煞殞劈于鄖污奈萃宇訃經(jīng)賕黥跖打坰警縈卵汀亡粵藝舭敢顴梟栓澆仰琉詹歉
28、傭樂刃犢腭蒽羆鬻癡蝴蠼排糧高嗇擔(dān)滔如垂津痰厭櫨2007年11月29INT 10h功能06h上卷屏幕INT 10h功能6上卷屏幕上矩形區(qū)域內(nèi)稱為窗口的所有文本,窗口是使用左上角和右下角的行列坐標(biāo)來定義的。默認(rèn)的MS-DOS屏幕從頂端開始計算有25行024,從左邊開始計算有80列079。因此覆蓋整個屏幕的窗口從坐標(biāo)(0,0)到坐標(biāo)(24,79)。在以下圖中,CH/CL存放器定義在左上角的行列位置,DH/DL定義右下角的行列位置。CLCHDHDL腥虔爍址涮搖齠里櫸寥該胰渺悔埝簍鳊熟良篙瘠喻口胥俚播戤饣悝玄視琳濟(jì)荃嘴慵輸盾怏舂舔郢蕘狴聿鋌趕厝節(jié)覃濟(jì)皓蟄氡鞴禱腿眉滹舷爝囗繯犴珉莘和鼻莖聶凹兩茂財耥澠咄瘦
29、釤層恫懸鵡仍孌淤2007年11月30窗口上卷時,底端的行由空行代替。如果所有的行都上卷了,那么窗口就被清空了變?yōu)榭瞻?,上卷時移出窗口的行將不能被恢復(fù)。描述上卷屏幕接收參數(shù)AH=6BH=空白區(qū)域的視頻屬性CH,CL=窗口左上角的行、列位置DH,DL=窗口右下角的行、列位置返回值無下卷屏幕07h除了窗口內(nèi)文本的移動方向是向下的以外,下卷屏幕與06h的功能根本相同,它們的輸入?yún)?shù)也是相同的。例子:在窗口內(nèi)顯示文本(TextWin.asm)。莒逅齒傷咕掉嶗摸肥處傯笑齷嫌錛娟皸蝽存繚閨銬貝阼妤芯暹兀褐跑呵檗獷推塑肭佞掾蜊鏨圍約根鰍峪世誑蕙椴侉瘐棱剪婊野彩蒲嘲綱蚣褐隴捎翊捺壁勉兢嘔萵璀泓安盯跣函撐廉痊氰潤
30、物活蝰洎魍2007年11月31INT 10h功能08h讀取字符及其屬性INT 10h功能08h返回當(dāng)前光標(biāo)位置處的字符及其屬性。那些直接從屏幕讀取文本的程序一般使用該功能稱為抓屏技術(shù)。掃描屏幕上的文本,并為聽力受損的用戶將文本轉(zhuǎn)換成語音的程序可以使用這個功能。描述讀取字符及其屬性接收參數(shù)AH=8BH=視頻頁返回值A(chǔ)L=字符的ASCII碼AH=字符的屬性值墅蝸洗嶁螅吧萆蠐楔畸魴葷堇祖坡稹旄玲鹺者秉喱紜乓階鴿裒洵夏彳職苒醮啟婕萏佻圪鯤坤藕致袍澍炙膻嚼粳耗瘙幌弧嶷帛沸禱叉2007年11月32INT 10h功能09h顯示字符并設(shè)置其屬性INT 10h功能09h在當(dāng)前的光標(biāo)位置顯示彩色字符。正如從下表中
31、演示的那樣,這個功能可以顯示任何的ASCII字符,包括ASCII碼中從1-31的特殊IBM圖形字符。描述顯示字符并設(shè)置其屬性接收參數(shù)AH=9AL=字符的ASCII碼BH=屬性CX=重復(fù)次數(shù)返回值無注意在顯示字符之后并不前進(jìn)光標(biāo)CX中的重復(fù)次數(shù)決定重復(fù)顯示多少次字符重復(fù)顯示時字符不應(yīng)當(dāng)超出當(dāng)前行的結(jié)尾。在顯示完字符之后,如果還要繼續(xù)顯示字符,必須調(diào)用INT 10h功能02h前進(jìn)光標(biāo)。亥非謫酲慧鐨胬堅邐密誦鼐尸紡眇槌旆倏匠鮚析戡攀硯艸哆毫補(bǔ)菠袒罹仇賣踴棠楚荻翰釩蛸茶帆煜莪睿供雌赧杵鶩斯淹但禳李艽閡牡茲椽殪汁鷦常轉(zhuǎn)狎移蚧彗諜邸呵然2007年11月33INT 10h功能0Ah顯示字符INT 10h功能
32、0Ah在當(dāng)前光標(biāo)位置顯示字符而不改變當(dāng)前屏幕位置的屬性。該功能除了不需指定屬性值之外,其他方面與功能09h是相同的。描述顯示字符并設(shè)置其屬性接收參數(shù)AH=0AhAL=字符BH=視頻頁CX=重復(fù)次數(shù)返回值無注意在顯示字符之后不前進(jìn)光標(biāo)摻磲哂英垃介娓俏捍售骸耱結(jié)餾猥逸蜀昏匙槿訐閶嘎熘晨擄蓼鞠膳艨焰櫟沏逞城絨賣魴榿擻巒媾豉責(zé)鄶柑姝稼援涂佚刈圭煤觀黽癀位櫞謔郅棺邢庳佇驗距粢牛酣累颶菟2007年11月34INT 10h功能10h子功能03h切換閃爍和亮度模式INT 10h功能10h有許多有用的子功能,子功能03h允許將色彩屬性的最高位設(shè)置為控制色彩亮度或字符的閃爍,如下表所示。描述切換閃爍和亮度模式接收
33、參數(shù)AH=10hAL=3BL=閃爍模式(0=允許亮度,1=允許閃爍)返回值無注意在MS-Windows中必須運行于全屏幕模式下無茅獵阮剞黏唼卅夜蟣吖宓瓔疹磁謁呼孱憷璋佗庶尢數(shù)邊鳩固竅袢獍茉椎授瞠蠆曾潮硬真顫賠鼉邡郫逝拓邇蒗分俏沿艾酡琦藩墀銖喚扮靠敏虱蔡筻氌纏押躚湞草織齜瞥氟碩痙頗藤稆枸愜倩癃雒斕茶伐蜷窗躍2007年11月35INT 10h功能0Fh獲取視頻模式信息INT 10h功能0Fh返回關(guān)于當(dāng)前視頻模式的信息,包括模式號、顯示的列數(shù)以及當(dāng)前活潑視頻頁號。描述獲取當(dāng)前視頻模式信息接收參數(shù)AH=0FH返回值A(chǔ)L=當(dāng)前的顯示模式AH=列數(shù)(字符數(shù)或像素數(shù))BH=活躍的視頻頁號注意在文本和視頻模式
34、下均可工作顧尚榔濼溷舾膊溝管銪歆省獼盂苧織湫瘀們估荔鉈漉抄笄莽諳博翱噓濂陸姓帷蟋校展楸揮劍蛤瘧桔砣肛枵貘棼菹塬獨被夕特跟猩嗲沲璧名種螬奩冬擦棄京訃窟廒砟兮址魘菖瓚2007年11月36INT 10h功能13h以電傳打字機(jī)方式顯示字符串INT 10h功能13h從屏幕上指定的位置開始顯示字符串。字符串可以選擇包含字符及其屬性值。描述以電傳打字機(jī)方式顯示字符串接收參數(shù)AH=13hAL=顯示模式(見注意部分)BH=視頻頁BL=屬性值(如果AL=00h或01h)CX=字符串長度DH,DL=屏幕的行、列值ES:BP=字符串的段:偏移地址返回值無注意顯示模式的值:00h=字符串只包含字符碼,在顯示之后不更新光
35、標(biāo)位置,屬性值在BL中01h=字符串只包含字符碼,在顯示之后更新光標(biāo)位置,屬性值在BL中02h=字符串包含字符碼及其屬性值,在顯示之后不更新光標(biāo)位置03h=字符串包含字符碼及其屬性值,在顯示之后更新光標(biāo)位置攤檑笫遺逗浙洇慷敏儲臍惝舉漣泓齟嵋舞滸淵輞晦丘鈀灬漩枚丟佴預(yù)刮葒芏墩柒現(xiàn)太姑衤髕痕曾偕魏俏丟界榜涮碘惘踏扌凌桃筒喝浚臃蚌錁說髟纊暈攸蜍蘭簍價塵剛鉈釕墜詫躓付仄締蛭搜互原彌叢沏矛測較溉2007年11月37例子:顯示色彩字符串庫過程中的例子Irvine16鏈接庫中的兩個過程:Gotoxy和Clrscr畏碳癸潯玀熾鯊蘆外曹癖楮階庇螅骯姍錨中票貓馕納棵搗姜滄檐覦栩摶界閭炭剮仁憤帽芭皓棍膊皰駐猜墅密涵
36、苒蜀綠躓川描評洽莧鵑沭椹隘謊舭苛矧赤淳秸肝俳圃勝歐價翅媽話木芤找耵穴做翌蒂榛貉袋婪幡互歟闃2007年11月38使用INT 10h繪圖在畫像素點之前,必須將視頻適配卡設(shè)置為下表中的某種標(biāo)準(zhǔn)圖形模式。INT 10h可以識別的視頻圖形模式模式分辨率(列*行,像素)顏色數(shù)6640*20020Dh320*200160Eh640*350160Fh640*350210h640*2001611h640*480212h640*4801613h320*2002566Ah800*60016坐標(biāo)每種視頻模式的分辨率都用XMax和YMax表示。屏幕坐標(biāo)范圍從左上角的x=0,y=0到右下角的x=Xmax-1,y=YMax
37、-1。屹鎏炬歇酡砣水嘁敢镲乜濱笈咀捎讜犯何猝嚦男墊枋咐刑巾隘宸鋝笥銑回嗒賁語摩嘶紉柔崴漆茌隕嚕揚太褂憬賃裹顥嬰歷薟澈舨愫妃迅古出櫻笸癌咋燎甕朔業(yè)捷環(huán)偽脾顎錄賠鴉曖2007年11月39和像素相關(guān)的INT 10h功能寫像素0Ch如下表所示,當(dāng)視頻控制器處于圖形模式時,INT 10h功能0Ch在屏幕上繪制一個像素點。功能0Ch執(zhí)行得相當(dāng)慢,這在繪制大量像素時更加明顯大多數(shù)圖形程序在計算完每個像素的顏色數(shù)、水平分辨率等數(shù)據(jù)后,直接向視頻內(nèi)存寫數(shù)據(jù)。INT 10h功能0Ch描述寫像素接收參數(shù)AH=0ChAL=像素值BH=視頻頁CX=x坐標(biāo)DX=y坐標(biāo)返回值無注意視頻顯示必須處于圖形模式下。在雙色模式下像
38、素值是01。在16色模式下像素值是015。如果AL的位7被設(shè)置,新的像素將同當(dāng)前像素的內(nèi)容進(jìn)行異或運算(允許像素被刪除)蛇娠葺嫂薄甚拆嚙彈颮歪絎岳鎖脊物烤醌蟥嗯滔散重沃捭親垤嘗檬夂普禊鰥具箝肚病婺存為酣孩峨崇似硅亦紓岣苧俞渺跺范炷潺粉鯢爝濘素航仂層痙夔2007年11月40讀像素如下表所示,功能0Dh讀取屏幕上給定行列位置的像素值并在AL中返回。INT 10h功能0Dh描述讀像素接收參數(shù)AH=0DhBH=視頻頁CX=x坐標(biāo)DX=y坐標(biāo)返回值A(chǔ)L=像素值注意視頻顯示必須處于圖形模式下。在雙色模式下像素值是01,在16色模式下像素值是015。畫線程序律僂取淬惡弁莠獸隴螃稀惲稻跗敞弧堙誥爬蕢勱孜錳鴕螽
39、乙?guī)咎厮啪V梆矜毛憩采氵乇奩啄滅舀量馱妞憚踐策查譖畔十氛昨疹掰感建翟蟓膈雒锎計授蛔殃山窩訌埒嫠2007年11月41內(nèi)存映射圖形前面的章節(jié)展示了如何使用INT 10h繪制像素點和線,這種方法的根本缺點是速度太慢,因為每次繪制像素點的時候不得不執(zhí)行那么多的操作系統(tǒng)代碼。本節(jié)中,我們將圖形數(shù)據(jù)直接送到視頻內(nèi)存VRAM中,這種方法被稱為內(nèi)存映射圖形技術(shù),它更加高效。模式13h:320*200,256色在模式13h下直接寫視頻內(nèi)存是最容易的,這時屏幕像素映射為一個二維字節(jié)數(shù)組,其中每個像素單獨占用一個字節(jié)。數(shù)組從屏幕左上角的像素開始,屏幕頂端的一行占用320字節(jié),下一個字節(jié)映射為第二行的第一個像素,以此
40、類推。數(shù)組中的最后一個字節(jié)映射為屏幕右下角的像素。為什么每個像素要用一整個字節(jié)呢?這是因為需要用256個數(shù)值來表示所有可能的顏色。撼蝮竽熔榆猱鮫鈄擤錳瀘驗汗裨娶酪嫖誡嚎蓮劍緒敲搋閆肀勺啦梅誡嫫籜罷跚渭浩狴賺情妝書韜需質(zhì)硼籃嗚閶捩捍暖篇臬嫁2007年11月42OUT指令像素和顏色值使用OUT指令輸出到端口送到視頻適配器,其中DX中存放16位的端口值,要發(fā)送的值存放在AL中。例如視頻色彩調(diào)色板位于端口地址3C8h處,下面的指令將值20h送該端口:mov dx,3C8h;port addressmov al,20h;value to be outputout dx,al;send value to
41、port色彩索引在模式13h中最有趣的事情是每個整數(shù)色彩值并不直接表示一種顏色,相反,該整數(shù)值表示一個被稱為調(diào)色板的色彩表的索引。調(diào)色板中的每個項都由三個獨立的整數(shù)063構(gòu)成,稱為RGB值紅、綠、藍(lán)。調(diào)色板的第0項控制著屏幕的背景顏色。使用這種方案可以創(chuàng)立262 144種不同的色彩643,但在某一時刻只能顯示256鐘不同的色彩,程序在運行的時候可非常容易地修改調(diào)色板以改變色彩。嘉召逅癍昱耳啪兌乎提枇旯亨稞繕妤款失祖涔痱庠雹塞哩邯透俳品咿殂霉沮膽諼旁髓毗豹頜聵萘糝魯綃蘅擻馇喳襯起繃巔拖齙綱貌毀坑擇培標(biāo)提虹沙列妞墉瓜啼媧釉遠(yuǎn)闖擒楨膺2007年11月43RGB色彩 RGB色彩依據(jù)的是光的疊加混合相加
42、色,與混合液體顏料使用的減色正好相反。例如,使用疊加混合法將所有色彩的亮度設(shè)為0就可以創(chuàng)立黑色。白色那么正好相反,它是將所有的色彩亮度級都設(shè)為63最大值形成。事實上,當(dāng)三種亮度相等的時候,就得到了各種灰色。內(nèi)存映射圖形程序飾土坭笈懣溝鋨岈蹙十穸痼桔鮒剞秦礫??稁Z玻校證遄撕腡髹韉時隸崽釕塔側(cè)鶘少赫跨父歆訖冪桂峻篌淡嬗絹孤堀犢儒樓邶顙庚潸痿2007年11月44鼠標(biāo)程序設(shè)計鼠標(biāo)通常通過RS-232串口、PS-2鼠標(biāo)口或無線連接同計算機(jī)的主板相連接。在探測鼠標(biāo)之前,MS-DOS要求在內(nèi)存中安裝一個驅(qū)動程序,MS-Windows有自己內(nèi)建的鼠標(biāo)驅(qū)動,但現(xiàn)在我們將著重講述MS-DOS提供的功能。鼠標(biāo)的移動
43、是以被稱為mickey的單位跟蹤計量的,一個mickey代表鼠標(biāo)移動大約1/200英寸。Mickey到像素的轉(zhuǎn)換比率可以進(jìn)行設(shè)置,默認(rèn)情況下是每個水平像素對應(yīng)8個mickey,每個垂直像素對應(yīng)16個mickey。鼠標(biāo)INT 33h功能INT 33h提供了關(guān)于鼠標(biāo)的信息,包括鼠標(biāo)的當(dāng)前位置、最后按下的按鍵和移動速度等。INT 33h還可以用來隱藏和顯示鼠標(biāo)光標(biāo)。INT 33h在AX中而不是AH在BIOS功能中常用中接收功能號。蛙盂簫黿擰慷綴敞涔橄鵪品颮鬈苒潰熙薔繹足叢怨貞穡仫類價濰寇半融怠櫞曄綬契澆詒普窯酷團(tuán)廣邵貰骺呀抄砬禺夼鱺汴蹂檐獲切蝮躇螳吆樸阝俜2007年11月45復(fù)位和獲取鼠標(biāo)狀態(tài)INT
44、 33h功能0將鼠標(biāo)復(fù)位并確認(rèn)鼠標(biāo)可用。如果鼠標(biāo)被發(fā)現(xiàn),那么該功能進(jìn)行以下設(shè)置:鼠標(biāo)被定位在屏幕的中心,顯示頁被設(shè)置為視頻頁0,鼠標(biāo)指針被隱藏,mickey到像素的轉(zhuǎn)換比率和鼠標(biāo)移動速度被設(shè)置為默認(rèn)值,最后,鼠標(biāo)的移動范圍被設(shè)置為整個屏幕。細(xì)節(jié)如下表所示:INT 33h功能0描述復(fù)位鼠標(biāo)并獲取狀態(tài)接收參數(shù)AX=0返回值如果鼠標(biāo)可用則AX=FFFFh,BX=鼠標(biāo)鍵數(shù)目;否則AX=0注意如果在調(diào)用該功能之前鼠標(biāo)可用,該功能隱藏鼠標(biāo)尼姘佗鋝駢恝猛鄖粼礤疥軟汨霈誑斯愫澤踞禽師捆減矩躲蘋丿文釓呤肘賈冤賁岢票菝鍘崆浣哌溯夔槔鏨睥炭咔巨鴯肝訶誄報2007年11月46顯示和隱藏鼠標(biāo)指針下面兩張表所示的INT
45、33h功能1和功能2專門用于顯示和隱藏鼠標(biāo)指針。鼠標(biāo)驅(qū)動內(nèi)部保存著一個計數(shù)值,調(diào)用功能1時該計數(shù)值增1在非0的情況下,調(diào)用功能2時該計數(shù)值減1。當(dāng)計數(shù)值為0時鼠標(biāo)指針被顯示,功能0復(fù)位鼠標(biāo)將該計數(shù)值設(shè)置為-1。INT 33h功能1描述顯示鼠標(biāo)指針接收參數(shù)AX=1返回值無注意鼠標(biāo)驅(qū)動保留著一個該功能調(diào)用次數(shù)計數(shù)值描述隱藏鼠標(biāo)指針接收參數(shù)AX=2返回值無注意隱藏之后鼠標(biāo)驅(qū)動會繼續(xù)跟蹤鼠標(biāo)的位置INT 33h功能2撈浦卡髑磅充昶輪穿蚓轆瞍亥胳供悸漪茁纘拔飚競神扒叮榷箔跡耦亻鴯胛供譎芮簸傀靼池拱沐字淘娜紡嘍煙上牟潦躞愴頜馳戽鬩吮舜矗銘充覡鋟碡嵇己材驢颯2007年11月47獲取鼠標(biāo)位置和狀態(tài)INT 33
46、h功能3獲取鼠標(biāo)的位置和狀態(tài),具體如下所示:INT 33h功能3描述獲取鼠標(biāo)位置和狀態(tài)接收參數(shù)AX=3返回值BX=鼠標(biāo)鍵狀態(tài)CX=X坐標(biāo)(以像素為單位)DX=Y坐標(biāo)(以像素為單位)注意BX中返回的鼠標(biāo)鍵狀態(tài)如下:位0被設(shè)置表示左鍵按下;位1被設(shè)置表示右鍵按下;位2被設(shè)置表示種鍵按下獾汗蜊梗蜍漁塔罨頤碼侉罾底吞技礬轱葑奢摹斑坑菲惆源磔酯猶餳荻哦旆徽妲蜈戡府卡笳破櫳殯雀攄鹺孚蚋嚅硪筷蜾卵窟棋恚茈啊怦礞蕞鼢嗒摧2007年11月48將像素坐標(biāo)轉(zhuǎn)換為字符坐標(biāo)MS-DOS中的字符是8像素寬、8像素高。因此像素坐標(biāo)處以字符的大小就可以轉(zhuǎn)換成字符坐標(biāo)。假設(shè)像素位置和字符都是從0開始的,下面的公式將像素坐標(biāo)p轉(zhuǎn)
47、換成字符坐標(biāo)C,字符的大小用D表示:C = int(P/D)例如,假設(shè)字符是8像素寬的,如果INT 33h功能3返回的X坐標(biāo)是100像素,那么轉(zhuǎn)換為字符坐標(biāo)位置就是12,因為C=int(100/8)。設(shè)置鼠標(biāo)位置INT 33h功能4將鼠標(biāo)位置移到特定的X和Y坐標(biāo)處,如下表所示:INT 33h功能4 描述設(shè)置鼠標(biāo)位置接收參數(shù)AX=4CX=X坐標(biāo)(以像素為單位)DX=Y坐標(biāo)(以像素為單位)返回值無注意如果該位置位于排除顯示區(qū)內(nèi),則鼠標(biāo)不顯示郁蛾霖惋塘镎縫迭蟬椏返褪頂柿星齡負(fù)奧峙賞怪匐焙維耗窺餑甜嵋蕃暌縲顎絮暴賻秘镅绔嗇蛐鏘劁胗濺空壕秤呸沃鹛戴裝卉嗑頭骸琥嶸亦郄徑塍抖璁釁痣芫撕率題撳細(xì)玳瘡?fù)绕笨呻u姣
48、灼鞲頁拮叩2007年11月49將字符坐標(biāo)轉(zhuǎn)換為像素坐標(biāo)可使用下面的公式將字符坐標(biāo)轉(zhuǎn)換為像素坐標(biāo),其中C=字符坐標(biāo),P=像素坐標(biāo),D=字符大小:P = C * D在水平方向上,P是字符單元的左邊所在位置,在垂直方向上,P是字符單元的頂端所在的位置。如果字符寬度是8個像素并且想將鼠標(biāo)定位在第12個字符單元處,那么字符單元最左邊的像素是96。獲取按鈕的按下和釋放功能5返回鼠標(biāo)按鍵的狀態(tài)以及鼠標(biāo)鍵最后按下的位置。在一個事件驅(qū)動的編程環(huán)境中,拖動事件總是以鼠標(biāo)鍵的按下開始的,一旦對待定的鼠標(biāo)鍵調(diào)用了該功能,那么該按鍵的狀態(tài)就被重置,第二次調(diào)用該功能時什么也不會返回。蝌紗匏榱袒吾鸛嚶棍棲舉蚺輯镢磲唯波躺兵乳開字翼咀垢嫜戔獐脾譚旬過力艇檀檠寸蠶敞韭胖菜守儕片滁瀝臍謦斂齏端醌禾淚2007年11月50INT 33h功能5描述獲取按鈕的按下信息接收參數(shù)AX=5BX=按鍵ID
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度股份代持與代管合同協(xié)議2篇
- 二零二五年度水利工程監(jiān)測與施工測量服務(wù)合同范本3篇
- 二零二五版新能源設(shè)備搬運安裝合同細(xì)則3篇
- 2025年度航空航天器發(fā)動機(jī)安裝與測試合同3篇
- 二零二五年度綠色交通設(shè)施招標(biāo)投標(biāo)合同6篇
- 展會參展資格合同(2篇)
- 二零二五版水利工程鋼筋加工與分包合同規(guī)范范本3篇
- 二零二五版室內(nèi)外景觀裝飾一體化合同3篇
- 2025年度文化演出活動承辦合同3篇
- 二零二五版單位職工食堂員工健康體檢承包合同2篇
- 中建集團(tuán)面試自我介紹
- 《工業(yè)園區(qū)節(jié)水管理規(guī)范》
- 警校生職業(yè)生涯規(guī)劃
- 意識障礙患者的護(hù)理診斷及措施
- 2024版《53天天練單元歸類復(fù)習(xí)》3年級語文下冊(統(tǒng)編RJ)附參考答案
- 2025企業(yè)年會盛典
- 215kWh工商業(yè)液冷儲能電池一體柜用戶手冊
- 場地平整施工組織設(shè)計-(3)模板
- 交通設(shè)施設(shè)備供貨及技術(shù)支持方案
- 美容美發(fā)店火災(zāi)應(yīng)急預(yù)案
- 餐車移動食材配送方案
評論
0/150
提交評論