匯編語言語法和DOS功能調(diào)用_第1頁
匯編語言語法和DOS功能調(diào)用_第2頁
匯編語言語法和DOS功能調(diào)用_第3頁
匯編語言語法和DOS功能調(diào)用_第4頁
匯編語言語法和DOS功能調(diào)用_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第4章匯編語言語法和DOS功能調(diào)用4.1匯編語言程序的格式4.2匯編語言中的基本數(shù)據(jù)4.3偽指令語句4.4匯編語言中的表達(dá)式4.5指令語句4.6宏指令語句及其使用4.7DOS系統(tǒng)功能調(diào)用4.8習(xí)題例解4.9練習(xí)題4.1匯編語言程序的格式

例4-1試求小于100的所有非零偶數(shù),并把結(jié)果存入以BUFF開始的內(nèi)存區(qū)。

MY_DATASEGMENT ;定義數(shù)據(jù)段BUFFDB50DUP(?);設(shè)置緩沖區(qū)MY_DATAENDS ;定義數(shù)據(jù)段結(jié)束

MY_CODESEGMENT ;定義代碼段

ASSUMECS:MY_CODE, ;規(guī)定CS和DS的內(nèi)容

DS:MY_DATA

START:MOVAX,MY_DATA;

DS初始化為MY_DATA

MOVDS,AX

MOVAL,2;置循環(huán)初始值

LEABX,BUFF

LLP:MOV[BX],AL;循環(huán)體INCALINCALCMPAL,100;循環(huán)控制JNZLLP

INT20H;返回DOSMY_CODEENDS;代碼段結(jié)束

ENDSTART;整個(gè)程序結(jié)束匯編語言程序的格式可以歸結(jié)為以下幾點(diǎn):(1)段的結(jié)構(gòu)

段名1SEGMENT段名nSEGMENT

語句塊語句塊段名1

ENDS段名n

ENDS段名2SEGMENTEND標(biāo)號

語句塊段名2

ENDS┋

(2)語句的結(jié)構(gòu)3種基本語句類型:

指令語句

偽指令語句

宏指令語句語句一般有4個(gè)部分組成,即:標(biāo)號或名字

操作碼

操作數(shù);注釋標(biāo)號或名字:

這是一個(gè)任選部分,在語句之首4.2匯編語言中的基本數(shù)據(jù)1、標(biāo)識符標(biāo)識符--由程序員自由建立起來的,有特定意義的字符序列。標(biāo)識符的組成規(guī)則如下:①必須由字母、數(shù)字(0,…,9)及特殊符號(?,·

,@,-,$)組成,且必須以字母打頭。②字符總數(shù)限制在31個(gè)以內(nèi)。③不能使用屬于系統(tǒng)專用保留字(保留的字)。4.2匯編語言中的基本數(shù)據(jù)2、常數(shù)語句中出現(xiàn)的那些固定值,除了自身的值以外,沒有其它任何屬性。常數(shù)分為兩類(1)數(shù)值常數(shù):后綴B,Q,D或不用,H(2)字符串常數(shù):不超過255個(gè)如:D7S43、變量存放在存儲器單元中的操作數(shù),它的值是可以改變的,在程序中出現(xiàn)的是存儲器單元地址的符號,即與某一數(shù)據(jù)項(xiàng)第一字節(jié)相對應(yīng)的標(biāo)識符。變量的3個(gè)屬性:①段地址:變量所在段的段地址;②偏移地址:變量所在段內(nèi)的偏移地址;③類型:所定義的每個(gè)變量所占據(jù)的字節(jié)數(shù)。4、標(biāo)號可執(zhí)行指令語句地址的符號表示,即用標(biāo)識符來表示地址。標(biāo)號的3個(gè)屬性:①段地址:與標(biāo)號對應(yīng)的指令首字節(jié)所在的段地址。②偏移地址:與標(biāo)號對應(yīng)的指令首字節(jié)所在的偏移地址。③類型:標(biāo)號的類型屬性有兩種:NEAR和FAR類型。4.3偽指令語句偽指令語句可分為以下幾種類型:①數(shù)據(jù)定義偽指令語句②標(biāo)識符賦值與解除偽指令語句③段定義偽指令語句④過程定義偽指令語句⑤程序開始與結(jié)束偽指令語句⑥方式定義偽指令語句⑦結(jié)構(gòu)定義偽指令語句⑧分組偽指令語句⑨其它偽指令語句1、數(shù)據(jù)定義偽指令語句五條:DB、DW、DD、DQ和DT,分別用來定義字節(jié)、字、雙字、8字節(jié)和10字節(jié)。指令格式:

變量名助記符操作數(shù)1,操作數(shù)2,……操作數(shù)n

;注釋

變量名助記符nDUP(操作數(shù)1,操作數(shù)2,……操作數(shù)n)

;注釋例4-2操作數(shù)是常數(shù)、表達(dá)式、字符串?dāng)?shù)據(jù)的定義

DATA1DB15H,25H DATA2DW9988H,56HDATA3DD2*40H,0AABBHDATA4DB‘HELLO’15H25H88H99H56H00H80H00H00H00HBBHAAH00H00H48H45H4CH4CH4FHDATA1DATA2DATA3DATA4例4-3操作數(shù)用“?”定義不確定值的變量,用DUP來定義重復(fù)變量,不確定值的變量一般用作保留存儲空間,以便存放運(yùn)算結(jié)果。

DATA1DB?

DATA2DW0D55H,?

DATA3DB5DUP(0)

DATA4DW10DUP(?)

DATA5DB4DUP(1,2DUP(20))圖4-2例4-3的匯編結(jié)果?55H0DH00H00H00H00H00H??┇┇??01H14H14HDATA1DATA2DATA3DATA4DATA5重復(fù)4次,共12個(gè)字節(jié)共20個(gè)字節(jié)??2、標(biāo)識符賦值與解除偽指令語句共有4條:等值偽指令語句EQU

等號偽指令語句“=”

解除偽指令語句PURGE

別名定義偽指令語句LABEL(1)等值偽指令EQU語句指令格式:標(biāo)識符EQU操作數(shù)

例如:DATA

EQU100DATA1EQU

DATA+2CIEQUADD(2)等號偽指令語句“=”指令格式:標(biāo)識符=操作數(shù)例如:DATA=100DATA1=DATA+10SOURCE=BX+SIMOVAX,[SOURCE]SOURCE=BXMOVCX,[SOURCE]

(3)解除偽指令語句PURGE指令格式:PURGE標(biāo)識符1,標(biāo)識符2,…標(biāo)識符n功能:用該指令解除標(biāo)識符,以后可用EQU重新定義(4)別名定義偽指令語句格式:別名LABEL類型屬性LABEL,偽指令助記符,不可缺省。功能:給下一個(gè)變量或標(biāo)號取另一個(gè)名字,重新定義類型,靈活

3、段定義偽指令語句(1)段結(jié)構(gòu)定義偽指令語句SEGMENT…ENDS

指令格式:段名SEGMENT定位類型組合類型‘分類名’

邏輯段內(nèi)容段名ENDS

功能:將一個(gè)邏輯段的內(nèi)容定義成一個(gè)整體。參數(shù):4種定位類型:PARA、BYTE、WORD和PAGE6種組合類型:NONE、PUBLIC、COMMON、AT、STACK和MEMORY

類別名:可省略,不超過40個(gè)字符,將所有分類名相同的邏輯段組成一個(gè)段組。(2)段分配偽指令語句指令格式:ASSUMECS:段名,DS:段名,SS:段名,ES:段名功能:定義當(dāng)前有效的4個(gè)邏輯段,指明段和段寄存器的關(guān)系,并把代碼段的段基址裝入CSASSUMEES:NOTHING取消已經(jīng)由ASSUME指定的段寄存器4、過程(子程序)定義偽指令語句指令格式:過程名PROC

