第三匯編語(yǔ)言程序設(shè)計(jì)演示文稿_第1頁(yè)
第三匯編語(yǔ)言程序設(shè)計(jì)演示文稿_第2頁(yè)
第三匯編語(yǔ)言程序設(shè)計(jì)演示文稿_第3頁(yè)
第三匯編語(yǔ)言程序設(shè)計(jì)演示文稿_第4頁(yè)
第三匯編語(yǔ)言程序設(shè)計(jì)演示文稿_第5頁(yè)
已閱讀5頁(yè),還剩72頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第三匯編語(yǔ)言程序設(shè)計(jì)演示文稿當(dāng)前1頁(yè),總共77頁(yè)。(優(yōu)選)第三匯編語(yǔ)言程序設(shè)計(jì)當(dāng)前2頁(yè),總共77頁(yè)。計(jì)算機(jī)語(yǔ)言分為三類:機(jī)器語(yǔ)言,匯編語(yǔ)言和高級(jí)語(yǔ)言.(1)機(jī)器語(yǔ)言機(jī)器語(yǔ)言是用二進(jìn)制代碼表示的計(jì)算機(jī)能直接識(shí)別和執(zhí)行的一種機(jī)器指令的集合.優(yōu)點(diǎn):執(zhí)行速度快,占用內(nèi)存少缺點(diǎn):不直觀,不易理解和記憶.(2)匯編語(yǔ)言匯編語(yǔ)言是一種用助記符表示的仍然面向機(jī)器的計(jì)算機(jī)語(yǔ)言.為了克服機(jī)器語(yǔ)言難讀、難編、難記和易出錯(cuò)的缺點(diǎn),人們就用與代碼指令實(shí)際含義相近的英文縮寫詞、字母和數(shù)字等符號(hào)來取代指令代碼(如用ADD表示運(yùn)算符號(hào)“+”的機(jī)器代碼),于是就產(chǎn)生了匯編語(yǔ)言.優(yōu)點(diǎn):與機(jī)器語(yǔ)言相比,編寫、閱讀和修改都比較方便;占用空間少,執(zhí)行速度快.缺點(diǎn):面向機(jī)器的語(yǔ)言,通用性差.當(dāng)前3頁(yè),總共77頁(yè)。(3)高級(jí)語(yǔ)言計(jì)算機(jī)事業(yè)的發(fā)展,促使人們?nèi)で笠恍┡c人類自然語(yǔ)言相接近且能為計(jì)算機(jī)所接受的語(yǔ)意確定、規(guī)則明確、自然直觀和通用易學(xué)的計(jì)算機(jī)語(yǔ)言.這種與自然語(yǔ)言相近并為計(jì)算機(jī)所接受和執(zhí)行的計(jì)算機(jī)語(yǔ)言稱高級(jí)語(yǔ)言.目前被廣泛使用的高級(jí)語(yǔ)言有BASIC、PASCAL、C、COBOL、FORTRAN、LOGO以及VC、VB等.優(yōu)點(diǎn):不針對(duì)某個(gè)具體的計(jì)算機(jī),通用性強(qiáng);語(yǔ)言程序易讀、易編.缺點(diǎn):占用更多的內(nèi)存,編譯或解釋的過程也要花費(fèi)更多的時(shí)間.當(dāng)前4頁(yè),總共77頁(yè)。為什么要用匯編語(yǔ)言編寫程序高級(jí)語(yǔ)言“易學(xué)易用”,這是因?yàn)楦呒?jí)語(yǔ)言的語(yǔ)句是面向數(shù)學(xué)語(yǔ)言和自然語(yǔ)言的,因此容易接受、掌握.相對(duì)來說匯編語(yǔ)言編制程序比高級(jí)語(yǔ)言要困難些.既然如此,為什么還要學(xué)習(xí)和使用匯編語(yǔ)言呢?主要有以下幾點(diǎn):⑴程序設(shè)計(jì)人員可以充分利用機(jī)器硬件的全部功能,發(fā)揮機(jī)器的長(zhǎng)處.⑵現(xiàn)在的微機(jī)系統(tǒng)中,底層的一些功能仍然靠匯編語(yǔ)言程序來實(shí)現(xiàn).例如機(jī)器的自檢、系統(tǒng)初始化、實(shí)際的輸入輸出操作,至今仍然是用匯編語(yǔ)言編制的程序來完成.⑶匯編語(yǔ)言程序的效率通常高于高級(jí)語(yǔ)言程序.所以在節(jié)省內(nèi)存空間和提高程序運(yùn)行速度的重要場(chǎng)合,如實(shí)時(shí)控制,常常使用匯編語(yǔ)言來編制的.鑒于以上理由,現(xiàn)在許多高級(jí)語(yǔ)言都設(shè)置有與匯編語(yǔ)言程序接口的功能,以便于提高高級(jí)語(yǔ)言程序的效率.當(dāng)前5頁(yè),總共77頁(yè)。3.2匯編語(yǔ)言源程序的格式3.2.1程序結(jié)構(gòu)3.2.2語(yǔ)句結(jié)構(gòu)當(dāng)前6頁(yè),總共77頁(yè)。3.2.1程序結(jié)構(gòu)-分段結(jié)構(gòu)例3.1將五個(gè)字節(jié)的16進(jìn)制數(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.當(dāng)前7頁(yè),總共77頁(yè)。;實(shí)現(xiàn)將兩個(gè)五字節(jié)的16進(jìn)制數(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標(biāo)志LOOPER:MOVAL,DATA2[SI];取一個(gè)字節(jié)加數(shù)

ADCDATA1[SI],AL;與被加數(shù)相加

INCSI;SI加1DECCX;CX減1JNZLOOPER;若不等于零,轉(zhuǎn)LOOPER

MOVAH,4CHINT21H;返回DOSCODEENDS;代碼段結(jié)束

ENDSTART;源程序結(jié)束當(dāng)前8頁(yè),總共77頁(yè)。數(shù)據(jù)段名SEGMENT┊?dāng)?shù)據(jù)段名ENDS堆棧段名SEGMENT┊堆棧段名ENDS代碼段名SEGMENTASSUMECS:代碼段名,DS:數(shù)據(jù)段名,SS:堆棧段名起始標(biāo)號(hào):MOVAX,數(shù)據(jù)段名

