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

下載本文檔

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

文檔簡(jiǎn)介

匯編語(yǔ)言的基本語(yǔ)法匯編語(yǔ)言的基本語(yǔ)法1.1.匯編語(yǔ)言源程序的格式DATA SEGMENTAT2000HARRAY DBa1,a2,a3,…a10(a1~a10為立即數(shù))COUNT EQU$-ARRAYSUM DW?DATA ENDSSTACK SEGMENTPARASTACK‘STACK’STAK DB10DUP(?)TOP EQULENGTHSTAKSTACK ENDS匯編語(yǔ)言的基本語(yǔ)法CODE SEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATA MOVDS,AX MOVAX,0 MOVDI,OFFSETSUM MOVBX,OFFSETARRAY MOVCX,COUNTLOP:ADDAL,[BX] ADCAH,0 INCBX LOOPLOP MOV[DI],AX MOVAH,4CH INT 21HCODE ENDS END START匯編語(yǔ)言的基本語(yǔ)法

匯編語(yǔ)言源程序格式的特點(diǎn)是: 1.分段結(jié)構(gòu)

2.語(yǔ)句行 匯編語(yǔ)言程序的語(yǔ)句有兩類:

(1)指令性語(yǔ)句

(2)指示性語(yǔ)句匯編語(yǔ)言的基本語(yǔ)法匯編語(yǔ)言源程序語(yǔ)句的格式

匯編語(yǔ)言源程序中的每個(gè)語(yǔ)句可以由四項(xiàng)組成,格式如下:

[名字]操作操作數(shù)[;注釋]

其中:

名字項(xiàng)是指一個(gè)標(biāo)號(hào)或變量。

操作項(xiàng)是一個(gè)操作碼的助記符,它可以是指令、偽指令或宏指令名。

匯編語(yǔ)言的基本語(yǔ)法操作數(shù)項(xiàng)由一個(gè)或多個(gè)表達(dá)式組成,它提供為執(zhí)行所要求的操作而需要的信息。操作數(shù)項(xiàng)可以是常數(shù)、寄存器、標(biāo)號(hào)、變量或由表達(dá)式組成。

注釋項(xiàng)用來(lái)說(shuō)明程序或語(yǔ)句的功能。";"為識(shí)別注釋項(xiàng)的開(kāi)始。";"也可以從一行的第一個(gè)字符開(kāi)始,此時(shí)整行都是注釋,常用來(lái)說(shuō)明下面一段程序的功能。匯編語(yǔ)言的基本語(yǔ)法

上面四項(xiàng)中帶方括號(hào)的兩項(xiàng)是可選項(xiàng)。各項(xiàng)之間必須用"空格"(space)或"水平制表"(Tab)符隔開(kāi)。

(1)名字項(xiàng)

(2)操作項(xiàng)

(3)操作數(shù)項(xiàng)

(4)注釋項(xiàng)

匯編語(yǔ)言的基本語(yǔ)法

(1)名字項(xiàng)

源程序中用下列字符來(lái)表示名字:

字母A~Z

數(shù)字0~9

專用字符?、·、@、-、$

除數(shù)字外,所有字符都可以放在源語(yǔ)句的第一個(gè)位置。名字中如果用到·則必須是第一個(gè)字符??梢杂煤芏嘧址麃?lái)說(shuō)明名字,但只有前面的31個(gè)字符能被匯編程序所識(shí)別。

匯編語(yǔ)言的基本語(yǔ)法

一般說(shuō)來(lái),名字項(xiàng)可以是標(biāo)號(hào)或變量。它們都用來(lái)表示本語(yǔ)句的符號(hào)地址,都是可有可無(wú)的,只有當(dāng)需要用符號(hào)地址來(lái)訪問(wèn)該語(yǔ)句時(shí)它才需要出現(xiàn)。

·標(biāo)號(hào):標(biāo)號(hào)在代碼段中定義,后面跟著冒號(hào):,此外,它還可以作為過(guò)程名定義。

·變量:變量在數(shù)據(jù)段或附加數(shù)據(jù)段中定義,后面不跟冒號(hào)。變量經(jīng)常在操作數(shù)字段出現(xiàn)。

匯編語(yǔ)言的基本語(yǔ)法

(2)操作項(xiàng)

操作項(xiàng)可以是指令、偽指令或宏指令的助記符。對(duì)于指令,匯編程序?qū)⑵浞g為機(jī)器語(yǔ)言指令。對(duì)于偽指令,匯編程序?qū)⒏鶕?jù)其所要求的功能進(jìn)行處理。對(duì)于宏指令,則將根據(jù)其定義展開(kāi)。

