匯編語言程序設計課件_第1頁
匯編語言程序設計課件_第2頁
匯編語言程序設計課件_第3頁
匯編語言程序設計課件_第4頁
匯編語言程序設計課件_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章匯編語言程序設計3.1概述-計算機語言的層次結(jié)構3.2匯編語言源程序的格式3.3偽操作命令3.4DOS和BIOS調(diào)用3.5匯編語言程序設計舉例3.1概述-計算機語言的層次結(jié)構計算機語言分為三類:機器語言,匯編語言和高級語言.(1)機器語言機器語言是用二進制代碼表示的計算機能直接識別和執(zhí)行的一種機器指令的集合.優(yōu)點:執(zhí)行速度快,占用內(nèi)存少缺點:不直觀,不易理解和記憶.(2)匯編語言匯編語言是一種用助記符表示的仍然面向機器的計算機語言.為了克服機器語言難讀、難編、難記和易出錯的缺點,人們就用與代碼指令實際含義相近的英文縮寫詞、字母和數(shù)字等符號來取代指令代碼(如用ADD表示運算符號“+”的機器代碼),于是就產(chǎn)生了匯編語言.優(yōu)點:與機器語言相比,編寫、閱讀和修改都比較方便;占用空間少,執(zhí)行速度快.缺點:面向機器的語言,通用性差.為什么要用匯編語言編寫程序高級語言“易學易用”,這是因為高級語言的語句是面向數(shù)學語言和自然語言的,因此容易接受、掌握.相對來說匯編語言編制程序比高級語言要困難些.既然如此,為什么還要學習和使用匯編語言呢?主要有以下幾點:⑴程序設計人員可以充分利用機器硬件的全部功能,發(fā)揮機器的長處.⑵現(xiàn)在的微機系統(tǒng)中,底層的一些功能仍然靠匯編語言程序來實現(xiàn).例如機器的自檢、系統(tǒng)初始化、實際的輸入輸出操作,至今仍然是用匯編語言編制的程序來完成.⑶匯編語言程序的效率通常高于高級語言程序.所以在節(jié)省內(nèi)存空間和提高程序運行速度的重要場合,如實時控制,常常使用匯編語言來編制的.鑒于以上理由,現(xiàn)在許多高級語言都設置有與匯編語言程序接口的功能,以便于提高高級語言程序的效率.3.2.1程序結(jié)構-分段結(jié)構例3.1將五個字節(jié)的16進制數(shù)相加.被加數(shù)存放在數(shù)據(jù)段以DATA1為首地址的內(nèi)存空間內(nèi),數(shù)據(jù):0F8H,60H,0ACH,74H,3BH.加數(shù)存放在數(shù)據(jù)段以DATA2為首地址的內(nèi)存空間內(nèi),數(shù)據(jù)為:0C1H,36H,9EH,0D5H,20H.;實現(xiàn)將兩個五字節(jié)的16進制數(shù)相加DATASEGMENT;定義數(shù)據(jù)段DATA1DB0F8H,60H,0ACH,74H,3BH;被加數(shù)DATA2DB0C1H,36H,9EH,0D5H,20H;加數(shù)DATAENDS ;數(shù)據(jù)段結(jié)束CODESEGMENT;定義代碼段ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX;初始化DSMOVCX,5;循環(huán)次數(shù)送CXMOVSI,0;置SI初值為零CLC;清CF標志LOOPER:MOVAL,DATA2[SI];取一個字節(jié)加數(shù)ADCDATA1[SI],AL;與被加數(shù)相加INCSI;SI加1DECCX;CX減1JNZLOOPER;若不等于零,轉(zhuǎn)LOOPER

MOVAH,4CHINT21H;返回DOSCODEENDS;代碼段結(jié)束ENDSTART;源程序結(jié)束3.2.1程序結(jié)構-分段結(jié)構;實現(xiàn)將兩個五字節(jié)的16進制數(shù)相加DATASEGMENT;定義數(shù)據(jù)段DATA1DB0F8H,60H,0ACH,74H,3BH;被加數(shù)DATA2DB0C1H,36H,9EH,0D5H,20H;加數(shù)DATAENDS ;數(shù)據(jù)段結(jié)束CODESEGMENT;定義代碼段ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX;初始化DSMOVCX,5;循環(huán)次數(shù)送CXMOVSI,0;置SI初值為零CLC;清CF標志LOOPER:MOVAL,DATA2[SI];取一個字節(jié)加數(shù)ADCDATA1[SI],AL;與被加數(shù)相加INCSI;SI加1DECCX;CX減1JNZLOOPER;若不等于零,轉(zhuǎn)LOOPER