MOVDS,AX ┊MOVAH,4CHINT21H;返回DOS代碼段名ENDSEND起始標(biāo)號(hào)匯編語(yǔ)言源程序的一般格式:當(dāng)前9頁(yè),總共77頁(yè)。3.2.1程序結(jié)構(gòu)-分段結(jié)構(gòu);實(shí)現(xiàn)將兩個(gè)五字節(jié)的16進(jìn)制數(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標(biāo)志LOOPER:MOVAL,DATA2[SI];取一個(gè)字節(jié)加數(shù)

ADCDATA1[SI],AL;與被加數(shù)相加

INCSI;SI加1DECCX;CX減1JNZLOOPER;若不等于零,轉(zhuǎn)LOOPER

MOVAH,4CHINT21H;返回DOSCODEENDS;代碼段結(jié)束

ENDSTART;源程序結(jié)束程序由數(shù)條語(yǔ)句構(gòu)成,每語(yǔ)句占一行.指令性語(yǔ)句(指令語(yǔ)句)指示性語(yǔ)句(偽指令語(yǔ)句)分段結(jié)構(gòu)程序按段編寫,與8088內(nèi)存分段編址相對(duì)應(yīng).每段由偽操作SEGMENT開始、由ENDS結(jié)束.程序可由多個(gè)段構(gòu)成,至少有一個(gè)代碼段程序最后為END結(jié)束語(yǔ)句,后跟一啟動(dòng)地址.當(dāng)前10頁(yè),總共77頁(yè)。;實(shí)現(xiàn)將兩個(gè)五字節(jié)的16進(jìn)制數(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標(biāo)志LOOPER:MOVAL,DATA2[SI];取一個(gè)字節(jié)加數(shù)

ADCDATA1[SI],AL;與被加數(shù)相加

INCSI;SI加1DECCX;CX減1JNZLOOPER;若不等于零,轉(zhuǎn)LOOPER

MOVAH,4CHINT21H;返回DOSCODEENDS;代碼段結(jié)束

ENDSTART;源程序結(jié)束當(dāng)前11頁(yè),總共77頁(yè)。3.2.2語(yǔ)句結(jié)構(gòu)語(yǔ)句分為指令性語(yǔ)句和指示性語(yǔ)句.指令性語(yǔ)句——使CPU產(chǎn)生動(dòng)作、并在程序執(zhí)行時(shí)才執(zhí)行的語(yǔ)句,就是第2章學(xué)習(xí)的指令;指示性語(yǔ)句——不產(chǎn)生CPU動(dòng)作、在程序執(zhí)行前由匯編程序處理的說明性語(yǔ)句,例如,數(shù)據(jù)說明、變量定義等等,主要由偽操作指令組成;當(dāng)前12頁(yè),總共77頁(yè)。(1)一個(gè)程序經(jīng)匯編,連接和裝入內(nèi)存后,在執(zhí)行程序之前:指示性語(yǔ)句的功能已經(jīng)完成,故又稱偽操作.而指令性語(yǔ)句的功能尚未完成,需控制CPU去執(zhí)行,才能完成.(2)匯編以后,每條CPU指令產(chǎn)生一一對(duì)應(yīng)的目標(biāo)代碼;而偽操作則不產(chǎn)生與之對(duì)應(yīng)的目標(biāo)代碼.指示性語(yǔ)句與指令性語(yǔ)句區(qū)別當(dāng)前13頁(yè),總共77頁(yè)。;實(shí)現(xiàn)將兩個(gè)五字節(jié)的16進(jìn)制數(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標(biāo)志LOOPER:MOVAL,DATA2[SI];取一個(gè)字節(jié)加數(shù)

ADCDATA1[SI],AL;與被加數(shù)相加

INCSI;SI加1DECCX;CX減1JNZLOOPER;若不等于零,轉(zhuǎn)LOOPER

MOVAH,4CHINT21H;返回DOSCODEENDS;代碼段結(jié)束

ENDSTART;源程序結(jié)束當(dāng)前14頁(yè),總共77頁(yè)。語(yǔ)句格式(1)指令性語(yǔ)句[標(biāo)號(hào):]指令助記符[操作數(shù),操作數(shù)][;注釋]LOOPER:MOVAL,DATA2[SI](2)指示性語(yǔ)句[名字]偽指令助記符[參數(shù),參數(shù),…][;注釋]DATA1DB0F8H,60H,0ACH統(tǒng)一這兩種語(yǔ)句格式如下:[名字]助記符/偽操作[操作數(shù)][;注釋]當(dāng)前15頁(yè),總共77頁(yè)。(1)名字名字項(xiàng):標(biāo)號(hào)(指令性語(yǔ)句中)、變量名、段名、過程名(指示性語(yǔ)句中).標(biāo)號(hào)有三種屬性:段、偏移量和類型標(biāo)號(hào)段屬性:是定義標(biāo)號(hào)的程序段的段地址.標(biāo)號(hào)偏移屬性:表示標(biāo)號(hào)所在段的起始地址到定義該標(biāo)號(hào)的地址之間的字節(jié)數(shù).標(biāo)號(hào)的類型:NEAR和FAR.變量名也有三種屬性:段、偏移量和類型變量的段屬性:變量所代表的數(shù)據(jù)區(qū)所在段的段地址.變量的偏移量:是該變量所在段的起始地址與變量的地址之間的字節(jié)數(shù).變量的類型:

BYTE(字節(jié))、WORD(字)和DWORD(雙字)當(dāng)前16頁(yè),總共77頁(yè)。(2)助記符/偽操作

對(duì)于指令,匯編程序?qū)⑵浞g成機(jī)器語(yǔ)言指令

MOVAX,100→B80001對(duì)于偽操作,匯編程序據(jù)其要求的功能進(jìn)行處理.偽指令沒有機(jī)器代碼.偽指令助記符將在下一節(jié)學(xué)習(xí),前面引入的定義字節(jié)數(shù)據(jù)和字符串的DB就是偽指令.當(dāng)前17頁(yè),總共77頁(yè)。(3)操作數(shù)操作數(shù)可以是常數(shù)、寄存器、標(biāo)號(hào)、變量或表達(dá)式等.常數(shù):常數(shù)可以為二進(jìn)制數(shù)、十進(jìn)制數(shù)、十六進(jìn)制數(shù)、八進(jìn)制數(shù)以及數(shù)的各種表示法表示的數(shù),例如科學(xué)表示法表示的數(shù)等.常數(shù)不得以字母開頭,因此,當(dāng)十六進(jìn)制數(shù)的最高位為A~F時(shí),應(yīng)在其前增加數(shù)字“0”.例0F3H.用單引號(hào)括起來的單個(gè)字符或多個(gè)字符,其數(shù)值是每個(gè)字符對(duì)應(yīng)的ASCII碼的值.例如:'d'=64H'AB'=4142H.當(dāng)前18頁(yè),總共77頁(yè)。表達(dá)式表達(dá)式中常用的運(yùn)算符有以下幾種:(1)算術(shù)運(yùn)算符movax,3*4+5 ;等價(jià)于movax,17(2)邏輯運(yùn)算符MOVAL,01011010BAND11100000B(3)關(guān)系運(yùn)算符

EQ,NE,LT,GT,LE,GEMOVAX,4EQ3;(AX)=0MOVAX,4NE3;(AX)=0FFFFH(4)分析運(yùn)算符和合成運(yùn)算符OFFSET、SEG、PTR當(dāng)前19頁(yè),總共77頁(yè)。(4)分析運(yùn)算符和合成運(yùn)算符:用以分析一個(gè)存儲(chǔ)操作數(shù)的屬性,如段、偏移量或類型等.合成運(yùn)算符則規(guī)定存儲(chǔ)器操作數(shù)的某個(gè)屬性,例如類型.OFFSET標(biāo)號(hào)/變量MOVSI,OFFSETDATA1LEASI,DATA1SEG標(biāo)號(hào)/變量MOVAX,SEGARRAYMOVDS,AX;將變量ARRAY的段地址送DS寄存器.PTR指定存儲(chǔ)器操作數(shù)的類型.INCBYTEPTR[BX][SI]當(dāng)前20頁(yè),總共77頁(yè)。3.3偽操作命令(指示性語(yǔ)句)3.3.1處理器方式偽操作3.3.2數(shù)據(jù)定義偽操作(變量定義偽操作)3.3.3符號(hào)定義偽操作3.3.4段定義偽操作3.3.5過程定義偽操作3.3.6模塊定義與連接偽操作3.3.7宏處理偽操作3.3.8條件偽操作3.3.9列表偽操作3.3.10其他偽操作當(dāng)前21頁(yè),總共77頁(yè)。3.3.2數(shù)據(jù)定義偽操作(變量定義偽操作)數(shù)據(jù)定義偽操作的用途是定義一個(gè)變量的類型,給變量分配存儲(chǔ)單元,再給存儲(chǔ)器賦初值或者不賦予特定的值.它的一般格式如下:[變量名]偽指令助記符操作數(shù)[,操作數(shù)]HEXTABDB01,02,03,04,05,06,07,08,09當(dāng)前22頁(yè),總共77頁(yè)。DB:定義變量類型為BYTE,DB偽操作后面的操作數(shù)每個(gè)占1個(gè)字節(jié).DW:定義變量類型為WORD,DW偽操作后面的操作數(shù)每個(gè)占1個(gè)字,即2個(gè)字節(jié).在內(nèi)存中存放時(shí),低位字節(jié)在前,高位字節(jié)在后.DD:定義變量類型為DWORD,DD偽操作后面的操作數(shù)每個(gè)占2個(gè)字,即4個(gè)字節(jié).在內(nèi)存中存放時(shí),低位字節(jié)在前,高位字節(jié)在后.DQ:定義變量類型為QWORD,DQ偽操作后面的操作數(shù)每個(gè)占4個(gè)字,即8個(gè)字節(jié).在內(nèi)存中存放時(shí),低位字節(jié)在前,高位字節(jié)在后.DT:定義變量類型為TBYTE,DT偽操作后面的操作數(shù)每個(gè)占10個(gè)字節(jié).變量定義偽指令助記符當(dāng)前23頁(yè),總共77頁(yè)。MNDB01H,02HMNDW01H,02HMNDD01H,02HMNDQ01H,02HMNDT01H,02H當(dāng)前24頁(yè),總共77頁(yè)。DATADB100,0FFHEXPRDB2*3+7STRDB‘WELCOME’ABDB‘AB’BADW‘AB’ABDDDD‘AB’OFFABDWABADRSDWTABLE,TABLE+5,TABLE+10TOTALDDTABLEDECMLDT1234567890HHEXTABDB01,02,03,04,05,06,07,08,09DB0AH,0BH,0CH,0DH,0EH,0FHFILLERDB?當(dāng)前25頁(yè),總共77頁(yè)。例:定義字符串變量(超過兩個(gè)字符的字符串只能用DB定義)

dataSEGMENT

str1DB'TsingHua'

str2DB'INPUT:',0dH,0aH,'$'dataENDS注意:3個(gè)及其以上的字符,只能用DB定義str1DW‘a(chǎn)bcd’str2DD‘a(chǎn)bcd’當(dāng)前26頁(yè),總共77頁(yè)。DUP復(fù)制操作數(shù)可用DUP復(fù)制操作數(shù),用以定義相同的操作數(shù),其格式為:重復(fù)次數(shù)DUP(操作數(shù))例

EEDB3DUP(4)

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

等價(jià)于FFDB4,5,4,5,4,5FILIERDB?SUMDB?DB?,?,?BUFFERDB10DUP(?)ZERODW30DUP(0)MASKDB5DUP(‘OK!’)ARRAYDB100DUP(3DUP(8),6)當(dāng)前27頁(yè),總共77頁(yè)。3.3.4段定義偽操作1、SEGMENT/ENDS格式:段名 SEGMENT[定位][組合][‘類別’]

…… ;語(yǔ)句段名 ENDS(1)段定義由SEGMENT和ENDS這一對(duì)偽指令實(shí)現(xiàn),SEGMENT偽指令定義一個(gè)邏輯段的開始,ENDS偽指令表示一個(gè)段的結(jié)束.(2)SEGMENT偽操作后面還有三個(gè)任選項(xiàng):定位類型、組合類型和‘類別’.它們可有可無.如果有,三者的順序必須符合格式中的規(guī)定.(3)這些任選項(xiàng)是給匯編程序和連接程序(LINK)的命令.當(dāng)前28頁(yè),總共77頁(yè)。2、ASSUME偽指令格式:

ASSUME段寄存器名:段名[,段寄存器名:段名,…]其中,段寄存器名為CS、DS、ES、SS中的一個(gè).段名為用偽操作SEGMENT定義過的段名.例:ASSUMECS:CODE,DS:DATA1,ES:DATA2,SS:STACKASSUME偽操作的作用:告訴匯編程序,將某一個(gè)段寄存器設(shè)置為某一個(gè)邏輯段的段地址,即明確指出源程序中的邏輯段與物理段之間的關(guān)系.當(dāng)匯編程序匯編一個(gè)邏輯段時(shí),即可利用相應(yīng)的段寄存器尋址該邏輯段中的指令或數(shù)據(jù).當(dāng)前29頁(yè),總共77頁(yè)。例用程序?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當(dāng)前30頁(yè),總共77頁(yè)。需要說明的是,盡管ASSUME語(yǔ)句指明了段寄存器與邏輯段的關(guān)系,但是,并沒有給段寄存器賦予實(shí)際的初始值.當(dāng)前31頁(yè),總共77頁(yè)。3.3.5過程定義偽操作過程定義偽操作命令為PROC/ENDP,格式如下:過程名 PROC[NEAR/FAR];隱含為NEAR …… RET;必須有返回指令過程名 ENDP(1)過程名常用作CALL調(diào)用指令的操作數(shù),過程的最后安排RET返回指令,使執(zhí)行完過程后能返回調(diào)用處.(2)過程有兩種類型:NEAR和FAR,無類型項(xiàng)時(shí),默認(rèn)為NEAR類型.當(dāng)過程與調(diào)用指令不在同一段時(shí),應(yīng)將過程定義為FAR類型.當(dāng)前32頁(yè),總共77頁(yè)。;匯編語(yǔ)言程序結(jié)構(gòu)例子(子程結(jié)構(gòu));用二進(jìn)制顯示中斷向量表中數(shù)據(jù)D0H的個(gè)數(shù)當(dāng)前33頁(yè),總共77頁(yè)。3.5DOS和BIOS調(diào)用DOS的基本組成:DOS引導(dǎo)程序、IO.SYS、MSDOS.SYS、COMMAND.COM.MSDOS.SYS:是整個(gè)DOS系統(tǒng)的核心,由如下兩部分組成:初始化程序,用來完成DOS內(nèi)部的初始化工作;系統(tǒng)功能調(diào)用程序.IO.SYS:在系統(tǒng)盤上的,稱為BIOS接口(DOS內(nèi)核與硬件系統(tǒng)的接口).COMMAND.COM:DOS的外殼(shell)程序,它接受外部命令并對(duì)該命令進(jìn)行解釋和執(zhí)行.C:\>COPY\WPS\ABC.WPSA:\BAC.WPSBIOS的基本組成:自檢及初始化、程序服務(wù)處理、硬件中斷處理,程序服務(wù)處理:其中包括BIOS中斷服務(wù)程序.附錄5BIOS調(diào)用當(dāng)前34頁(yè),總共77頁(yè)。BIOS是英文“Basic

Input

Output

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

AH=01H或07H或08H類型號(hào)

21H出口參數(shù)

(AL)=鍵入字符的ASCII碼實(shí)現(xiàn)功能:

01H:等待從鍵盤輸入一個(gè)字符,并在屏幕上回顯,光標(biāo)移動(dòng),檢測(cè)Ctrl-Break鍵.若按下了此組合鍵,則結(jié)束當(dāng)前程序,返回DOS提示符下.07H:等待從鍵盤輸入一個(gè)字符,不在屏幕上回顯,

不檢測(cè)Ctrl-Break鍵.08H:等待從鍵盤輸入一個(gè)字符,不在屏幕上回顯,檢測(cè)Ctrl-Break鍵若按下了此組合鍵,則結(jié)束當(dāng)前程序,返回DOS提示符下.當(dāng)前46頁(yè),總共77頁(yè)。例利用鍵盤輸入的字符產(chǎn)生分支:

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

INT21H

CMPAL,‘Y’

;是’Y’?

JZyes

CMPAL,‘N’

;是’N’?

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

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

MOVAH,4CHINT21HCODEENDSENDSTART當(dāng)前49頁(yè),總共77頁(yè)。DATASEGMENTBUFSIZEDB25ACTCHARDB?

CHARTEXTDB25DUP(?)

DATAENDS從鍵盤輸入‘HELLO’,回車,內(nèi)存的存放結(jié)果:等價(jià)于BUFSIZEDB25,?,25DUP(?)當(dāng)前50頁(yè),總共77頁(yè)。(3)檢測(cè)鍵盤狀態(tài)(0BH功能)入口參數(shù)無功能號(hào)

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

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

INT21HCMPAL,0FFH

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

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

功能號(hào)

AH=00H

類型號(hào)

16H

出口參數(shù)

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

AH=字符的掃描碼

實(shí)現(xiàn)功能

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

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:…….;錯(cuò)誤處理當(dāng)前56頁(yè),總共77頁(yè)。前面我們已經(jīng)提到SHIFT、CTRL、ALT、NUMLOCKINS和SCROLLLOCK這些鍵不具有ASCII碼,但按動(dòng)了它們能改變其它鍵所產(chǎn)生的代碼,那么如何能判斷這些鍵按動(dòng)與否呢?INT16H的AH=2的功能可以把表示這些鍵狀態(tài)的字節(jié)——鍵盤狀態(tài)字節(jié)(KB_FLAG)回送到AL寄存器.當(dāng)前57頁(yè),總共77頁(yè)。(2)取鍵盤的狀態(tài)字節(jié)入口參數(shù)無功能號(hào)

AH=02H類型號(hào)

16H出口參數(shù)

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

黑底白字字符B,

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

白底黑字當(dāng)前62頁(yè),總共77頁(yè)。例10000111B或87H

表示黑底白字,閃爍

01110000B或70H

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

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

100紅111白0不閃爍1閃爍屬性字節(jié)的含義:當(dāng)前63頁(yè),總共77頁(yè)。(2)BIOS顯示中斷有關(guān)顯示輸出的DOS功能調(diào)用不多,而BIOS調(diào)用(INT10H)的功能很強(qiáng),主要包括設(shè)置顯示方式,清屏,設(shè)置光標(biāo)大小和位置,顯示字符,顯示圖形等.設(shè)置顯示方式清屏幕置光標(biāo)的位置顯示功能的調(diào)用當(dāng)前64頁(yè),總共77頁(yè)。(1)設(shè)置顯示方式入口參數(shù)

AL=顯示方式值

0040×25黑白文本方式

0140×25彩色文本方式

0280×25黑白文本方式

0380×25彩色文本方式………………….功能號(hào)

AH=00H類型號(hào)

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

MOVAL,03HMOVAH,00

INT10H當(dāng)前65頁(yè),總共77頁(yè)。(2)清屏、清窗口功能入口參數(shù)

AL=0CH=窗口左上角行號(hào)

CL=窗口左上角列號(hào)

DH=窗口右下角行號(hào)

DL=窗口右下角列號(hào)

BH=窗口屬性功能號(hào)

AH=06H

或AH=07H類型號(hào)

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

DH=行號(hào)

DL=列號(hào)

BH=頁(yè)號(hào)

功能號(hào)

AH=02H

類型號(hào)

10H

出口參數(shù)無

實(shí)現(xiàn)功能將光標(biāo)設(shè)置在指定的位置當(dāng)前69頁(yè),總共77頁(yè)。例將光標(biāo)設(shè)置在2行5列的位置MOVDH,2MOVDL,5MOVBH,0MOVAH,2INT10H~~~~~~~~~~~~~~~~0列0行79列24行5列1列1行2行當(dāng)前70頁(yè),總共77頁(yè)。(4)字符的顯示(單色顯示器字符的顯示)入口參數(shù)

BH=頁(yè)號(hào)

AL=字符的ASCII碼

BL=字符的屬性功能號(hào)

AH=09H類型號(hào)

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

BH=頁(yè)號(hào)

AL=字符的ASCII碼功能號(hào)

AH=0AH類型號(hào)

10H出口參數(shù)無實(shí)現(xiàn)功能在光標(biāo)位置上顯示字符當(dāng)前71頁(yè),總共77頁(yè)。DATASEGMENTATRIDB5EH,94H,5EH,94H,5EH,94H,5EH,94H,5EH,94HDATAENDSSTACKSEGMENTPARASTACK'STACK'DB200DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AX

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

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

MOVDI,10;顯示10個(gè)字符

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

MOVDL,23H

溫馨提示

  • 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)論