屬性過程內(nèi)容

RET

過程名ENDP功能:定義一個(gè)在主程序中可以用CALL指令調(diào)用的過程。

CALL過程名5、程序開始與結(jié)束偽指令語句共有4條偽指令語句:NAME、TITLE、ORG和END。(1)目標(biāo)模塊命名偽指令語句格式:NAME程序名;定義一個(gè)程序名,程序每一頁開頭輸出

TITLE文本名;功能:為源程序目標(biāo)模塊賦一個(gè)程序名。(2)定位偽指令語句格式:ORG

表達(dá)式功能:下一條語句的起始偏移位置ORG$+6(3)程序結(jié)束偽指令語句格式:END

標(biāo)號名(起始地址)6、方式定義偽指令語句匯編語言有兩種操作方式:8086和80386格式:.8086默認(rèn)的.386使用32位寄存器必須加功能:定義匯編程序的操作方式7、結(jié)構(gòu)定義偽指令語句有三條語句:結(jié)構(gòu)定義偽指令,結(jié)構(gòu)存儲分配和預(yù)置偽指令及 結(jié)構(gòu)使用偽指令。(1)結(jié)構(gòu)定義偽指令語句格式:結(jié)構(gòu)名STRUC

數(shù)據(jù)變量序列;為DB、DW等;結(jié)構(gòu)名ENDS例4-9定義一個(gè)數(shù)據(jù)表格TAB的結(jié)構(gòu)

TSTRUSTRUCDA1DB‘SXYZ’DA2DW?DA3DWSEGLP1DA4DW2DUP(3)DA5DW5678H,1234H

TSTRUENDS只定義,匯編時(shí)不產(chǎn)生目標(biāo)代碼,不分配空間

字符串、簡單變量、多重變量(2)結(jié)構(gòu)存儲分配和預(yù)置偽指令語句格式:結(jié)構(gòu)變量名結(jié)構(gòu)名<元素值,元素值…>結(jié)構(gòu)變量名結(jié)構(gòu)名

NDUP(<元素值,元素值…>)例:對例4-9中的TAB結(jié)構(gòu)進(jìn)行存儲空間分配和預(yù)置,形成4個(gè)結(jié)構(gòu)變量。

DATA1TSTRU<>

DATA2

TSTRU<’FROM’>DATA3

TSTRU<,7FH,SEGLLL>

DATA4TSTRU5DUP(<‘7890’,11H>)

連續(xù)預(yù)置了5個(gè)相同的結(jié)構(gòu)變量,每個(gè)結(jié)構(gòu)變量的第一個(gè)元素和第二個(gè)元素為‘7890’和11H(3)結(jié)構(gòu)使用偽指令語句

格式:結(jié)構(gòu)變量名·字段變量DATA1.DA1=‘FORM’功能:給出了不同結(jié)構(gòu)變量名的數(shù)據(jù)結(jié)構(gòu)中的變量元素值設(shè)當(dāng)前數(shù)據(jù)段基址為1000H,結(jié)構(gòu)變量DATA1的偏移地址為100H,則例4.10中的4個(gè)結(jié)構(gòu)變量在存儲器中的地址分配如圖4-3所示。經(jīng)過預(yù)置的結(jié)構(gòu)變量,具有三屬性:段屬性、偏移地址屬性、類型屬性BYTEWORDDWORD8、分組偽指令語句格式:組名GROUP段1,段2,……功能:將段1、段2等邏輯段放在同一個(gè)64KB的物理段內(nèi),并給它起一個(gè)新的名字。9、其它偽指令語句(l)外部偽指令語句格式:PUBLIC名稱1,名稱2,…

EXTRN名稱1:類型,名稱2:類型,…