匯編語(yǔ)言的基本語(yǔ)法(3)操作數(shù)項(xiàng)

操作數(shù)項(xiàng)由一個(gè)或多個(gè)表達(dá)式組成,多個(gè)操作數(shù)項(xiàng)之間一般用逗號(hào)分開(kāi)。對(duì)于指令,操作數(shù)項(xiàng)一般給出操作數(shù)地址,它們可能有一個(gè),或二個(gè),或三個(gè),或一個(gè)也沒(méi)有。對(duì)于偽操作或宏指令,則給出它們所要求的參數(shù)。

操作數(shù)項(xiàng)可以是常數(shù)、寄存器、標(biāo)號(hào)、變量或由表達(dá)式組成。

匯編語(yǔ)言的基本語(yǔ)法

(4)注釋項(xiàng)

注釋項(xiàng)用來(lái)說(shuō)明一段程序、一條或幾條指令的功能。對(duì)于匯編語(yǔ)言程序來(lái)說(shuō),注釋項(xiàng)的作用是很明顯的,它可以使程序容易被讀懂,因此匯編語(yǔ)言程序必須寫(xiě)好注釋。注釋?xiě)?yīng)該寫(xiě)出本條(或本段)指令在程序中的功能和作用,而不應(yīng)該只寫(xiě)指令的動(dòng)作。讀者在有機(jī)會(huì)閱讀程序例子時(shí),應(yīng)注意學(xué)習(xí)注釋的寫(xiě)法,在編制程序時(shí),更應(yīng)學(xué)會(huì)寫(xiě)好注釋。

匯編語(yǔ)言的基本語(yǔ)法

指令性語(yǔ)句 格式為:

[標(biāo)號(hào)]:操作碼[操作數(shù)][;注釋]

帶方括號(hào)的為任選項(xiàng), 標(biāo)號(hào)是指令的符號(hào)地址,

操作碼和操作數(shù)是用匯編語(yǔ)言指令表示的指令部分, 注釋是對(duì)該語(yǔ)句在本程序中的功能的說(shuō)明。匯編語(yǔ)言的基本語(yǔ)法指示性語(yǔ)句 格式為:[名字/變量]命令[參數(shù)][;注釋]

命令指示匯編程序進(jìn)行某種匯編操作, 參數(shù)是有關(guān)的數(shù)據(jù), 名字是段名、符號(hào)名等標(biāo)識(shí)符,變量用變量名表示。匯編語(yǔ)言的基本語(yǔ)法

常量、標(biāo)識(shí)符和表達(dá)式一、常量 其值在程序中不能改變的量,

在匯編語(yǔ)言源程序中的常量有: 數(shù)字常量、字符常量和符號(hào)常量(1)數(shù)字常量可以是二進(jìn)制數(shù)、八進(jìn)制數(shù)、十進(jìn)制數(shù)或十六進(jìn)制數(shù)表示(2)字符常量是用單引號(hào)‘’括起來(lái)的ASCII字符,其值是該字符的ASCII代碼值匯編語(yǔ)言的基本語(yǔ)法(3)符號(hào)常量是用標(biāo)識(shí)符定義的常量。 例如,采用符號(hào)定義語(yǔ)句PORTAEQU80H, 則指令MOVAL,PORTA

與指令MOVAL,80H等價(jià)。二、標(biāo)識(shí)符 在編程時(shí)建立的有特定意義的字符序列,標(biāo)識(shí)符可用作符號(hào)常量、名字、變量和標(biāo)號(hào)等。 組成標(biāo)識(shí)符有如下規(guī)定:

匯編語(yǔ)言的基本語(yǔ)法

(1)組成標(biāo)識(shí)符的字符有: 英文大寫(xiě)字母:A~Z; 英文小寫(xiě)字母:a-z; 數(shù)字0~9; 字符?、@、_、$;

(2)字符長(zhǎng)度不超過(guò)3l個(gè);

(3)首字符不能是數(shù)字;

(4)?不能單獨(dú)作為一個(gè)標(biāo)識(shí)符;

(5)不能把保留字用作標(biāo)識(shí)符,保留字包括助記符、寄存器名等。匯編語(yǔ)言的基本語(yǔ)法三、表達(dá)式

表達(dá)式是常數(shù)、標(biāo)號(hào)、變量與一些操作符相組合的序列,可以有數(shù)字表達(dá)式和地址表達(dá)式兩種。在匯編期間,匯編程序按照一定的優(yōu)先規(guī)則對(duì)表達(dá)式進(jìn)行計(jì)算后可得到一個(gè)數(shù)值或一個(gè)地址。

常用的表達(dá)式操作符介紹如下:匯編語(yǔ)言的基本語(yǔ)法