MOVAH,4CHINT21H;返回DOSCODEENDS;代碼段結(jié)束ENDSTART;源程序結(jié)束程序由數(shù)條語句構成,每語句占一行.指令性語句(指令語句)指示性語句(偽指令語句)分段結(jié)構程序按段編寫,與8088內(nèi)存分段編址相對應.每段由偽操作SEGMENT開始、由ENDS結(jié)束.程序可由多個段構成,至少有一個代碼段程序最后為END結(jié)束語句,后跟一啟動地址.;實現(xiàn)將兩個五字節(jié)的16進制數(shù)相加DATASEGMENT;定義數(shù)據(jù)段DATA1DB0F8H,60H,0ACH,74H,3BH;被加數(shù)DATA2DB0C1H,36H,9EH,0D5H,20H;加數(shù)DATAENDS ;數(shù)據(jù)段結(jié)束CODESEGMENT;定義代碼段ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX;初始化DSMOVCX,5;循環(huán)次數(shù)送CXMOVSI,0;置SI初值為零CLC;清CF標志LOOPER:MOVAL,DATA2[SI];取一個字節(jié)加數(shù)ADCDATA1[SI],AL;與被加數(shù)相加INCSI;SI加1DECCX;CX減1JNZLOOPER;若不等于零,轉(zhuǎn)LOOPER

MOVAH,4CHINT21H;返回DOSCODEENDS;代碼段結(jié)束ENDSTART;源程序結(jié)束(1)一個程序經(jīng)匯編,連接和裝入內(nèi)存后,在執(zhí)行程序之前:指示性語句的功能已經(jīng)完成,故又稱偽操作.而指令性語句的功能尚未完成,需控制CPU去執(zhí)行,才能完成.(2)匯編以后,每條CPU指令產(chǎn)生一一對應的目標代碼;而偽操作則不產(chǎn)生與之對應的目標代碼.指示性語句與指令性語句區(qū)別;實現(xiàn)將兩個五字節(jié)的16進制數(shù)相加DATASEGMENT;定義數(shù)據(jù)段DATA1DB0F8H,60H,0ACH,74H,3BH;被加數(shù)DATA2DB0C1H,36H,9EH,0D5H,20H;加數(shù)DATAENDS ;數(shù)據(jù)段結(jié)束CODESEGMENT;定義代碼段ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX;初始化DSMOVCX,5;循環(huán)次數(shù)送CXMOVSI,0;置SI初值為零CLC;清CF標志LOOPER:MOVAL,DATA2[SI];取一個字節(jié)加數(shù)ADCDATA1[SI],AL;與被加數(shù)相加INCSI;SI加1DECCX;CX減1JNZLOOPER;若不等于零,轉(zhuǎn)LOOPER

MOVAH,4CHINT21H;返回DOSCODEENDS;代碼段結(jié)束ENDSTART;源程序結(jié)束(1)名字名字項:標號(指令性語句中)、變量名、段名、過程名(指示性語句中).標號有三種屬性:段、偏移量和類型標號段屬性:是定義標號的程序段的段地址.標號偏移屬性:表示標號所在段的起始地址到定義該標號的地址之間的字節(jié)數(shù).標號的類型:NEAR和FAR.變量名也有三種屬性:段、偏移量和類型變量的段屬性:變量所代表的數(shù)據(jù)區(qū)所在段的段地址.變量的偏移量:是該變量所在段的起始地址與變量的地址之間的字節(jié)數(shù).變量的類型:

BYTE(字節(jié))、WORD(字)和DWORD(雙字)(2)助記符/偽操作

對于指令,匯編程序?qū)⑵浞g成機器語言指令MOVAX,100→B80001對于偽操作,匯編程序據(jù)其要求的功能進行處理.偽指令沒有機器代碼.偽指令助記符將在下一節(jié)學習,前面引入的定義字節(jié)數(shù)據(jù)和字符串的DB就是偽指令.表達式表達式中常用的運算符有以下幾種:(1)算術運算符movax,3*4+5 ;等價于movax,17(2)邏輯運算符MOVAL,01011010BAND11100000B(3)關系運算符

