匯編語(yǔ)言的基本語(yǔ)法_第1頁(yè)
匯編語(yǔ)言的基本語(yǔ)法_第2頁(yè)
匯編語(yǔ)言的基本語(yǔ)法_第3頁(yè)
匯編語(yǔ)言的基本語(yǔ)法_第4頁(yè)
匯編語(yǔ)言的基本語(yǔ)法_第5頁(yè)
已閱讀5頁(yè),還剩47頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

匯編語(yǔ)言的基本語(yǔ)法第1頁(yè),共52頁(yè),2023年,2月20日,星期日5.1匯編語(yǔ)言的特點(diǎn)1、機(jī)器指令:計(jì)算機(jī)能識(shí)別的代碼,機(jī)器指令是由二進(jìn)制數(shù)組成的。例如: PUSHAX

機(jī)器指令為: 010100002、匯編語(yǔ)言:匯編語(yǔ)言是一種符號(hào)語(yǔ)言,用助記符表示操作碼,用符號(hào)或符號(hào)地址表示操作數(shù)或操作數(shù)地址,它與機(jī)器指令是一一對(duì)應(yīng)的。3、高級(jí)語(yǔ)言:面向過(guò)程(如C,FORTRAN)或?qū)ο?如C++,Java)的語(yǔ)言,不依賴(lài)于機(jī)器,因而有很好的通用性和可移植性.第2頁(yè),共52頁(yè),2023年,2月20日,星期日

匯編語(yǔ)言與高級(jí)語(yǔ)言的比較特征匯編語(yǔ)言高級(jí)語(yǔ)言目標(biāo)程序運(yùn)行時(shí)間短長(zhǎng)程序運(yùn)行時(shí)占用的存儲(chǔ)空間小大直接訪(fǎng)問(wèn)硬件的能力強(qiáng)弱程序可讀性和可維護(hù)性差強(qiáng)程序開(kāi)發(fā)的復(fù)雜程序高低程序的可移植性差強(qiáng)對(duì)硬件環(huán)境和軟件的兼容性差強(qiáng)第3頁(yè),共52頁(yè),2023年,2月20日,星期日采用匯編語(yǔ)言進(jìn)行程序設(shè)計(jì)的優(yōu)點(diǎn):可充分利用機(jī)器的硬件功能和結(jié)構(gòu)特點(diǎn),加快程序的執(zhí)行速度,減少目標(biāo)程序所占用的存儲(chǔ)空間。常用來(lái)編寫(xiě)實(shí)時(shí)控制程序、實(shí)時(shí)通信程序,有時(shí)也用來(lái)編制某些系統(tǒng)軟件程序。第4頁(yè),共52頁(yè),2023年,2月20日,星期日

文件名.ASM文件名.OBJ文件名.EXE匯編語(yǔ)言源程序

匯編目標(biāo)程序連接執(zhí)行/調(diào)試程序編輯程序EDIT.EXE匯編程序MASM.EXE連接程序LINK.EXE匯編語(yǔ)言程序的開(kāi)發(fā)過(guò)程ML文件名.ASM

第5頁(yè),共52頁(yè),2023年,2月20日,星期日

DATA

SEGMENT

;數(shù)據(jù)段

NUMDW0011101000000111BNOTESDB‘Theresultis:’,’$’DATA

ENDSSTACKSEGMENTSTACKSTADB50DUP(?)TOPEQULENGTHSTASTACKENDS第6頁(yè),共52頁(yè),2023年,2月20日,星期日CODE

SEGMENT

;代碼段

ASSUMECS:CODE,DS:DATA

BEGIN:MOVAX,DATAMOVDS,AXMOVDX,OFFSETNOTES;顯示提示信息

MOVAH,9HINT21HMOVBX,NUM;將數(shù)裝入BXMOVCH,4;CH作循環(huán)計(jì)數(shù)器ROTATE:DISPLAY:

MOVCL,4

;CL中放移位位數(shù)

MOVDL,AL;顯示16進(jìn)制數(shù)

ROLBX,CLMOVAH,2MOVAL,BLINT21HANDAL,0FH;AL中為一位16進(jìn)制數(shù)

DECCHADDAL,30H;轉(zhuǎn)換為ASCII碼值

JNZROTATECMPAL,’9’

;是0~9的數(shù)碼?