(1)算術(shù)操作符

算術(shù)操作符有+、-、*、/和MOD。

MOD是指除法運(yùn)算后得到的余數(shù),如19/7的商是2,而19MOD7則為5(余數(shù))。

匯編語(yǔ)言的基本語(yǔ)法

算術(shù)操作符可以用于數(shù)字表達(dá)式或地址表達(dá)式中,但當(dāng)它用于地址表達(dá)式時(shí),只有當(dāng)其結(jié)果有明確的物理意義時(shí)才是有效的結(jié)果。例如兩個(gè)地址相乘或相除是無(wú)意義的。在地址表達(dá)式中,可以使用+或-,但也必須注意其物理意義。

匯編語(yǔ)言的基本語(yǔ)法

例如把兩個(gè)不同段的地址相加也是無(wú)意義的。經(jīng)常使用的是地址±數(shù)字量,它是有意義的。例如SUM+1是指SUM字節(jié)單元的下一個(gè)字節(jié)單元的地址(注意:不是指SUM單元的內(nèi)容加1),而SUM-1則是指SUM字節(jié)單元的前一個(gè)字節(jié)單元的地址。

例:如果要求把首地址為BLOCK的字?jǐn)?shù)組的第6個(gè)字傳送到DX寄存器,可用指令如下:

MOV

DX,BLOCK+(6-1)*2

匯編語(yǔ)言的基本語(yǔ)法

例:如數(shù)組ARRAY定義如下,寫(xiě)出把數(shù)組長(zhǎng)度(字?jǐn)?shù))存入CX寄存器的指令。

ARRAY

DW1,2,3,4,5,6,7

ARYEND

DW?

其中ARYEND是為計(jì)算數(shù)組長(zhǎng)度而建立的符號(hào)地址,所需指令如下:

MOV

CX,(ARYEND-ARRAY)/2

匯編程序在匯編期間將計(jì)算出表達(dá)式的值而形成指令:

MOV

CX,7

匯編語(yǔ)言的基本語(yǔ)法

(2)邏輯操作符邏輯操作符有:AND(與)、OR(或)、XOR(異或)、NOT(非)。

邏輯操作符都是按位操作的,只能用于數(shù)字表達(dá)式中。邏輯操作符要求匯編程序?qū)ζ淝昂髢蓚€(gè)操作數(shù)(或表達(dá)式)作指定的邏輯操作。

匯編語(yǔ)言的基本語(yǔ)法

例:

OUTPORT_VALAND0FEH,AL

上例中PORT_VAL為端口號(hào),OUT指令中的表達(dá)式說(shuō)明只為偶數(shù)號(hào)端口輸出數(shù)據(jù)。

匯編語(yǔ)言的基本語(yǔ)法

(3)關(guān)系操作符

關(guān)系操作符有:EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)。

關(guān)系操作符的兩個(gè)操作數(shù)必須都是數(shù)字或是同一段內(nèi)的兩個(gè)存儲(chǔ)器地址。計(jì)算的結(jié)果應(yīng)為邏輯值:結(jié)果為真,表示為0FFFFH;結(jié)果為假,則表示為0。

匯編語(yǔ)言的基本語(yǔ)法例如:

MOVBX,((PORT_VALLT5)AND20)OR((PORT_VALGE5)AND30)

則當(dāng)PORT_VAL<5時(shí),匯編結(jié)果應(yīng)該是:

MOVBX,20

否則,匯編結(jié)果應(yīng)該是:

MOVBX,30

匯編語(yǔ)言的基本語(yǔ)法(4)數(shù)值回送操作符

數(shù)值回送操作符有:TYPE、LENGTH、SIZE、OFFSET、SEG等。

數(shù)值回送操作符把一些特征或存儲(chǔ)器地址的一部分作為數(shù)值回送。

匯編語(yǔ)言的基本語(yǔ)法

·TYPE

格式為:TYPE表達(dá)式

如果表達(dá)式是變量,則匯編程序?qū)⒒厮驮撟兞康囊宰止?jié)數(shù)表示的類型:DB為1,DW為2,DD為4,DF為6,DQ為8,DT為10。如果表達(dá)式是標(biāo)號(hào),則匯編程序?qū)⒒厮痛碓摌?biāo)號(hào)類型的數(shù)值:NEAR為-1,F(xiàn)AR為-2。如果表達(dá)式為常數(shù),則應(yīng)回送0。

匯編語(yǔ)言的基本語(yǔ)法舉例:

ARRAYDW1,2,3

則對(duì)于指令A(yù)DDSI,TYPEARRAY

匯編程序?qū)⑵湫纬蔀椋?/p>

ADDSI,2