EQ,NE,LT,GT,LE,GEMOVAX,4EQ3;(AX)=0MOVAX,4NE3;(AX)=0FFFFH(4)分析運算符和合成運算符OFFSET、SEG、PTR(4)分析運算符和合成運算符:用以分析一個存儲操作數(shù)的屬性,如段、偏移量或類型等.合成運算符則規(guī)定存儲器操作數(shù)的某個屬性,例如類型.OFFSET標號/變量MOVSI,OFFSETDATA1LEASI,DATA1SEG標號/變量MOVAX,SEGARRAYMOVDS,AX;將變量ARRAY的段地址送DS寄存器.PTR指定存儲器操作數(shù)的類型.INCBYTEPTR[BX][SI]3.3偽操作命令(指示性語句)3.3.1處理器方式偽操作3.3.2數(shù)據(jù)定義偽操作(變量定義偽操作)3.3.3符號定義偽操作3.3.4段定義偽操作3.3.5過程定義偽操作3.3.6模塊定義與連接偽操作3.3.7宏處理偽操作3.3.8條件偽操作3.3.9列表偽操作3.3.10其他偽操作3.3.2數(shù)據(jù)定義偽操作(變量定義偽操作)數(shù)據(jù)定義偽操作的用途是定義一個變量的類型,給變量分配存儲單元,再給存儲器賦初值或者不賦予特定的值.它的一般格式如下:[變量名]偽指令助記符操作數(shù)[,操作數(shù)]HEXTABDB01,02,03,04,05,06,07,08,09MNDB01H,02HMNDW01H,02HMNDD01H,02HMNDQ01H,02HMNDT01H,02HDATADB100,0FFHEXPRDB2*3+7STRDB‘WELCOME’ABDB‘AB’BADW‘AB’ABDDDD‘AB’OFFABDWABADRSDWTABLE,TABLE+5,TABLE+10TOTALDDTABLENUMDQ56677HDECMLDT1234567890HHEXTABDB01,02,03,04,05,06,07,08,09DB0AH,0BH,0CH,0DH,0EH,0FHFILLERDB?例:定義字符串變量(超過兩個字符的字符串只能用DB定義)

dataSEGMENT

str1DB'TsingHua'

str2DB'INPUT:',0dH,0aH,'$'dataENDS注意:3個及其以上的字符,只能用DB定義str1DW‘a(chǎn)bcd’str2DD‘a(chǎn)bcd’DUP復制操作數(shù)可用DUP復制操作數(shù),用以定義相同的操作數(shù),其格式為:重復次數(shù)DUP(操作數(shù))例

EEDB3DUP(4)

等價于EEDB4,4,4FFDB3DUP(4,5)

等價于FFDB4,5,4,5,4,5FILIERDB?SUMDB?DB?,?,?BUFFERDB10DUP(?)ZERODW30DUP(0)MASKDB5DUP(‘OK!’)ARRAYDB100DUP(3DUP(8),6)2、ASSUME偽指令格式:

ASSUME段寄存器名:段名[,段寄存器名:段名,…]其中,段寄存器名為CS、DS、ES、SS中的一個.段名為用偽操作SEGMENT定義過的段名.例:ASSUMECS:CODE,DS:DATA1,ES:DATA2,SS:STACKASSUME偽操作的作用:告訴匯編程序,將某一個段寄存器設置為某一個邏輯段的段地址,即明確指出源程序中的邏輯段與物理段之間的關系.當匯編程序匯編一個邏輯段時,即可利用相應的段寄存器尋址該邏輯段中的指令或數(shù)據(jù).例用程序?qū)崿F(xiàn)1234H+5678H

DATASEGMENTvalueDW1234H,5678HresultDW?

DATAENDS

CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA;給DS賦值

MOVDS,AXMOVAX,value;取數(shù)

ADDAX,value+2;兩數(shù)相加

MOVresult,AX;保存結(jié)果

MOVAH,4CH;返回DOSINT21H