MOVAX,4C00H;返回DOSJLDISPLAYINT21HADDAL,07H;在A~F之間

CODE

ENDS

;代碼段結(jié)束

ENDBEGIN;模塊結(jié)束第7頁(yè),共52頁(yè),2023年,2月20日,星期日2、結(jié)構(gòu)DATASEGMENT

<數(shù)據(jù)定義偽指令序列>DATAENDSSTACKSEGMENTSTACK<數(shù)據(jù)定義偽指令序列>STACKENDSCODESEGMENT<程序段>CODEENDSENDS源程序由若干條語(yǔ)句組成程序由最多4個(gè)段組成,數(shù)據(jù)段、堆棧段、代碼段、附加段每個(gè)段有一名字,并以符合SEGMENT表示段的開(kāi)始,以END作為段的結(jié)束符號(hào)第8頁(yè),共52頁(yè),2023年,2月20日,星期日5.2匯編語(yǔ)言程序結(jié)構(gòu)和基本語(yǔ)法匯編語(yǔ)言的基本語(yǔ)法:詞法和句法一、詞法

字符集、標(biāo)識(shí)符、保留字、數(shù)的表示、運(yùn)算符和表達(dá)式1、字符集英文字符:A-Z,a-z;數(shù)字字符:0-9算術(shù)運(yùn)算符號(hào):+-*/關(guān)系運(yùn)算符號(hào):<=>分隔符:,:;()[]‘TAB控制符:CR、LF、FF其他字符:如&_?.$@!%第9頁(yè),共52頁(yè),2023年,2月20日,星期日2、標(biāo)識(shí)符

常用作變量名、常量名、記錄名、和段名由1-31個(gè)字符組成,打頭的字符必須是字母、?、@或-從第二個(gè)字符開(kāi)始,組成標(biāo)識(shí)符的字符可以是字母、數(shù)字、?、@或-,不能使用其他符號(hào)3、保留字指令助記符、偽指令、寄存器名、表達(dá)式運(yùn)算符及屬性操作符,不能當(dāng)做標(biāo)識(shí)符使用第10頁(yè),共52頁(yè),2023年,2月20日,星期日4、數(shù)的表示

所有常數(shù)必須是整數(shù)默認(rèn)十進(jìn)制;表示非十進(jìn)制數(shù),要加后綴B、H或Q;十六進(jìn)制以字母開(kāi)頭必須在前面加數(shù)字0,如十六進(jìn)制數(shù)AF應(yīng)表示為0AFH;5、表達(dá)式和運(yùn)算符表達(dá)式由運(yùn)算符和操作數(shù)組成,可分為數(shù)值表達(dá)式和地址表達(dá)式。運(yùn)算符可分為算術(shù)運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符、分析運(yùn)算符、綜合運(yùn)算符、分離運(yùn)算符等操作數(shù)可以是常數(shù)、變量名、或標(biāo)號(hào)第11頁(yè),共52頁(yè),2023年,2月20日,星期日①算術(shù)運(yùn)算符

+-*/MODSHLSHR對(duì)操作數(shù)進(jìn)行算術(shù)運(yùn)算,運(yùn)算對(duì)象和結(jié)果都必須為整數(shù)MOVAL,00011010BSHL2SHL為移位運(yùn)算符SHLAL,1SHL為移位指令助記符②邏輯運(yùn)算符NOT、AND、OR、XOR對(duì)操作數(shù)按位進(jìn)行邏輯運(yùn)算MOVAL,NOT10100101B邏輯運(yùn)算符NOTAL邏輯運(yùn)算指令③關(guān)系運(yùn)算符對(duì)操作數(shù)按位進(jìn)行關(guān)系運(yùn)算,條件滿(mǎn)足結(jié)果全為1,否則全為0MOVAX,5EQ101B等效于MOVAX,0FFFFHMOVBH,10HGT16MOVBH,00HMOVBL,0FFHEQ255MOVBL,0FFHMULAL64HGE100MULAL,0FFH第12頁(yè),共52頁(yè),2023年,2月20日,星期日④分析運(yùn)算符SEG

返回變量或標(biāo)號(hào)所在段的段基址

MOVAX,SEGVAR1OFFSET

返回變量或標(biāo)號(hào)的段內(nèi)偏移基址

MOVSI,OFFSETVAR1LENGTH