功能:PUBLIC定義全局標(biāo)識符,名稱在本模塊中定義的

EXTRN指出外部標(biāo)識符,名稱為在其他模塊中用PUBLIC定義的類型:BYTEWORDNEARFAR常數(shù)為ABS(2)對準(zhǔn)偽指令語句格式:EVEN;下一個(gè)語句的地址調(diào)整為偶地址

(3)條件匯編偽指令語句一般格式是:

IF;如果條件成立

[ELSE];[否則]

ENDIF;結(jié)束條件匯編語句

IF有多種形式:IF操作數(shù)IFE操作數(shù)IFDEF標(biāo)號或變量IFNDEF標(biāo)號或變量IFB<變量>IFNB<變量>IFIDN<操作數(shù)l>,<操作數(shù)2>IFDIF<操作數(shù)1>,<操作數(shù)2>IF1IF2

4.4匯編語言中的表達(dá)式表達(dá)式運(yùn)算對象和運(yùn)算符組成。匯編語言中有6類運(yùn)算符,即:①算術(shù)運(yùn)算符;②邏輯運(yùn)算符;③關(guān)系運(yùn)算符;④分析運(yùn)算符;⑤修改屬性運(yùn)算符;⑥其它運(yùn)算符。1、算術(shù)運(yùn)算符算術(shù)運(yùn)算符有:加(+)、減(-)、乘(*)、除(/)、取模運(yùn)算(MOD)、左移(SHL)和右移(SHR)。取模運(yùn)算是取兩數(shù)相除的余數(shù),對象必須為正整數(shù)。例如:

92MOD16結(jié)果為12(相當(dāng)于取低4位的值)

97HMOD20H結(jié)果為23(相當(dāng)于取低5位的值)

33HMOD7結(jié)果為22、邏輯運(yùn)算符邏輯運(yùn)算符有:與(AND)、或(OR)、非(NOT)和異或 (XOR)例如:

MOVAL,NOT0AAH;含有表達(dá)式NOT0AAHMOVBL,23HAND0FH;含有表達(dá)式23HAND0FH匯編時(shí),匯編程序?qū)Ρ磉_(dá)式進(jìn)行計(jì)算,匯編后相應(yīng)的指令變成:MOVAL,055HMOVBL,03H

3、關(guān)系運(yùn)算符關(guān)系運(yùn)算符有:相等EQ、不等NE、小于LT、大于GT、小于 或等于LE、大于或等于。

4、分析運(yùn)算符分析運(yùn)算符有:OFFSET、SEG、TYPE、LENGTH、SIZE(1)OFFSET

格式:OFFSET變量或標(biāo)號;取偏移地址例如:MOVSI,OFFSETLAB1

(2)SEG

格式:SEG變量或標(biāo)號;取段基址(3)TYPE

格式:TYPE變量或標(biāo)號;返回類型和距離表4-1TYPE運(yùn)算符返回值變量標(biāo)號類型DBDWDDDQDTNEARFAR返回值124810-1-2(4)LENGTH格式:LENGTH變量返回變量的個(gè)數(shù),只有當(dāng)變量中使用DUP時(shí),才返回個(gè)數(shù),否則為1例如:MOVAL,LENGTHXX2(5)SIZE格式:SIZE變量;返回變量所包含的總字節(jié)數(shù)例如:MOVAX,SIZEXX1

5、修改屬性運(yùn)算符(綜合運(yùn)算符)修改屬性運(yùn)算符有:段操作符、PTR、THIS、HIGH、LOW、SHORT

(1)段操作符格式:段前綴:變量或地址表達(dá)式(2)PTR

格式:類型PTR變量距離PTR標(biāo)號;將左邊賦給右邊例如:MOVBYTE

PTR[BX],10HMOVWORD

PTR[BX],10HJMPFAR

PTRLL1(3)THIS格式:變量EQUTHIS

類型;將右邊賦給左邊標(biāo)號EQUTHIS