CODEENDSENDSTART需要說明的是,盡管ASSUME語句指明了段寄存器與邏輯段的關系,但是,并沒有給段寄存器賦予實際的初始值.3.3.5過程定義偽操作過程定義偽操作命令為PROC/ENDP,格式如下:過程名 PROC[NEAR/FAR];隱含為NEAR …… RET;必須有返回指令過程名 ENDP(1)過程名常用作CALL調(diào)用指令的操作數(shù),過程的最后安排RET返回指令,使執(zhí)行完過程后能返回調(diào)用處.(2)過程有兩種類型:NEAR和FAR,無類型項時,默認為NEAR類型.當過程與調(diào)用指令不在同一段時,應將過程定義為FAR類型.;匯編語言程序結(jié)構例子(子程結(jié)構);用二進制顯示中斷向量表中數(shù)據(jù)D0H的個數(shù)3.5DOS和BIOS調(diào)用DOS的基本組成:DOS引導程序、IO.SYS、MSDOS.SYS、COMMAND.COM.MSDOS.SYS:是整個DOS系統(tǒng)的核心,由如下兩部分組成:初始化程序,用來完成DOS內(nèi)部的初始化工作;系統(tǒng)功能調(diào)用程序.IO.SYS:在系統(tǒng)盤上的,稱為BIOS接口(DOS內(nèi)核與硬件系統(tǒng)的接口).COMMAND.COM:DOS的外殼(shell)程序,它接受外部命令并對該命令進行解釋和執(zhí)行.C:\>COPY\WPS\ABC.WPSA:\BAC.WPSBIOS的基本組成:自檢及初始化、程序服務處理、硬件中斷處理,程序服務處理:其中包括BIOS中斷服務程序.附錄5BIOS調(diào)用BIOS是英文“Basic

Input

Output

System”的縮略,“基本輸入輸出系統(tǒng)”.其內(nèi)容集成在微機主板上的一個ROM芯片上,主要保存著有關微機系統(tǒng)最重要的BIOS中斷服務程序,BIOS系統(tǒng)設置程序,POST上電自檢,BIOS系統(tǒng)啟動自舉程序.BIOS應該是連接軟件程序與硬件設備的一座“橋梁”,負責解決硬件的即時要求.BIOS的功用:BIOS中斷服務程序,BIOS系統(tǒng)設置程序,POST上電自檢,BIOS系統(tǒng)啟動自舉程序.CMOS是主板上的一塊可讀寫的RAM芯片,里面裝的是關于系統(tǒng)配置的具體參數(shù),其內(nèi)容可通過設置程序進行讀寫.“通過BIOS設置程序?qū)MOS參數(shù)進行設置.”用戶程序控制PC機硬件的方式(1)使用高級語言提供的功能控制硬件優(yōu)點:使用高級語言提供的I/O語句,使用方便缺點:高級語言的I/O語句較少,執(zhí)行速度慢.(2)使用DOS提供的程序控制硬件優(yōu)點:使用DOS調(diào)用的程序可移植性好,I/O功能多,編程簡單.缺點:執(zhí)行效率較低.(3)使用BIOS提供的程序控制硬件優(yōu)點:使用BIOS調(diào)用的程序I/O功能多,編程簡單,執(zhí)行效率較高.缺點:可移植性差.(4)直接控制硬件系統(tǒng)編程(IN/OUT)優(yōu)點:執(zhí)行速度快缺點:程序的移植性較差,需要用戶熟悉硬件.應該選哪種方法來控制PC機的硬件呢?應該根據(jù)編程人員的素質(zhì)和所編程序的使用要求來考慮這個問題,一個程序員需權衡程序的可移植性、編程的復雜性和目標代碼大小后做出決定.具體說幾點:(1)如果高級語言提供的功能完全能滿足編程的需要,就沒有必要直接使用DOS和BIOS功能調(diào)用,這樣的程序就具有良好的可移植性,而且接口比較簡單.但是高級語言提供的I/O功能比DOS要少,所以有些操作僅僅使用高級語言提供的語句將無法完成.此外,使用高級語言作I/O操作將明顯增加程序的代碼段.(2)盡可能使用DOS的系統(tǒng)功能調(diào)用,提高程序可移植性.(3)在DOS功能不能實現(xiàn)情況下,考慮用BIOS功能調(diào)用.(4)在DOS和BIOS的中斷子程不能解決問題時,使用IN/OUT指令直接控制硬件.1、鍵盤中斷的調(diào)用(1)鍵盤的工作原理(2)DOS鍵盤中斷(3)BIOS鍵盤中斷2、顯示中斷的調(diào)用(1)顯示的基本概念(2)BIOS顯示中斷(3)DOS顯示中斷1、鍵盤中斷的調(diào)用(1)鍵盤的工作原理(1)鍵盤上的鍵有三種類型:①字符鍵,如字母A到Z,數(shù)字0到9,%,$,等.②功能鍵,如F1~F10、PgUp等.③組合鍵及雙態(tài)鍵,如Shift,Alt,Ctrl,Capslock,Numlock等.使用這些鍵能改變其它鍵所產(chǎn)生的字符碼.(2)鍵盤上的每個鍵都有一個字符碼和掃描碼(P396).①掃描碼的作用是:確定操作的是哪個鍵以及是按下鍵還是釋放鍵;②掃描碼用一個字節(jié)表示:低7位是掃描碼的數(shù)字編碼,與鍵盤上的鍵一一對應;最高位D7位表示鍵的操作狀態(tài):當按下鍵時,D7=0;當釋放鍵時,D7=1PC機對鍵盤的管理:PC機鍵盤內(nèi)都有一個單片機,一般為INTEL8048,它不斷地掃描各鍵,對于按下的鍵,將其掃描碼串行送往主機.在主機接口將它變?yōu)椴⑿袛?shù)據(jù)存于一并行輸入口(60H),并由硬件引起09H號可屏蔽中斷.INT09H中斷服務程序完成以下任務:①從8255可編程序外圍接口芯片的輸入端口60H讀取操作鍵的掃描碼.②將掃描碼轉(zhuǎn)換成字符碼:大部分鍵的字符碼為ASCII碼,無ASCII碼鍵(如組合鍵Shift、Ctrl等)的字符碼為0.③將鍵的掃描碼、字符碼存放在鍵盤緩沖區(qū),供其它有關鍵盤的中斷子程應用.(2)DOS鍵盤中斷(1)單字符輸入(2)字符串輸入(3)檢測鍵盤狀態(tài)DOS和BIOS調(diào)用方法設置入口參數(shù)在AH設置功能號m執(zhí)行中斷指令INTN分析、應用出口參數(shù)例1單字符顯示功能調(diào)用MOVDL,‘A’;設置入口參數(shù)MOVAH,02H;設置功能號INT21H;執(zhí)行中斷調(diào)用例2單字符輸入功能調(diào)用MOVAH,01H;設置功能號INT21H;執(zhí)行中斷調(diào)用CMPAL,0DH;分析、應用出口參數(shù)JZexit……………(1)單字符輸入(01H、07H、08H功能)入口參數(shù)無功能號