加在變量之前,返回變量所包含的單元數(shù)

MOVBL,LENGTHVAR1TYPE

返回變量或標(biāo)號(hào)的類(lèi)型屬性

MOVAX,TYPEVAR1SIZE

返回變量所占的總字節(jié)數(shù),等于LENGTH和TYPE兩個(gè)運(yùn)算符返回值的乘積

MOVCH,SIZEVAR1CH第13頁(yè),共52頁(yè),2023年,2月20日,星期日LENGTH,求為符號(hào)名分配的項(xiàng)數(shù)。

格式:LENGTH﹤符號(hào)名﹥ 這里為符號(hào)名定義的數(shù)據(jù)項(xiàng)必須是用重復(fù)格式DUP() 定義的。而對(duì)于其他情況則回送1。例:K2DW10DUP(?)則LENGTHK2=10 TYPEK2=2 SIZEK2=20

例:AARRDW2,4,6

則LENGTHAARR=1,TYPEAARR=2SIZEAARR=2可以看出:

SIZE<符號(hào)名>=(LENGTH<符號(hào)名>)*(TYPE﹤符號(hào)名﹥)第14頁(yè),共52頁(yè),2023年,2月20日,星期日⑤綜合運(yùn)算符PTR規(guī)定內(nèi)存單元的類(lèi)型屬性

格式:類(lèi)型PTR符號(hào)名

MOVBYTEPTR[1000H],0MOVWORDPTR[1000H],0THIS改變存儲(chǔ)區(qū)的類(lèi)型屬性

格式:符號(hào)名EQUTHIS類(lèi)型VARBEQUTHISBYTEVARWDW20HDUP(0)第15頁(yè),共52頁(yè),2023年,2月20日,星期日⑥分離運(yùn)算符HIGH、LOWMOVAL,HIGH1234HAL=12MOVAL,LOW1234HAL=34⑦其他運(yùn)算符SHORT短轉(zhuǎn)移說(shuō)明運(yùn)算符

()運(yùn)算符改變運(yùn)算優(yōu)先級(jí)[]運(yùn)算符表示間接尋址:段跨越前綴表示后跟的操作數(shù)由指定段寄存器提供段基址第16頁(yè),共52頁(yè),2023年,2月20日,星期日1、語(yǔ)句①指令語(yǔ)句

[標(biāo)號(hào):][前綴]指令助記符

[操作數(shù)][;注釋]標(biāo)號(hào):表示指令的存儲(chǔ)器地址,供轉(zhuǎn)移指令、調(diào)用指令和循環(huán)指令作為操作數(shù)使用;

MOVCX,2

;設(shè)置CX計(jì)數(shù)值

L:DECCX

;計(jì)數(shù)值減1

JZL

;若計(jì)數(shù)值不為零則跳轉(zhuǎn)到L執(zhí)行前綴:與其他指令配合使用,段跨越前綴、重復(fù)前綴、總線(xiàn)封鎖前綴、操縱尺寸和尋址尺寸等;

MOVAX,ES:[2000H]

段跨越前綴

REP

MOVSB

重復(fù)前綴操作數(shù):指令要處理的數(shù)據(jù),可分為常數(shù)、常量、變量和標(biāo)號(hào);注釋?zhuān)褐噶畹墓δ苷f(shuō)明,以;開(kāi)始的字符串,不影響程序執(zhí)行二、句法(語(yǔ)句和結(jié)構(gòu))第17頁(yè),共52頁(yè),2023年,2月20日,星期日常數(shù):編程時(shí)已經(jīng)確定其值,程序運(yùn)行期間不會(huì)改變其值的數(shù)據(jù)對(duì)象;常量:用符號(hào)表示的常數(shù),其值在程序執(zhí)行過(guò)程中保持不變;變量:編程時(shí)確定其初始值,程序運(yùn)行期間可修改其值的數(shù)據(jù)對(duì)象。第18頁(yè),共52頁(yè),2023年,2月20日,星期日②偽指令語(yǔ)句[名字]偽操作命令[操作數(shù)][;注釋]名字:可以是符號(hào)名、常量名、變量名、過(guò)程名和段名;偽操作命令:主要包括符號(hào)定義、變量定義、程序分段定義、過(guò)程定義、模塊定義、宏定義、段簡(jiǎn)化定義和內(nèi)存模式定義等命令;操作數(shù):隨偽操作命令的不同而不同。第19頁(yè),共52頁(yè),2023年,2月20日,星期日1、符號(hào)定義語(yǔ)句①等值語(yǔ)句EQU語(yǔ)句格式:符號(hào)EQU