匯編語(yǔ)言的基本語(yǔ)法·LENGTH

格式為:LENGTH變量

對(duì)于變量中使用DUP的情況,匯編程序?qū)⒒厮头峙浣o該變量的單元數(shù),而對(duì)于其他情況則送1。

匯編語(yǔ)言的基本語(yǔ)法舉例1:

FEESDW100DUP(0)

對(duì)于指令MOVCX,LENGTHFEES

匯編程序?qū)⑹蛊湫纬蔀椋?/p>

MOVCX,100舉例2:

ARRAYDW1,2,3

對(duì)于指令MOVCX,LENGTHARRAY

匯編程序?qū)⑹蛊湫纬蔀椋?/p>

MOVCX,1

匯編語(yǔ)言的基本語(yǔ)法舉例3:

TABLEDB‘ABCD’

對(duì)于指令MOVCX,LENGTHTABLE

匯編程序?qū)⑹蛊湫纬蔀椋?/p>

MOVCX,1

匯編語(yǔ)言的基本語(yǔ)法·SIZE

格式為:SIZE變量

匯編程序應(yīng)回送分配給該變量的字節(jié)數(shù)。但是,此值是LENGTH值和TYPE值的乘積。

匯編語(yǔ)言的基本語(yǔ)法例如:

MOVCX,SIZEFEES

將形成為MOVCX,200

又例如:

MOVCX,SIZEARRAY

將形成為MOVCX,2

又例如:

MOVCX,SIZETABLE

將形成為MOVCX,1。

匯編語(yǔ)言的基本語(yǔ)法·OFFSET

格式為:OFFSET變量或標(biāo)號(hào)

匯編程序?qū)⒒厮妥兞炕驑?biāo)號(hào)的偏移地址值。

舉例:

MOVBX,OFFSETOPER_ONE

匯編程序?qū)PER_ONE的偏移地址作為立即數(shù)回送給指令,而在執(zhí)行時(shí)則將該偏移地址裝入BX寄存器中。所以這條指令的功能與指令

LEABX,OPER_ONE

是等價(jià)的。

匯編語(yǔ)言的基本語(yǔ)法·SEG

格式為:SEG變量或標(biāo)號(hào)

匯編程序?qū)⒒厮妥兞炕驑?biāo)號(hào)的段地址值。

舉例:如果DATA_SEG是從存儲(chǔ)器的05000H地址開(kāi)始的一個(gè)數(shù)據(jù)段的段名,OPER1是該段中的一個(gè)變量名,則

MOVBX,SEGOPER1

將把0500H作為立即數(shù)插入指令。實(shí)際上,由于段地址是由連接程序分配的,所以該立即數(shù)是連接時(shí)插入的。執(zhí)行期間則使BX寄存器的內(nèi)容成為0500H。

匯編語(yǔ)言的基本語(yǔ)法·PTR

格式為:類型PTR符號(hào)地址

PTR用來(lái)給已分配的存儲(chǔ)地址(用符號(hào)地址表示)賦予另一種屬性,使該地址具有另一種類型。

類型可有BYTE、WORD、DWORD、FWORD、QWORD、TBYTE、NEAR和FAR等幾種,所以PTR也可以用來(lái)建立字、雙字、四字或段內(nèi)及段間的指令單元等。

匯編語(yǔ)言的基本語(yǔ)法舉例:已有數(shù)據(jù)定義如下:TWO_BYTEDW?

可以用以下語(yǔ)句對(duì)這兩個(gè)字節(jié)賦予另一種類型定義:

ONE_BYTEEQUBYTEPTRTWO_BYTE

這里ONE_BYTE和TWO_BYTE兩個(gè)符號(hào)地址具有相同的段地址和偏移地址,但是它們的類型屬性不同,前者為1,后者為2。

匯編語(yǔ)言的基本語(yǔ)法此外,有時(shí)指令要求使用PTR操作符。例如用

MOV[BX],5

指令把立即數(shù)存入BX寄存器內(nèi)容指定的存儲(chǔ)單元中,但匯編程序不能分清是存入字單元還是字節(jié)單元,此時(shí)必須用PTR操作符來(lái)說(shuō)明屬性,應(yīng)該寫(xiě)明:

MOVBYTEPTR[BX],5

或MOVWORDPTR[BX],5

匯編語(yǔ)言的基本語(yǔ)法·段操作符

段操作符用來(lái)表示一個(gè)標(biāo)量、變量或地址表達(dá)式的段屬性。

格式為:

段寄存器∶地址表達(dá)式

段名∶地址表達(dá)式

例如,用段前綴指定某段的地址操作數(shù)

MOVAX,ES:[BX+SI]