AH=01H或07H或08H類型號

21H出口參數(shù)(AL)=鍵入字符的ASCII碼實現(xiàn)功能:

01H:等待從鍵盤輸入一個字符,并在屏幕上回顯,光標移動,檢測Ctrl-Break鍵.若按下了此組合鍵,則結(jié)束當前程序,返回DOS提示符下.07H:等待從鍵盤輸入一個字符,不在屏幕上回顯,不檢測Ctrl-Break鍵.08H:等待從鍵盤輸入一個字符,不在屏幕上回顯,檢測Ctrl-Break鍵若按下了此組合鍵,則結(jié)束當前程序,返回DOS提示符下.例利用鍵盤輸入的字符產(chǎn)生分支:

MOVAH,01H;等待從鍵盤輸入INT21H

CMPAL,‘Y’

;是’Y’?

JZyes

CMPAL,‘N’

;是’N’?

JZnono:......JMPexityes:......exit:...(2)字符串輸入(0AH功能)實現(xiàn)功能:等待從鍵盤輸入字符串,并存入設定的緩沖區(qū)內(nèi),同時回顯字符串,光標隨著移動.因此必須事先定義一個緩沖區(qū).其第一個字節(jié)給定緩沖區(qū)中能存放的字節(jié)數(shù),第二個留給系統(tǒng)填寫實際鍵入的字符個數(shù),從第三個字節(jié)開始用來存放鍵入的字符串,最后鍵入回車符(Enter)鍵表示字符輸入結(jié)束.調(diào)用前緩沖區(qū)的段地址和偏移量應分別送DS:DX.注意事項:應按要求先定義緩沖區(qū),再調(diào)用.例應用0AH功能輸入字符串DATASEGMENT;定義緩沖區(qū)BUFSIZEDB25;定義限制最多輸入個數(shù)ACTCHARDB?;用于存放實際輸入個數(shù)CHARTEXTDB25DUP(?);用于存放輸入的字符串DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA;置緩沖區(qū)地址于DS:DXMOVDS,AXMOVDX,OFFSETBUFSIZE

MOVAH,0AHINT21H;調(diào)0A輸入功能