表達(dá)式把EQU右邊表達(dá)式的值或表達(dá)式賦給左邊的符號(hào)

例:CONTEQU10NUMEQU89*3+5-9②等號(hào)語(yǔ)句=語(yǔ)句格式:符號(hào)=

表達(dá)式功能同EQU一樣,但等號(hào)語(yǔ)句可以多次重新定義同一符號(hào)

NUM=10HNUM=NUM+20H第20頁(yè),共52頁(yè),2023年,2月20日,星期日③取消語(yǔ)句PURGE語(yǔ)句格式:

PURGE

符號(hào)名1[,符號(hào)名2[,…]]取消被EQU語(yǔ)句定義的符號(hào)名。

例:

CONTEQU10PURGECONTCONTEQU12第21頁(yè),共52頁(yè),2023年,2月20日,星期日2、數(shù)據(jù)定義語(yǔ)句為數(shù)據(jù)項(xiàng)分配存儲(chǔ)單元格式1:

[變量名]偽指令名表達(dá)式1,表達(dá)式2,‥‥

這里偽指令可為DB,DW,DD,表達(dá)式有以下幾種情況:①數(shù)值表達(dá)式例:DA_BYTEDB50H,50,0caHDA_WORDDW0a3f1H,498dH A1DD12345H;Memory:45H,23H,01H,00H

②?表達(dá)式,不帶引號(hào)的?表示可預(yù)置任何內(nèi)容例:DA_BDB?,?;要求分配兩個(gè)字節(jié)單元

DA_WDW?,?;要求分配兩個(gè)字單元

③字符串表達(dá)式數(shù)據(jù)項(xiàng)可以寫(xiě)成字符串形式,但只能用DB、DW、DD定 義,而且DW、DD語(yǔ)句定義的串只允許包含兩個(gè)字符。第22頁(yè),共52頁(yè),2023年,2月20日,星期日

例:S1 DB‘ABCDEF’S2 DW‘AB’,‘CD’,‘EF’S3 DD‘AB’,‘CD’

這幾個(gè)變量在存儲(chǔ)器中存放情況如下:

S141HS242HS342H42H41H41H43H44H00H44H43H00H45H46H44H46H45H43H00H00H

注意:定義多于兩個(gè)以上字符的字符串時(shí),只能使用DB偽指令,不能使用DW和DD等偽指令。第23頁(yè),共52頁(yè),2023年,2月20日,星期日格式2:

[變量名]偽指令名表達(dá)式1DUP(表達(dá)式2)用于定義重復(fù)的數(shù)據(jù)或分配一數(shù)據(jù)塊空間. 例:

D_B1

DB20HDUP(?);保留20H個(gè)字節(jié)

D_B2DB10HDUP(‘ABCD’);字符串‘ABCD’;重復(fù)10H次

D_W1DW10HDUP(4);字4重復(fù)10H次

第24頁(yè),共52頁(yè),2023年,2月20日,星期日3、段定義語(yǔ)句①段開(kāi)始語(yǔ)句SEGMENT和段結(jié)束語(yǔ)句ENDS段定義格式:

段名SEGMENT[定位類(lèi)型][組合類(lèi)型]’類(lèi)別’

段名ENDS定位類(lèi)型:用來(lái)規(guī)定段起始邊界的要求,可以為以下四種,缺省為PARA)PAGE:16位段地址的最低8位必須為0,即從一頁(yè)的起點(diǎn)開(kāi)始;PARA:16位段地址的最低4位必須為0,即從一段的起點(diǎn)開(kāi)始;WORD:16位段地址的最低1位必須為0,即從偶地址開(kāi)始;BYTE:16位段地址可以為任意值,即段可以從任何字節(jié)開(kāi)始。第25頁(yè),共52頁(yè),2023年,2月20日,星期日組合類(lèi)型告訴連接程序本段與其他段的關(guān)系

NONE

本段與其他段邏輯上不發(fā)生關(guān)系,每段有獨(dú)立段基地址;

PUBLIC