匯編語(yǔ)言的基本語(yǔ)法·SHORT

用來(lái)修飾JMP指令中轉(zhuǎn)向地址的屬性,指出轉(zhuǎn)向地址是在下一條指令地址的±127個(gè)字節(jié)范圍之內(nèi)。

例如:JMPSHORTTAG;轉(zhuǎn)移屬性為短轉(zhuǎn)移

.

.

.

TAG:

MOV...

匯編語(yǔ)言的基本語(yǔ)法·THIS

格式為:THIS屬性或類型

THIS可以象PTR一樣建立一個(gè)指定類型(BYTE、WORD、DWORD)或指定距離(NEAR或FAR)的地址操作數(shù)。該操作數(shù)的段地址和偏移地址與下一個(gè)存儲(chǔ)單元地址相同。

匯編語(yǔ)言的基本語(yǔ)法

例如:FIRST_TYPEEQUTHISBYTE

WORD_TABLEDW100DUP(?)

此時(shí)FIRST_TYPE的偏移地址和WORD_TABLE完全相同,但它是字節(jié)類型的;而WORD_TABLE則是字類型的。

又如:STARTEQUTHISFAR

MOV

CX,100

這樣,MOV指令有一個(gè)FAR屬性的符號(hào)地址START,這就允許其他段的JMP指令直接跳轉(zhuǎn)到START來(lái)。

匯編語(yǔ)言的基本語(yǔ)法·HIGH和LOW

稱為字節(jié)分離操作符,它接收一個(gè)數(shù)或地址表達(dá)式,HIGH取其高位字節(jié),LOW取其低位字節(jié)。

例如:

CONSTEQU0ABCDH

則MOVAH,HIGHCONST

將匯編成MOVAH,0ABH

指令MOVAH,LOWCONST

將匯編成MOVAH,0CDH

匯編語(yǔ)言的基本語(yǔ)法·操作符的優(yōu)先級(jí)

我們知道表達(dá)式是常數(shù)、寄存器、標(biāo)號(hào)、變量和操作符的組合,在計(jì)算表達(dá)式時(shí),應(yīng)該首先計(jì)算優(yōu)先級(jí)高的操作符,然后從左到右地對(duì)優(yōu)先級(jí)相同的操作符進(jìn)行計(jì)算。括號(hào)也可以改變計(jì)算次序,括號(hào)內(nèi)的表達(dá)式應(yīng)優(yōu)先計(jì)算。

匯編語(yǔ)言的基本語(yǔ)法表達(dá)式中的運(yùn)算符

高優(yōu)先級(jí)低1括號(hào)中的項(xiàng),即(…)和[…]2LENGTH,SIZE,WIDTH,MASK3PTR,OFFSET,SEG,TYPE,THIS4×,/,MOD5+,-6EQ,NE,L,LE,GT,GE7NOT8AND9OR,XOR匯編語(yǔ)言的基本語(yǔ)法偽指令(指示性語(yǔ)句)

偽指令又稱為偽操作,它是在對(duì)源程序匯編期間由匯編程序處理的操作,它們可以完成如定義數(shù)據(jù)、分配存儲(chǔ)區(qū)、指示程序結(jié)束等功能。

宏指令是由用戶按照宏定義格式編寫(xiě)的一段程序,其中語(yǔ)句可以是指令、偽指令,甚至是已定義的宏指令。

匯編語(yǔ)言的基本語(yǔ)法

偽指令和指令的區(qū)別在于,每一條指令必須生成機(jī)器代碼,然后在程序運(yùn)行期間由CPU來(lái)執(zhí)行其操作;而偽指令是在匯編期間由匯編程序執(zhí)行的操作命令,除了數(shù)據(jù)定義及存儲(chǔ)器分配偽指令分配存儲(chǔ)器空間外,其它偽指令不生成目標(biāo)碼。和各種指令一樣,偽指令也是程序設(shè)計(jì)不可缺少的工具。下面介紹一些常用的偽指令。匯編語(yǔ)言的基本語(yǔ)法段定義偽指令

段定義偽指令是表示一個(gè)段開(kāi)始和結(jié)束的命令。段名SEGMENT

段名ENDS

匯編語(yǔ)言的基本語(yǔ)法

段名由用戶命名。對(duì)于數(shù)據(jù)段、附加段和堆棧段來(lái)說(shuō),段內(nèi)一般是存儲(chǔ)單元的定義、分配等偽指令語(yǔ)句;對(duì)于代碼段中則主要是指令及偽指令語(yǔ)句。

定義了段還必須說(shuō)明哪個(gè)段是代碼段,哪個(gè)段是數(shù)據(jù)段。ASSUME偽指令就是建立段和段寄存器關(guān)系的偽指令,其格式為:

ASSUME段寄存器名:段名,…

段寄存器名必須是CS、DS、ES和SS中的一個(gè),而段名必須是由SEGMENT定義的段名。

匯編語(yǔ)言的基本語(yǔ)法

;***********************

data_seg1segment

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

data_seg1ends

;***********************

data_seg2segment

;定義附加段

data_seg2ends

;***********************匯編語(yǔ)言的基本語(yǔ)法code_segsegment

;定義代碼段

assumecs:code_seg,ds:data_seg1,es:data_seg2start:

;程序執(zhí)行的起始地址

;setDSregistertocurrentdatasegment

mov

ax,data_seg1

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

mov

ds,ax

;存入DS寄存器

;setESregistertocurrentextrasegment

mov

ax,data_seg2

;附加段地址

mov

es,ax

;存入ES寄存器

.

.

code_segends

;代碼段結(jié)束

;**************************

end

start

匯編語(yǔ)言的基本語(yǔ)法

由于ASSUME偽指令只是指定某個(gè)段分配給哪一個(gè)段寄存器,它并不能把段地址裝入段寄存器中,所以在代碼段中,還必須把段地址裝入相應(yīng)的段寄存器中:

MOV

AX,DATA_SEG1

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

MOV

DS,AX

;存入DS寄存器

MOV

AX,DATA_SEG2

;附加段地址

MOV

ES,AX

;存入ES寄存器

匯編語(yǔ)言的基本語(yǔ)法如果程序中還定義了堆棧段STACK_SEG,也需要把段地址裝入SS中:

MOV

AX,STACK_SEG

;堆棧段地址

MOV

SS,AX

;存入ES寄存器

匯編語(yǔ)言的基本語(yǔ)法

注意,在程序中不需要用指令裝入代碼段的段地址,因?yàn)樵诔绦虺跏蓟瘯r(shí),裝入程序已將代碼段的段地址裝入CS寄存器了。

匯編語(yǔ)言的基本語(yǔ)法程序開(kāi)始和結(jié)束偽指令

在程序的開(kāi)始可以用NAME或TITLE作為模塊的名字,其格式為:

NAME模塊名

TITLE文件名

表示源程序結(jié)束的偽指令的格式為:

END

[標(biāo)號(hào)]匯編語(yǔ)言的基本語(yǔ)法

注意:NAME及TITLE偽指令并不是必需的,如果程序中既無(wú)NAME又無(wú)TITLE偽指令,則將用源文件名作為模塊名。

END偽指令中的“標(biāo)號(hào)”指示程序開(kāi)始執(zhí)行的起始地址。如果多個(gè)程序模塊相連接,則只有主程序的END要加上標(biāo)號(hào),其他子程序模塊則只用END而不必指定標(biāo)號(hào)。上例最后使用了ENDSTART偽指令。匯編程序?qū)⒃谟鯡ND時(shí)結(jié)束匯編,并且程序在運(yùn)行時(shí)從START開(kāi)始執(zhí)行。匯編語(yǔ)言的基本語(yǔ)法數(shù)據(jù)定義及存儲(chǔ)器分配偽指令

8086提供了各種數(shù)據(jù)及存儲(chǔ)器分配偽指令,這些偽指令在匯編程序?qū)υ闯绦蜻M(jìn)行匯編期間,由匯編程序完成數(shù)據(jù)類型定義及存儲(chǔ)器分配等功能。

數(shù)據(jù)定義及存儲(chǔ)器分配偽指令的格式是:[變量]助記符操作數(shù)[,…,操作數(shù)][;注釋]

匯編語(yǔ)言的基本語(yǔ)法

數(shù)據(jù)定義及存儲(chǔ)器分配偽指令格式中的"變量"是操作數(shù)的符號(hào)地址,它是可有可無(wú)的,它的作用與指令語(yǔ)句前的標(biāo)號(hào)相同,區(qū)別是變量后面不加冒號(hào)。如果語(yǔ)句中有變量,那么匯編程序?qū)⒉僮鲾?shù)的第一個(gè)字節(jié)的偏移地址賦于這個(gè)變量。

"注釋"字段用來(lái)說(shuō)明該偽指令的功能,它也不是必須有的。

"助記符"字段說(shuō)明所用偽指令的助記符。

匯編語(yǔ)言的基本語(yǔ)法

下面介紹常用的數(shù)據(jù)定義偽指令。

DB(definebyte)