MOVAH,4CHINT21HCODEENDSENDSTARTDATASEGMENTBUFSIZEDB25ACTCHARDB?

CHARTEXTDB25DUP(?)

DATAENDS從鍵盤輸入‘HELLO’,回車,內(nèi)存的存放結(jié)果:等價于BUFSIZEDB25,?,25DUP(?)(3)檢測鍵盤狀態(tài)(0BH功能)入口參數(shù)無功能號

AH=0BH類型號21H出口參數(shù)

AL=FFH,表示有鍵按下.AL=0,表示無鍵按下.實現(xiàn)功能檢測是否有字符鍵入.這個調(diào)用十分有用.例如有時要求程序保持運行狀態(tài),但又要靠用戶按任意一鍵使程序結(jié)束或退出循環(huán)時,則必須使用0BH號調(diào)用.例利用0B功能實現(xiàn)按鍵退出循環(huán).….continue:….MOVAH,0BH;檢測是否有鍵按下

INT21HCMPAL,0FFH

JNZcontinue;無鍵按下繼續(xù)循環(huán)….….

MOVAH,4CHINT21H(3)BIOS鍵盤中斷大家把書翻到P395和156頁DOS系統(tǒng)功能調(diào)用中的鍵盤子功能(01H,07H,08H)與BIOS調(diào)用中INT16H功能有何不同?不同是:INT21H的功能01H、07H、08H都能從鍵盤緩沖區(qū)讀入一個字符的ASCⅡ碼到AL寄存器中,且功能1能顯示字符.但不能區(qū)分那些ASII碼都為00H的鍵,例如一些特殊功能鍵.INT16H可以得到鍵的ASCII碼和掃描碼,可以區(qū)分鍵盤上的任意鍵被按下,但不能顯示字符.(1)從鍵盤讀一個字符入口參數(shù)無

功能號

AH=00H

類型號

16H

出口參數(shù)

AL=鍵入字符的ASCII碼=0(字符無ASCII碼)

AH=字符的掃描碼

實現(xiàn)功能

讀一個鍵盤字符(若字符已鍵入并放入鍵盤緩沖區(qū),則立即返回該字符,否則等待,直到有字符輸入為止)例如:從鍵盤輸入一個字符CODESEGMENTASSUMECS:CODESTART:MOVAH,0INT16HMOVAH,4CHINT21HCODEENDSENDSTART下面一段程序的功能是,按下F1和F2鍵,分別執(zhí)行兩段不同程序,按其他鍵轉(zhuǎn)至錯誤處理.

MOVAH,0INT16H;鍵入字符

CMPAL,0JNEERROR;若為字符鍵,轉(zhuǎn)ERRORCMPAH,3BH;F1鍵碼為3BHJETT1;若為F1鍵,轉(zhuǎn)TT1CMPAH,3CH;F2鍵碼為3CHJETT2;若為F2鍵,轉(zhuǎn)TT2JMPERRORTT1:…….;按F1鍵功能斷……..TT2:…….;按F2鍵功能斷…….ERROR:…….;錯誤處理前面我們已經(jīng)提到SHIFT、CTRL、ALT、NUMLOCKINS和SCROLLLOCK這些鍵不具有ASCII碼,但按動了它們能改變其它鍵所產(chǎn)生的代碼,那么如何能判斷這些鍵按動與否呢?INT16H的AH=2的功能可以把表示這些鍵狀態(tài)的字節(jié)——鍵盤狀態(tài)字節(jié)(KB_FLAG)回送到AL寄存器.(2)取鍵盤的狀態(tài)字節(jié)入口參數(shù)無功能號

AH=02H類型號

16H出口參數(shù)

AL=轉(zhuǎn)換鍵的狀態(tài)實現(xiàn)功能取當前轉(zhuǎn)換鍵的狀態(tài)例如:取鍵盤的狀態(tài)字節(jié)CODESEGMENTASSUMECS:CODESTART:MOVAH,2INT16HMOVAH,4CHINT21HCODEENDSENDSTART2、顯示中斷的調(diào)用(1)顯示的基本概念①顯示器通過顯卡(顯示適配器)連接到計算機上.②屏幕上各象素的顯示信息,存放在顯示緩沖區(qū)(顯存)中.④顯示器有兩種顯示方式:文本方式:將屏幕劃分為若干行和列,在每個網(wǎng)格位置上顯示象素,一個字符是一個象素.圖形方式:將屏幕劃分為m×n的點陣,在每個點的位置顯示象素,一個點是一個象素.文本方式:將屏幕劃分為m列和n行(m×n),在每個網(wǎng)格位置上顯示象素,一個字符是一個象素.80×25文本方式A~~~~~~~~~~~~~~~~0列0行79列24行BC~~~~640×480圖形方式640點480點圖形方式:將屏幕劃分為m×n的點陣,在每個點的位置顯示象素,一個點是一個象素.在文本方式下,對應屏幕上的每個字符,在顯示緩沖區(qū)中占用兩個單元:一個存放ASCII碼,一個存放顯示屬性.41H07H42H07H61H70H62H70H、、、顯示緩沖區(qū)(顯存)字符A,