將本段與用PUBLIC說(shuō)明的同名同類(lèi)別的其他段連接成一個(gè)段,所有這些段用同一個(gè)段基地址;

COMMON同名同類(lèi)段相重疊,段的長(zhǎng)度為其中最長(zhǎng)段的長(zhǎng)度

STACK表示本段是堆棧段,連接方式同PUBLICMEMORY該段在連接時(shí)被放在所有段的最后

AT把本段裝在表達(dá)式的值所指定的段基地址處類(lèi)別

第26頁(yè),共52頁(yè),2023年,2月20日,星期日②段分配語(yǔ)句ASSUMECPU對(duì)存儲(chǔ)器的訪(fǎng)問(wèn)必須通過(guò)一個(gè)段寄存器來(lái)提供段基址,ASSUME用來(lái)建立段與段寄存器之間的聯(lián)系。格式:ASSUME段寄存器名:段名[,段寄存器名:段名]DATASEGMENT

<數(shù)據(jù)定義偽指令序列>DATAENDSSTACKSEGMENTSTACK<數(shù)據(jù)定義偽指令序列>STACKENDSCODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK…CODEENDSEND第27頁(yè),共52頁(yè),2023年,2月20日,星期日DATA1SEGMENTVAR1DB12HDATA1ENDSDATA2SEGMENTVAR2DB34HDATA2ENDSCODESEGMENTVAR3DB56HASSUMECS:CODE,DS:DATA1START:…INCVAR1INCVAR2INCVAR3…CODEENDSENDSTART例:第28頁(yè),共52頁(yè),2023年,2月20日,星期日4、過(guò)程定義語(yǔ)句在程序設(shè)計(jì)中,常將多次重復(fù)使用的具有一定功能的程序段組成一個(gè)子程序,稱(chēng)為過(guò)程,可用CALL調(diào)用,RET返回。定義格式:

過(guò)程名PROC[NEAR/FAR]…

過(guò)程名ENDP

NEAR過(guò)程只允許段內(nèi)調(diào)用,F(xiàn)AR允許段間調(diào)用第29頁(yè),共52頁(yè),2023年,2月20日,星期日5.宏指令宏定義語(yǔ)句格式:

宏指令名MACRO[形式參數(shù)1,形式參數(shù)2…]

…ENDM宏調(diào)用:宏指令名[實(shí)參數(shù),實(shí)參數(shù),…]SHIFT

MACROXMOVCL,XSALAL,CLENDMSHIFT6宏擴(kuò)展:

+MOVCL,6+SALAL,CL第30頁(yè),共52頁(yè),2023年,2月20日,星期日5.4匯編語(yǔ)言程序的上機(jī)過(guò)程匯編語(yǔ)言程序上機(jī)運(yùn)行的過(guò)程有以下幾個(gè)步驟:(1)用編輯程序建立.ASM源文件;(2)用宏匯編程序MASM等匯編源文件,生成.OBJ目標(biāo)碼文件;(3)用連接程序LINK對(duì)目標(biāo)碼文件等模塊進(jìn)行連接,生成.EXE可執(zhí)行文件;(4)

鍵入可執(zhí)行文件名執(zhí)行該文件,分析執(zhí)行結(jié)果;(5)用DEBUG等工具調(diào)試.ASM源程序,再匯編、連接、運(yùn)行,直到得出正確結(jié)果。 為此,除了DOS系統(tǒng)軟件和編輯程序外,還需要備置如下程序:匯編程序

masm.exe或asm.exe或tasm.exe等連接程序

link.exe或tlink.exe等匯編調(diào)試程序

等交叉引用程序

cref.exe符號(hào)索引文件處理程序等第31頁(yè),共52頁(yè),2023年,2月20日,星期日1、建立源文件可使用任何一種能建立ASCII文本文件的編輯程序來(lái)建立匯編源程序文件,擴(kuò)展名為.ASM。在使用各種文字編輯程序時(shí),被編輯的源文件(.ASM)中不應(yīng)有排版格式控制符。第32頁(yè),共52頁(yè),2023年,2月20日,星期日2、匯編編輯生成的.ASM源程序文件,須經(jīng)匯編程序進(jìn)行匯編,生成二進(jìn)制代碼的目標(biāo)文件。常見(jiàn)的匯編程序有行匯編和宏匯編兩種類(lèi)型。