距離例如:

DATA1EQUTHISBYTETABLEDW200DUP(?)又如:

LL1EQUTHISFARMOVAX,100DATA1的偏移地址值與TABLE相同,但DATA1為字節(jié),TABLE為字!給MOVAX,100前的標(biāo)號LL1修改距離為FAR(4)SHORT

格式:SHORT標(biāo)號功能:指出轉(zhuǎn)移類指令,目的地址范圍在-128—127間(5)HIGH和LOW它們稱為字節(jié)分離運(yùn)算符格式:HIGH變量或標(biāo)號;分別分離高低字節(jié)部分

LOW變量或標(biāo)號例如:MOVAH,HIGHBB14.5指令語句指令語句的格式:標(biāo)號:前綴指令助記符操作數(shù);(注釋)(1)立即尋址和直接尋址的表示形式BB1EQU1234HMOVAX,BB1MOVCX,[BB1](2)基址寄存器加變址寄存器尋址的表示形式

MOVAX,[BX][SI]MOVAX,[BX+SI]

(3)相對寄存器尋址的表示形式MYDATDB100DUP(?)MOVAX,MYDAT[BX]MOVAX,[MYDAT+BX]

MOVCX,MYDAT[BX][SI]MOVCX,[MYDAT+BX+SI]

4.6宏指令語句及其使用1、宏定義宏定義格式:宏指令名MACRO

形式參數(shù)1,形式參數(shù)2…

宏體;程序代碼

ENDM2、宏調(diào)用宏調(diào)用格式:宏指令名實(shí)際參數(shù)1,實(shí)際參數(shù)2…3、宏展開

例4-24無形式參數(shù)的宏定義、宏調(diào)用及宏展開宏定義:PUSHABMACROPUSHAXPUSHBXENDM宏調(diào)用:PUSHAB宏展開:+PUSHAX+PUSHBX例4-25帶形式參數(shù)的宏定義、宏調(diào)用及宏展開宏定義:LDSF

MACROPR,VAR,N,REG,CCMOVPR,VARMOVAX,[PR]MOVCL,NS&CCREG,CLENDM宏調(diào)用1:LDSFSI,WVAR1,4,AX,AR宏調(diào)用2:

LDSFDI,WVAR2,3,BX,AL宏展開1:+MOVSI,WVAR1+MOVAX,[SI]+MOVCL,4+SARAX,CL宏展開2:+MOVDI,WVAR2+MOVAX,[DI]+MOVCL,3+SALBX,CL4、宏嵌套(1)宏定義中使用宏調(diào)用例4-26設(shè)在程序的數(shù)據(jù)段已經(jīng)定義了變量X,Y,Z,試計(jì)算X+Y→Z,并要求保護(hù)所有使用的寄存器。宏定義:DBFMACROP,QMOVBX,PMOVAX,QADDAX,BXENDMDBFSMACROX1,X2,X3PUSHAX

PUSHBX

DBFX1,X2MOVX3,AXPOPBXPOPAXENDM宏調(diào)用:DBFSX,Y,Z宏展開:+PUSHAX+PUSHBX +MOVBX,X+MOVAX,Y+ADDAX,BX+MOVZ,AX+POPBX+POPAX(2)宏定義中包含宏定義例4-27設(shè)在程序的數(shù)據(jù)段已經(jīng)定義了變量X,Y,Z,試共用一個(gè)宏定義,計(jì)算X+Y→Z、X-Y→Z、XANDY→Z,并要求保護(hù)所有使用的寄存器。宏定義:DEFMMACROMNAME,OPENMNAMEMACROC1,C2,C3PUSHAXMOVAX,C1OPENAX,C2MOVC3,AXPOPAXENDMENDM宏調(diào)用定義加法:

DEFMADDIT,ADD宏調(diào)用定義減法:

DEFMSUBT,SUB宏調(diào)用實(shí)現(xiàn)X+Y→Z:

ADDITX,Y,Z宏展開:+PUSHAX+MOVAX,X+ADDAX,Y+MOVZ,AX+POPAX宏調(diào)用實(shí)現(xiàn)X-Y→ZSUBTX,Y,Z宏展開:+PUSHAX+MOVAX,X+SUBAX,Y+MOVZ,AX+POPAX

5、宏定義中的標(biāo)號與變量

定義局部標(biāo)號的格式:

LOCAL參數(shù)1、參數(shù)2、……參數(shù)n功能:放在宏體第一行,參數(shù)為宏體中用到的標(biāo)號和變量局部標(biāo)號或變量定義后,宏展開時(shí)程序中出現(xiàn)的各標(biāo)號或變量依次用??0000,??0001,??0002,??0003…代替6、其它宏指令語句(1)取消宏指令語句格式:PURGE宏指令名1,宏指令名2……宏指令名n功能:取消宏指令名,以后可重新定義(2)重復(fù)執(zhí)行宏指令語句格式:REPT表達(dá)式宏體

ENDM功能:連續(xù)重復(fù)完成相同的操作,次數(shù)為表達(dá)式所給的值7、宏指令與子程序的區(qū)別主要區(qū)別在以下幾個(gè)方面:

1)宏指令調(diào)用比子程序調(diào)用執(zhí)行速度快:子程序調(diào)用需要入棧和出棧

2)過程調(diào)用使用CALL語句實(shí)現(xiàn),在CPU執(zhí)行時(shí)進(jìn)行處理,而宏指令調(diào)用由宏匯編軟件MASM中的宏處理程序來處理。

7、宏指令與子程序的區(qū)別3)子程序比宏指令節(jié)省內(nèi)存空間:過程調(diào)用的子程序與主程序分開獨(dú)立存在,經(jīng)匯編后存儲器中只占有一個(gè)子程序段的空間,主程序轉(zhuǎn)入此處運(yùn)行,因此目標(biāo)代碼長度短,節(jié)省空間

而宏調(diào)用在匯編過程中展開,宏調(diào)用多少次,就插入多少次宏體,因此目標(biāo)代碼長,占內(nèi)存空間多。7、宏指令與子程序的區(qū)別4)宏指令比子程序靈活:子程序一般完成某一個(gè)功能,僅入口參數(shù)可以改變,而宏指令可以帶形式參數(shù),調(diào)用時(shí)可以用實(shí)際參數(shù)取代,使不同的調(diào)用完成不同的操作。4.7DOS系統(tǒng)功能調(diào)用DOS功能調(diào)用表INT21H1、常用的DOS軟中斷(1)程序結(jié)束軟中斷1)INT20H調(diào)用格式舉例:INT20H功能:終止當(dāng)前進(jìn)程,關(guān)閉所有打開的文件,清除磁盤緩沖區(qū),返回控制臺的命令接收狀態(tài),不需要任何的入口參數(shù),放在程序之后2)INT21H該軟中斷又有三種情況:無返回程序結(jié)束、程序結(jié)束并駐留和帶 返回程序結(jié)束。無返回程序結(jié)束的調(diào)用格式:

MOVAH,0INT21H程序退出,需入口參數(shù)AH=0(調(diào)用功能號)程序結(jié)束并駐留的調(diào)用格式舉例:MOVAH,31HMOVAL,1MOVDX,400HINT21H帶返回程序結(jié)束的調(diào)用格式舉例:MOVAH,4CHMOVAL,1INT21HAH為功能號,AL返回號,DX保留從程序段前綴開始的內(nèi)存長度程序退出,并返回代碼為1,同時(shí)駐留內(nèi)存,保留從程序段前綴開始的16KB內(nèi)存。AH為功能號,AL返回號程序退出,并返回代碼為13)INT27H調(diào)用格式舉例:MOVDX,XXINT27H程序退出,DX

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論