DB偽指令用來(lái)定義字節(jié),對(duì)其后的每個(gè)數(shù)據(jù)都存儲(chǔ)在一個(gè)字節(jié)中。DB能定義十進(jìn)制數(shù)、二進(jìn)制數(shù)、十六進(jìn)制數(shù)和ASCII字符,二進(jìn)制數(shù)和十六進(jìn)制數(shù)要分別用"B"和"H"表示,ASCII字符用單引號(hào)('')括起來(lái)。DB還是唯一能定義字符串的偽操作,串中的每個(gè)字符占用一個(gè)字節(jié)。

匯編語(yǔ)言的基本語(yǔ)法

請(qǐng)看下面數(shù)據(jù)定義的例子,注意DB定義的每個(gè)數(shù)據(jù)的存儲(chǔ)情況,左邊第一列是匯編程序?yàn)閿?shù)據(jù)分配的字節(jié)地址,第二列是相應(yīng)地址中存儲(chǔ)的數(shù)據(jù)或ASCII字符(均用十六進(jìn)制表示)。變量DATA7定義了3個(gè)數(shù)據(jù)和一個(gè)字符串,每個(gè)數(shù)據(jù)或串用","分開(kāi),它們分別存儲(chǔ)在偏移地址002E開(kāi)始的6個(gè)字節(jié)單元中。

匯編語(yǔ)言的基本語(yǔ)法0000

19

DATA1

DB

25

;十進(jìn)制數(shù)0001

89

DATA2

DB

10001001B

;二進(jìn)制數(shù)0002

12

DATA3

DB

12H

;十六進(jìn)制數(shù)0010

ORG

0010H

;指定偏移地址為10h0010

32353931

DATA4

DB‘2591’

;ASCII碼數(shù)0018

ORG

0018H

;指定偏移地址為18h0018

00

DATA5

DB?;保留一個(gè)字節(jié)0020

ORG

0020H

;指定偏移地址為20h0020

4D79206E616D

DATA6

DB

'MynameisJoe';ASCII碼字符

65206973204A

6F65002E

0A1002313042

DATA7

DB

10,10H,10B,'10B';不同的數(shù)據(jù)類型匯編語(yǔ)言的基本語(yǔ)法

DW(defineword)

DW偽指令用來(lái)定義字,對(duì)其后的每個(gè)數(shù)據(jù)分配2個(gè)字節(jié)(1個(gè)字),數(shù)據(jù)的低8位存儲(chǔ)在低字節(jié)地址中,高8位存儲(chǔ)在高字節(jié)地址中,如下例中的變量DATA8的數(shù)據(jù)存儲(chǔ)在0070字地址中,其中0070字節(jié)存儲(chǔ)0BAH,0071字節(jié)存儲(chǔ)03H。DW還可存儲(chǔ)變量或標(biāo)號(hào)的偏移地址。見(jiàn)下面DW偽指令的例子。

匯編語(yǔ)言的基本語(yǔ)法匯編語(yǔ)言的基本語(yǔ)法

DD(definedoubleword)

DD偽指令用來(lái)定義雙字,對(duì)其后的每個(gè)數(shù)據(jù)分配4個(gè)字節(jié)(2個(gè)字)。該偽指令同樣將數(shù)據(jù)轉(zhuǎn)換為十六進(jìn)制,并根據(jù)低地址存儲(chǔ)低字節(jié),高地址存儲(chǔ)高字節(jié)的規(guī)則來(lái)存放數(shù)據(jù)。如下例DATA15的存儲(chǔ)情況是:00A8:0F2H,00A9H:57H,00AAH:2AH,00ABH:5CH。

用DD存入地址時(shí),第一個(gè)字為偏移地址,第二個(gè)字為段地址。

匯編語(yǔ)言的基本語(yǔ)法匯編語(yǔ)言的基本語(yǔ)法

DQ(definequadword)

DQ偽指令用來(lái)定義4字,即64位字長(zhǎng)的數(shù)據(jù),DQ之后的每個(gè)數(shù)據(jù)占用8個(gè)字節(jié)(4個(gè)字)。

DT(definetenbytes)

DT偽指令用來(lái)為壓縮的BCD數(shù)據(jù)分配存儲(chǔ)單元,它雖然可以分配10個(gè)字節(jié)(5個(gè)字),但最多只能輸入18個(gè)數(shù)字,要注意的是,數(shù)據(jù)后面不需要加“H”。下面是DQ和DT的例子。

匯編語(yǔ)言的基本語(yǔ)法匯編語(yǔ)言的基本語(yǔ)法

DUP(duplicate)

DUP偽指令可以按照給定的次數(shù)來(lái)復(fù)制某個(gè)(某些)操作數(shù),它可以避免多次鍵入同樣一個(gè)數(shù)據(jù)。例如,把6個(gè)FFH存入相繼字節(jié)中,可以用下面兩種方法,顯然用DUP的方法更簡(jiǎn)便些。