行匯編——常用DEBUG.EXE的A命令,生成的目標(biāo)代碼可作為.COM文件存盤(pán),也可在DEBUG環(huán)境下直接運(yùn)行。

行匯編簡(jiǎn)單直觀,生成的目標(biāo)程序所占用的內(nèi)存空間最小;但匯編按絕對(duì)地址進(jìn)行,長(zhǎng)度限制在64KB范圍內(nèi),目標(biāo)程序沒(méi)有與其它程序模塊連接的信息,要由用戶(hù)或安裝程序?qū)崿F(xiàn)各個(gè)目標(biāo)程序在內(nèi)存中的地址分配,這樣既可能使各程序之間產(chǎn)生太大的空隙(造成浪費(fèi))、也可能造成各程序的內(nèi)存存儲(chǔ)沖突。

宏匯編MASM——對(duì)匯編語(yǔ)言源程序*.ASM進(jìn)行匯編常用方法。第33頁(yè),共52頁(yè),2023年,2月20日,星期日DEBUG的使用方法1.DEBUG的運(yùn)行2.DEBUG的主要命令D,顯示內(nèi)存單元內(nèi)容;U,反匯編命令;R,顯示與修改寄存器內(nèi)容;E,修改內(nèi)存單元內(nèi)容;A,匯編命令;T、P,單步執(zhí)行指令;G,連續(xù)執(zhí)行指令;N,指定裝入文件名或?qū)懭胛募?;L,裝入N指定的文件;W,將指定內(nèi)容寫(xiě)入N指定的文件;Q,退出DEBUG程序,返回操作系統(tǒng)狀態(tài)。第34頁(yè),共52頁(yè),2023年,2月20日,星期日5.3ROMBIOS中斷調(diào)用

和DOS系統(tǒng)功能調(diào)用5.3.1ROMBIOS中斷調(diào)用BIOS(BasicInputOutputSystem)基本輸入輸出系統(tǒng)

是一組固化到計(jì)算機(jī)內(nèi)主板ROM芯片上的程序,它保存著計(jì)算機(jī)最重要的基本輸入輸出的程序、系統(tǒng)設(shè)置信息、開(kāi)機(jī)后自檢程序和系統(tǒng)自啟動(dòng)程序,提供最低級(jí)、最直接的硬件控制,是硬件與軟件之間的接口。

第35頁(yè),共52頁(yè),2023年,2月20日,星期日BIOS的功能:系統(tǒng)自檢及初始化

對(duì)硬件設(shè)備進(jìn)行自檢;對(duì)外部設(shè)備初始化;設(shè)置中斷向量;引導(dǎo)操作系統(tǒng)等;程序服務(wù)處理

為操作系統(tǒng)和應(yīng)用程序提供與I/O有關(guān)的系統(tǒng)服務(wù)。BIOS直接與I/O設(shè)備打交道,通過(guò)端口與I/O設(shè)備傳送數(shù)據(jù),使應(yīng)用程序脫離具體的硬件操作。硬件中斷處理

提供硬件中斷服務(wù)程序BIOS的服務(wù)功能是通過(guò)調(diào)用中斷服務(wù)程序來(lái)實(shí)現(xiàn)的

第36頁(yè),共52頁(yè),2023年,2月20日,星期日中斷:CPU執(zhí)行程序的過(guò)程中,由于出現(xiàn)了某個(gè)事件,CPU暫停當(dāng)前程序,轉(zhuǎn)而去執(zhí)行其他程序,處理完后,返回被暫停的程序繼續(xù)執(zhí)行,這個(gè)過(guò)程稱(chēng)為中斷,引起中斷的事件稱(chēng)為中斷源。處理該事件的程序稱(chēng)中斷服務(wù)程序。中斷號(hào):8086系統(tǒng)允許256種中斷,每種中斷對(duì)應(yīng)0~255之間的一個(gè)數(shù),稱(chēng)為中斷號(hào)。每種中斷都對(duì)應(yīng)于一種中斷服務(wù),在實(shí)模式下,將中斷服務(wù)程序的入口地址稱(chēng)為中斷向量,存放256個(gè)中斷向量的內(nèi)存區(qū)域稱(chēng)為中斷向量表第37頁(yè),共52頁(yè),2023年,2月20日,星期日BIOS中斷調(diào)用:

BIOS由許多功能模塊組成,每個(gè)功能模塊的入口地址都在中斷向量表中。通過(guò)軟件中斷指令“INTn”可以直接調(diào)用這些模塊。CPU響應(yīng)中斷后,把控制權(quán)交給指定的BIOS功能模塊,由它提供相應(yīng)的服務(wù)?;痉椒ǎ孩賹⑺{(diào)用功能的功能號(hào)送入AH寄存器;②根據(jù)所要調(diào)用功能的規(guī)定設(shè)置入口參數(shù);③執(zhí)行“INT中斷號(hào)”指令,進(jìn)入相應(yīng)的服務(wù)子程序;④中斷服務(wù)子程序執(zhí)行完畢后,可按規(guī)定取得出口參數(shù)。第38頁(yè),共52頁(yè),2023年,2月20日,星期日1.INT10H顯示輸出INT10H包含了與顯示器有關(guān)的功能,可以用來(lái)設(shè)置顯示方式、光標(biāo)大小和位置、顯示字符等。①AH=0AH,顯示字符入口參數(shù);AL=預(yù)顯示字符的ASCII碼功能:在當(dāng)前光標(biāo)位置顯示AL中的字符,光標(biāo)位置不變②AH=0EH,顯示字符功能:類(lèi)似0AH功能,但顯示字符后光標(biāo)隨之移動(dòng),并可解釋回車(chē)、換行和退格等控制符第39頁(yè),共52頁(yè),2023年,2月20日,星期日2.INT16H鍵盤(pán)輸入①AH=0,從鍵盤(pán)讀一鍵出口參數(shù):AL=ASCII碼,AH=掃描碼功能:從鍵盤(pán)讀入一個(gè)鍵返回,按鍵不顯示在屏幕上。對(duì)于無(wú)相應(yīng)ASCII碼的鍵,如功能鍵等,AL返回0②AH=1,判斷是否有鍵可讀出口參數(shù):若ZF=0,則有鍵可讀,AL=ASCII碼,AH=掃描碼;否則,無(wú)鍵可讀;②AH=2,返回變換鍵的當(dāng)前狀態(tài)出口參數(shù):AL=變換鍵狀態(tài)變換鍵指Ctrl,Alt,Numlock等;第40頁(yè),共52頁(yè),2023年,2月20日,星期日例:讀鍵盤(pán)輸入,顯示其中的ASCII字符,按回車(chē)鍵退出。CODESEGMENTSTART:READNEXT:MOVAH,0INT16HCMPAL,ODHJEEXITCMPAL,0JZREADNEXTEXIT:MOVAH,4CHMOVAH,0EHINT21HINT10HCODEENDSJMPREADNEXTENDSTART第41頁(yè),共52頁(yè),2023年,2月20日,星期日5.3.2DOS功能調(diào)用前面一些程序的運(yùn)行結(jié)果,或是保留在寄存器中,或是保留在存儲(chǔ)器中,不能方便直觀的看到。要了解運(yùn)算的結(jié)果,應(yīng)在顯示器上輸出,方便的方法是調(diào)用操作系統(tǒng)中的I/O子程序,操作系統(tǒng)的核心是許多有關(guān)I/O驅(qū)動(dòng),磁盤(pán)讀寫(xiě)以及文件管理等子程序。這些子程序都編了號(hào),調(diào)用時(shí)把子程序號(hào)(或稱(chēng)系統(tǒng)功能調(diào)用號(hào))送到INT21H。通常按照如下4個(gè)步驟進(jìn)行:⑴在AH寄存器中設(shè)置系統(tǒng)功能調(diào)用號(hào)⑵在指定寄存器中設(shè)置入口參數(shù)⑶執(zhí)行指令I(lǐng)NT21H實(shí)現(xiàn)中斷服務(wù)程序的功能調(diào)用⑷根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況第42頁(yè),共52頁(yè),2023年,2月20日,星期日1、鍵盤(pán)輸入字符調(diào)用格式:MOVAH,01HINT21H功能:等待從鍵盤(pán)輸入一個(gè)字符并將輸入字符的ASCII碼送入寄存器AL中,同時(shí)在顯示器上顯示該字符。入口參數(shù):無(wú)出口參數(shù):AL=輸入的ASCII碼字符2、控制臺(tái)輸入調(diào)用格式:MOVAH,08HINT21H功能:與1號(hào)相似,但只從鍵盤(pán)上輸入而不顯示字符。入口參數(shù):無(wú)出口參數(shù):AL=輸入的ASCII碼字符第43頁(yè),共52頁(yè),2023年,2月20日,星期日DOS功能調(diào)用3.向顯示器輸出一個(gè)字符(2號(hào)功能調(diào)用) 功能號(hào):AH=02H入口參數(shù):DL=字符的ASCII碼功能:在顯示器當(dāng)前光標(biāo)位置顯示給定的字符,光標(biāo)右移一個(gè)字符位置。如按Ctrl-Break或Ctrl-C則退出例:在當(dāng)前顯示器光標(biāo)位置顯示一個(gè)問(wèn)號(hào)

movah,02h

;設(shè)置功能號(hào):ah←02h

movdl,'?'

;提供入口參數(shù):dl←'?'

int21h

;DOS功能調(diào)用:顯示第44頁(yè),共52頁(yè),2023年,2月20日,星期日DOS功能調(diào)用4.顯示字符串(9號(hào)功能調(diào)用) 功能號(hào):AH=09H入口參數(shù):

DS:DX=欲顯示字符串在主存中的首地址 字符串應(yīng)以$(24H)結(jié)束功能:在顯示器輸出指定的字符串

stringdb'Hello,Everybody!',0dh,0ah,'$‘

… movah,09h movdx,offsetstring int21h第45頁(yè),共52頁(yè),2023年,2月20日,星期日DOS功能調(diào)用5.從鍵盤(pán)輸入一個(gè)字符串(10號(hào)功能調(diào)用)功能號(hào):AH=0AH入口參數(shù):DS:DX=緩沖區(qū)首地址執(zhí)行該功能調(diào)用時(shí),用戶(hù)按鍵,最后用回車(chē)確認(rèn)緩沖區(qū)的定義:第1字節(jié)事先填入最多欲接收的字符個(gè)數(shù)(包括回車(chē)字符,可以是1~255)第2字節(jié)將存放實(shí)際輸入的字符個(gè)數(shù)(不包括回車(chē)符)第3字節(jié)開(kāi)始存放將輸入的字符串實(shí)際輸入的字符數(shù)多于定義數(shù)時(shí),多出的字符丟掉,且響鈴第46頁(yè),共52頁(yè),2023年,2月20日,星期日DOS功能調(diào)用例:Bufferdb81;定義緩沖區(qū)

;第1個(gè)字節(jié)填入可能輸入的最大字符數(shù)db0 ;存放實(shí)際輸入的字符數(shù)db81dup(0);存放輸入的字符串

...movdx,segbuffer;偽指令seg取得buffer的段地址movds,dx ;設(shè)置數(shù)據(jù)段DSmovdx,offsetbuffermovah,0ahint21h第47頁(yè),共52頁(yè),2023年,2月20日,星期日

4.文件管理系統(tǒng)調(diào)用:AH(功能號(hào))功能入口參數(shù)出口參數(shù)

3C建立文件DS:DX=ASCII串地址成功AX=文件代號(hào)

CX=文件屬性失敗AX=錯(cuò)誤碼

3D 打開(kāi)文件DS:DX=ASCII串地址成功AX=文件代號(hào)

AL=0讀,=1寫(xiě),=2讀寫(xiě)失敗AX=錯(cuò)誤碼

3E關(guān)閉文件BX=文件代號(hào)失敗AX=錯(cuò)誤碼

3F讀文件或設(shè)備DS:DX=數(shù)據(jù)緩沖區(qū)地址成功AX=實(shí)際讀入字?jǐn)?shù)

BX=文件代號(hào)AX=0已到文件尾

CX=讀取字節(jié)數(shù)讀錯(cuò)誤:AX=錯(cuò)誤碼

40寫(xiě)文件或設(shè)備DS:DX=數(shù)據(jù)緩沖區(qū)地址成功AX=實(shí)際寫(xiě)入字?jǐn)?shù)

BX=文件代號(hào)

CX=寫(xiě)入字節(jié)數(shù)寫(xiě)錯(cuò)誤:AX=錯(cuò)誤碼

41刪除文件DS:DX=ASCII串地址成功AX=00

溫馨提示

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

評(píng)論

0/150

提交評(píng)論