黑底白字字符B,

黑底白字字符a,白底黑字字符b,

白底黑字例10000111B或87H

表示黑底白字,閃爍

01110000B或70H

表示白底黑字,不閃爍16種0000黑1000灰

0010綠1010淺綠0100紅1100淺紅0111灰白1111白BLRGBIRGB閃爍背景前景765432108種000黑010綠

100紅111白0不閃爍1閃爍屬性字節(jié)的含義:(2)BIOS顯示中斷有關顯示輸出的DOS功能調(diào)用不多,而BIOS調(diào)用(INT10H)的功能很強,主要包括設置顯示方式,清屏,設置光標大小和位置,顯示字符,顯示圖形等.設置顯示方式清屏幕置光標的位置顯示功能的調(diào)用(1)設置顯示方式入口參數(shù)

AL=顯示方式值

0040×25黑白文本方式

0140×25彩色文本方式

0280×25黑白文本方式

0380×25彩色文本方式………………….功能號

AH=00H類型號

10H出口參數(shù)無實現(xiàn)功能將顯示方式設置為指定形式例將顯示方式設置為80×25彩色文本方式

MOVAL,03HMOVAH,00

INT10H(2)清屏、清窗口功能入口參數(shù)

AL=0CH=窗口左上角行號

CL=窗口左上角列號

DH=窗口右下角行號

DL=窗口右下角列號

BH=窗口屬性功能號

AH=06H

或AH=07H類型號

10H出口參數(shù)無實現(xiàn)功能按給定屬性清除指定的窗口內(nèi)容例清除屏幕顯示,將其屬性置為反白(白底黑字)顯示.MOVAL,0;清屏功能MOVBH,70H;白底黑字MOVCH,0;左上角行號MOVCL,0;左上角列號MOVDH,24;右下角行號MOVDL,79;右下角列號MOVAH,6;功能號INT10H;中斷調(diào)用(3)置光標位置(控制光標開始顯示的位置)~~~~~~~~~~~~~~~~0列0行79列24行5列1列1行2行置光標位置入口參數(shù)

DH=行號

DL=列號

BH=頁號

功能號

AH=02H

類型號

10H

出口參數(shù)無

實現(xiàn)功能將光標設置在指定的位置例將光標設置在2行5列的位置MOVDH,2MOVDL,5MOVBH,0MOVAH,2INT10H~~~~~~~~~~~~~~~~0列0行79列24行5列1列1行2行(4)字符的顯示(單色顯示器字符的顯示)入口參數(shù)

BH=頁號

AL=字符的ASCII碼

BL=字符的屬性功能號

AH=09H類型號

10H出口參數(shù)無實現(xiàn)功能在光標位置上顯示字符及屬性入口參數(shù)

BH=頁號

AL=字符的ASCII碼功能號

AH=0AH類型號

10H出口參數(shù)無實現(xiàn)功能在光標位置上顯示字符DATASEGMENTATRIDB5EH,94H,5EH,94H,5EH,94H,5EH,94H,5EH,94HDATAENDSSTACKSEGMENTPARASTACK'STACK'DB200DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AX

MOVAH,0;設置80列25行的彩色文本方式

MOVAL,3INT10HLEASI,ATRI;屬性字節(jié)值表首址存SI寄存器

MOVDI,10;顯示10個字符

MOVDH,0CH;設置顯示位置(35列12行開始)

MOVDL,23HLP:MOVAH,2;設置光標位置

INCDL

INT10HMOVAL,3;顯示心型字符

MOVBH,0;頁號

MOVBL,[SI];彩色屬性值

MOVCX,1;字符重復次數(shù)

MOVAH,9;在光標位置顯示字符及其屬性

INT1

溫馨提示

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

評論

0/150

提交評論