存入6字節(jié)的FFH

DATA20DB0FFH0FFH0FFH0FFH0FFH0FFH;

DATA21DB6DUP(0FFH)

匯編語(yǔ)言的基本語(yǔ)法

DUP操作一般用來(lái)保留數(shù)據(jù)區(qū),如用數(shù)據(jù)定義偽指令"DB64DUP(?)"可保留64個(gè)字節(jié)單元。DUP還可以嵌套。

匯編語(yǔ)言的基本語(yǔ)法表達(dá)式賦值偽操作EQU

有時(shí)程序中多次出現(xiàn)同一個(gè)表達(dá)式,為方便起見(jiàn)可以用賦植偽操作給表達(dá)式賦予一個(gè)名字,其格式如下:

Expresstion_nameEQUExpresstion

此后,程序中凡需要用到該表達(dá)式之處就可以用表達(dá)式名來(lái)代替。上式中表達(dá)式可以是任何有效的操作數(shù)格式,可以是任何可以求出常數(shù)值的表達(dá)式,也可以是任何有效的助記符。

匯編語(yǔ)言的基本語(yǔ)法EQU是一個(gè)賦值偽操作(偽指令),它給一個(gè)數(shù)據(jù)標(biāo)號(hào)賦于一個(gè)常數(shù)值,但這個(gè)常數(shù)不占用存儲(chǔ)單元。當(dāng)這個(gè)數(shù)據(jù)標(biāo)號(hào)出現(xiàn)在程序中時(shí),匯編程序即用它的常數(shù)值代替數(shù)據(jù)標(biāo)號(hào)。EQU可以在數(shù)據(jù)段之外使用,甚至可用在代碼段中間。

匯編語(yǔ)言的基本語(yǔ)法

假定在數(shù)據(jù)段和代碼段中要多次使用一個(gè)數(shù)據(jù)(如25),那么在編程時(shí)凡是用到25的地方都可用數(shù)據(jù)標(biāo)號(hào)COUNT來(lái)表示。如果程序想修改這個(gè)數(shù)據(jù),那么只需修改EQU的賦值,而無(wú)須修改程序中其它部分,如COUNTER和MOV語(yǔ)句就不必修改。

COUNT

EQU25COUNTER

DB

COUNT

MOV

AL,

COUNT

匯編語(yǔ)言的基本語(yǔ)法DATA

EQUHEIGHT+12

;地址表達(dá)式賦以符號(hào)ALPHA

EQU7

;常數(shù)賦以符號(hào)名BETA

EQUALPHA-2

;把7-2=5賦以符號(hào)名BETAADDR

EQUVAR+BETA

;VAR+5賦以符號(hào)名ADDRB

EQU[BP+8]

;變址引用賦以符號(hào)名BP8

EQUDS:[BP+8];加段前綴的變址引用賦以符號(hào)名P8

匯編語(yǔ)言的基本語(yǔ)法注意:在EQU語(yǔ)句的表達(dá)式中,如果有變量或標(biāo)號(hào)的表達(dá)式,則在該語(yǔ)句前應(yīng)該先給出它們的定義。如上例,ALPHA必須在BETA之前定義,否則匯編程序?qū)⒅甘境鲥e(cuò)。

匯編語(yǔ)言的基本語(yǔ)法=偽操作

賦值偽操作"="的作用與EQU類似。它們之間的區(qū)別是,EQU偽操作中的標(biāo)號(hào)名是不允許重復(fù)定義的,而=偽操作是允許重復(fù)定義的。

匯編語(yǔ)言的基本語(yǔ)法例如,TMP

EQU5

TMP

EQUTMP+1

則是錯(cuò)誤語(yǔ)句,因?yàn)門(mén)MP已賦值為5,就不能再把它定義為其它數(shù)值。

而TMP=5

TMP=TMP+1

則是允許使用的,因?yàn)?偽操作允許重復(fù)定義。第一個(gè)語(yǔ)句TMP的值為5,第二個(gè)語(yǔ)句TMP的值就為6了。

匯編語(yǔ)言的基本語(yǔ)法地址計(jì)數(shù)器與對(duì)準(zhǔn)偽指令

1.地址計(jì)數(shù)器$

在匯編程序?qū)υ闯绦騾R編的過(guò)程中,使用地址計(jì)數(shù)器來(lái)保存當(dāng)前正在匯編的指令的地址。地址計(jì)數(shù)器的值在匯編語(yǔ)言中可用$來(lái)表示。

當(dāng)$用在偽指令的參數(shù)字段時(shí),它所表示的是地

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論