![匯編語(yǔ)言的基本語(yǔ)法課件_第1頁(yè)](http://file4.renrendoc.com/view/37c837737512362daf0e8db0ba28d016/37c837737512362daf0e8db0ba28d0161.gif)
![匯編語(yǔ)言的基本語(yǔ)法課件_第2頁(yè)](http://file4.renrendoc.com/view/37c837737512362daf0e8db0ba28d016/37c837737512362daf0e8db0ba28d0162.gif)
![匯編語(yǔ)言的基本語(yǔ)法課件_第3頁(yè)](http://file4.renrendoc.com/view/37c837737512362daf0e8db0ba28d016/37c837737512362daf0e8db0ba28d0163.gif)
![匯編語(yǔ)言的基本語(yǔ)法課件_第4頁(yè)](http://file4.renrendoc.com/view/37c837737512362daf0e8db0ba28d016/37c837737512362daf0e8db0ba28d0164.gif)
![匯編語(yǔ)言的基本語(yǔ)法課件_第5頁(yè)](http://file4.renrendoc.com/view/37c837737512362daf0e8db0ba28d016/37c837737512362daf0e8db0ba28d0165.gif)
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度出租車(chē)司機(jī)勞動(dòng)權(quán)益保護(hù)協(xié)議范本
- 二零二五年度留學(xué)生就業(yè)創(chuàng)業(yè)扶持與職業(yè)發(fā)展規(guī)劃協(xié)議
- 2025年度企業(yè)合同終止法律咨詢及執(zhí)行律師合同
- 游客卡(游客俱樂(lè)部)景區(qū)合作協(xié)議書(shū)范本
- 臺(tái)球室合伙合同范本
- 二零二五年度事業(yè)單位退休人員返聘管理合同
- 二零二五年度辣椒產(chǎn)業(yè)鏈融資擔(dān)保合同
- 2025年度砍伐合同范文:綠色林業(yè)發(fā)展合作協(xié)議
- 二零二五年度養(yǎng)老機(jī)構(gòu)護(hù)理員勞動(dòng)權(quán)益保障與管理協(xié)議
- 2025年度車(chē)輛不過(guò)戶責(zé)任界定與賠償標(biāo)準(zhǔn)協(xié)議
- 城鄉(xiāng)環(huán)衛(wèi)一體化保潔服務(wù)迎接重大節(jié)日、活動(dòng)的保障措施
- 醫(yī)院-9S管理共88張課件
- 設(shè)立登記通知書(shū)
- 高考作文復(fù)習(xí):議論文論證方法課件15張
- 2022醫(yī)學(xué)課件前列腺炎指南模板
- MySQL數(shù)據(jù)庫(kù)項(xiàng)目式教程完整版課件全書(shū)電子教案教材課件(完整)
- 藥品生產(chǎn)質(zhì)量管理工程完整版課件
- 《網(wǎng)絡(luò)服務(wù)器搭建、配置與管理-Linux(RHEL8、CentOS8)(微課版)(第4版)》全冊(cè)電子教案
- 職業(yè)衛(wèi)生教學(xué)課件生物性有害因素所致職業(yè)性損害
- 降“四高”健康教育課件
- 五十鈴、豐田全球化研究
評(píng)論
0/150
提交評(píng)論