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

下載本文檔

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

文檔簡介

1、匯編語言的基本語法匯編語言的基本語法 1.1. 匯編語言源程序的格式匯編語言源程序的格式DATA SEGMENT AT 2000HARRAY DB a1,a2,a3,a10(a1a10為立即數(shù))為立即數(shù))COUNT EQU $ - ARRAYSUM DW ?DATA ENDSSTACK SEGMENT PARA STACK STACKSTAK DB 10 DUP (?)TOP EQU LENGTH STAKSTACKENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV AX,0 MOV

2、 DI,OFFSET SUM MOV BX,OFFSET ARRAY MOV CX,COUNTLOP: ADD AL,BX ADC AH,0 INC BX LOOP LOP MOV DI,AX MOV AH,4CH INT 21HCODE ENDS END START匯編語言源程序格式的特點(diǎn)是匯編語言源程序格式的特點(diǎn)是: 1 .分段結(jié)構(gòu)分段結(jié)構(gòu)2 .語句行語句行匯編語言程序的語句有兩類:匯編語言程序的語句有兩類:( 1 ) 指令性語句指令性語句 ( 2 ) 指示性語句指示性語句 匯編語言源程序語句的格式匯編語言源程序語句的格式 匯編語言源程序中的每個(gè)語句可以由四項(xiàng)組成,匯編語言源程序中的每個(gè)語

3、句可以由四項(xiàng)組成,格式如下:格式如下:名字名字 操作操作 操作數(shù)操作數(shù) ;注釋注釋其中:其中:名字項(xiàng)是指一個(gè)標(biāo)號(hào)或變量。名字項(xiàng)是指一個(gè)標(biāo)號(hào)或變量。操作項(xiàng)是一個(gè)操作碼的助記符,它可以是指令、操作項(xiàng)是一個(gè)操作碼的助記符,它可以是指令、偽指令或宏指令名。偽指令或宏指令名。 操作數(shù)項(xiàng)由一個(gè)或多個(gè)表達(dá)式組成,操作數(shù)項(xiàng)由一個(gè)或多個(gè)表達(dá)式組成,它提供為執(zhí)行所要求的操作而需要的信它提供為執(zhí)行所要求的操作而需要的信息。操作數(shù)項(xiàng)可以是常數(shù)、寄存器、標(biāo)息。操作數(shù)項(xiàng)可以是常數(shù)、寄存器、標(biāo)號(hào)、變量或由表達(dá)式組成。號(hào)、變量或由表達(dá)式組成。注釋項(xiàng)用來說明程序或語句的功能。注釋項(xiàng)用來說明程序或語句的功能。;為識(shí)別注釋項(xiàng)的開始

4、。為識(shí)別注釋項(xiàng)的開始。;也可以從也可以從一行的第一個(gè)字符開始,此時(shí)整行都是一行的第一個(gè)字符開始,此時(shí)整行都是注釋,常用來說明下面一段程序的功能。注釋,常用來說明下面一段程序的功能。 上面四項(xiàng)中帶方括號(hào)的兩項(xiàng)是可選項(xiàng)。上面四項(xiàng)中帶方括號(hào)的兩項(xiàng)是可選項(xiàng)。各項(xiàng)之間必須用各項(xiàng)之間必須用空格空格(space)或)或水水平制表平制表(Tab)符隔開。)符隔開。(1) 名字項(xiàng)名字項(xiàng)(2) 操作項(xiàng)操作項(xiàng)(3) 操作數(shù)項(xiàng)操作數(shù)項(xiàng)(4) 注釋項(xiàng)注釋項(xiàng)(1) 名字項(xiàng)名字項(xiàng)源程序中用下列字符來表示名字:源程序中用下列字符來表示名字:字母字母AZ數(shù)字?jǐn)?shù)字09專用字符專用字符 ?、?、 、-、除數(shù)字外,所有字符都可以放在

5、源語句的除數(shù)字外,所有字符都可以放在源語句的第一個(gè)位置。名字中如果用到第一個(gè)位置。名字中如果用到則必須是第一則必須是第一個(gè)字符。可以用很多字符來說明名字,但只有個(gè)字符??梢杂煤芏嘧址麃碚f明名字,但只有前面的前面的31個(gè)字符能被匯編程序所識(shí)別。個(gè)字符能被匯編程序所識(shí)別。 一般說來,名字項(xiàng)可以是標(biāo)號(hào)或變量。一般說來,名字項(xiàng)可以是標(biāo)號(hào)或變量。它它們都用來表示本語句的符號(hào)地址們都用來表示本語句的符號(hào)地址,都是可有可,都是可有可無的,無的,只有當(dāng)需要用符號(hào)地址來訪問該語句時(shí)只有當(dāng)需要用符號(hào)地址來訪問該語句時(shí)它才需要出現(xiàn)。它才需要出現(xiàn)。 標(biāo)號(hào):標(biāo)號(hào)在代碼段中定義,后面跟著標(biāo)號(hào):標(biāo)號(hào)在代碼段中定義,后面跟著

6、冒號(hào):,此外,它還可以作為過程名定義。冒號(hào):,此外,它還可以作為過程名定義。 變量:變量在數(shù)據(jù)段或附加數(shù)據(jù)段中定變量:變量在數(shù)據(jù)段或附加數(shù)據(jù)段中定義,后面不跟冒號(hào)。義,后面不跟冒號(hào)。 變量經(jīng)常在操作數(shù)字段出變量經(jīng)常在操作數(shù)字段出現(xiàn)?,F(xiàn)。(2)操作項(xiàng))操作項(xiàng)操作項(xiàng)可以是指令、偽指令或宏指操作項(xiàng)可以是指令、偽指令或宏指令的助記符。對(duì)于指令,匯編程序?qū)⑵淞畹闹浄?。?duì)于指令,匯編程序?qū)⑵浞g為機(jī)器語言指令。對(duì)于偽指令,匯翻譯為機(jī)器語言指令。對(duì)于偽指令,匯編程序?qū)⒏鶕?jù)其所要求的功能進(jìn)行處理。編程序?qū)⒏鶕?jù)其所要求的功能進(jìn)行處理。對(duì)于宏指令,則將根據(jù)其定義展開。對(duì)于宏指令,則將根據(jù)其定義展開。 (3) 操

7、作數(shù)項(xiàng)操作數(shù)項(xiàng) 操作數(shù)項(xiàng)由一個(gè)或多個(gè)表達(dá)式組成,多個(gè)操作數(shù)項(xiàng)由一個(gè)或多個(gè)表達(dá)式組成,多個(gè)操作數(shù)項(xiàng)之間一般用逗號(hào)分開。對(duì)于指令,操操作數(shù)項(xiàng)之間一般用逗號(hào)分開。對(duì)于指令,操作數(shù)項(xiàng)一般給出操作數(shù)地址,它們可能有一個(gè),作數(shù)項(xiàng)一般給出操作數(shù)地址,它們可能有一個(gè),或二個(gè),或三個(gè),或一個(gè)也沒有。對(duì)于偽操作或二個(gè),或三個(gè),或一個(gè)也沒有。對(duì)于偽操作或宏指令,則給出它們所要求的參數(shù)?;蚝曛噶?,則給出它們所要求的參數(shù)。操作數(shù)項(xiàng)可以是常數(shù)、寄存器、標(biāo)號(hào)、變操作數(shù)項(xiàng)可以是常數(shù)、寄存器、標(biāo)號(hào)、變量或由表達(dá)式組成。量或由表達(dá)式組成。 (4) 注釋項(xiàng)注釋項(xiàng)注釋項(xiàng)用來說明一段程序、一條或幾條指注釋項(xiàng)用來說明一段程序、一條或幾條

8、指令的功能。對(duì)于匯編語言程序來說,注釋項(xiàng)的令的功能。對(duì)于匯編語言程序來說,注釋項(xiàng)的作用是很明顯的,它可以使程序容易被讀懂,作用是很明顯的,它可以使程序容易被讀懂,因此匯編語言程序必須寫好注釋。注釋應(yīng)該寫因此匯編語言程序必須寫好注釋。注釋應(yīng)該寫出本條(或本段)指令在程序中的功能和作用,出本條(或本段)指令在程序中的功能和作用,而不應(yīng)該只寫指令的動(dòng)作。讀者在有機(jī)會(huì)閱讀而不應(yīng)該只寫指令的動(dòng)作。讀者在有機(jī)會(huì)閱讀程序例子時(shí),應(yīng)注意學(xué)習(xí)注釋的寫法,在編制程序例子時(shí),應(yīng)注意學(xué)習(xí)注釋的寫法,在編制程序時(shí),更應(yīng)學(xué)會(huì)寫好注釋。程序時(shí),更應(yīng)學(xué)會(huì)寫好注釋。 指令性語句指令性語句 格式為:格式為: 標(biāo)號(hào)標(biāo)號(hào) : 操作碼

9、操作碼 操作數(shù)操作數(shù) ; 注釋注釋 帶方括號(hào)的為任選項(xiàng),帶方括號(hào)的為任選項(xiàng),標(biāo)號(hào)是指令的符號(hào)地址,標(biāo)號(hào)是指令的符號(hào)地址,操作碼和操作數(shù)是用匯編語言指令表示的指令部分操作碼和操作數(shù)是用匯編語言指令表示的指令部分,注釋是對(duì)該語句在本程序中的功能的說明。注釋是對(duì)該語句在本程序中的功能的說明。指示性語句指示性語句格式為:格式為: 名字名字 / 變量變量 命令命令 參數(shù)參數(shù) ; 注釋注釋 命令指示匯編程序進(jìn)行某種匯編操作命令指示匯編程序進(jìn)行某種匯編操作,參數(shù)是有關(guān)的數(shù)據(jù),參數(shù)是有關(guān)的數(shù)據(jù),名字是段名、符號(hào)名等標(biāo)識(shí)符,變量用變量名表示。名字是段名、符號(hào)名等標(biāo)識(shí)符,變量用變量名表示。 常量、標(biāo)識(shí)符和表達(dá)式常

10、量、標(biāo)識(shí)符和表達(dá)式一、常量一、常量其值在程序中不能改變的量其值在程序中不能改變的量,在匯編語言源程序中的常量有:在匯編語言源程序中的常量有:數(shù)字常量、字符常量和符號(hào)常量數(shù)字常量、字符常量和符號(hào)常量( 1 ) 數(shù)字常量可以是二進(jìn)制數(shù)、八進(jìn)制數(shù)、十進(jìn)數(shù)字常量可以是二進(jìn)制數(shù)、八進(jìn)制數(shù)、十進(jìn)制數(shù)或十六進(jìn)制數(shù)表示制數(shù)或十六進(jìn)制數(shù)表示( 2 ) 字符常量是用單引號(hào)字符常量是用單引號(hào) 括起來的括起來的ASCII字字符,符, 其值是該字符的其值是該字符的ASCII代碼值代碼值( 3 ) 符號(hào)常量是用標(biāo)識(shí)符定義的常量。符號(hào)常量是用標(biāo)識(shí)符定義的常量。例如,采用符號(hào)定義語句例如,采用符號(hào)定義語句 PORTA EQU

11、 80H,則指令則指令 MOV AL,PORTA 與指令與指令 MOV AL,80H 等價(jià)。等價(jià)。二、標(biāo)識(shí)符二、標(biāo)識(shí)符在編程時(shí)建立的有特定意義的字符序列,標(biāo)識(shí)符在編程時(shí)建立的有特定意義的字符序列,標(biāo)識(shí)符可用作符號(hào)常量、名字、變量和標(biāo)號(hào)等??捎米鞣?hào)常量、名字、變量和標(biāo)號(hào)等。組成標(biāo)識(shí)符有如下規(guī)定:組成標(biāo)識(shí)符有如下規(guī)定: ( 1 ) 組成標(biāo)識(shí)符的字符有:組成標(biāo)識(shí)符的字符有: 英文大寫字母:英文大寫字母:AZ; 英文小寫字母:英文小寫字母: a-z; 數(shù)字?jǐn)?shù)字09; 字符字符?、_ 、$;( 2 )字符長度不超過字符長度不超過3l個(gè);個(gè); ( 3 ) 首字符不能是數(shù)字;首字符不能是數(shù)字; ( 4 )

12、 ? 不能單獨(dú)作為一個(gè)標(biāo)識(shí)符;不能單獨(dú)作為一個(gè)標(biāo)識(shí)符; ( 5 ) 不能把保留字用作標(biāo)識(shí)符,保留字包括助記符、不能把保留字用作標(biāo)識(shí)符,保留字包括助記符、寄存器名等。寄存器名等。三、表達(dá)式三、表達(dá)式 表達(dá)式是常數(shù)、標(biāo)號(hào)、變量與一些操作符表達(dá)式是常數(shù)、標(biāo)號(hào)、變量與一些操作符相組合的序列,可以有數(shù)字表達(dá)式和地址表達(dá)相組合的序列,可以有數(shù)字表達(dá)式和地址表達(dá)式兩種。在匯編期間,匯編程序按照一定的優(yōu)式兩種。在匯編期間,匯編程序按照一定的優(yōu)先規(guī)則對(duì)表達(dá)式進(jìn)行計(jì)算后可得到一個(gè)數(shù)值或先規(guī)則對(duì)表達(dá)式進(jìn)行計(jì)算后可得到一個(gè)數(shù)值或一個(gè)地址。一個(gè)地址。常用的表達(dá)式操作符介紹如下:常用的表達(dá)式操作符介紹如下: (1) 算術(shù)

13、操作符算術(shù)操作符 算術(shù)操作符有算術(shù)操作符有+、-、*、/ 和和MOD。MOD是指除法運(yùn)算后得到的余數(shù),如是指除法運(yùn)算后得到的余數(shù),如19/7的商是的商是2,而,而19 MOD 7則為則為5(余(余數(shù))。數(shù))。 算術(shù)操作符可以用于數(shù)字表達(dá)式或地算術(shù)操作符可以用于數(shù)字表達(dá)式或地址表達(dá)式中,但當(dāng)它用于地址表達(dá)式時(shí),址表達(dá)式中,但當(dāng)它用于地址表達(dá)式時(shí),只有當(dāng)其結(jié)果有明確的物理意義時(shí)才是只有當(dāng)其結(jié)果有明確的物理意義時(shí)才是有效的結(jié)果。例如兩個(gè)地址相乘或相除有效的結(jié)果。例如兩個(gè)地址相乘或相除是無意義的。在地址表達(dá)式中,可以使是無意義的。在地址表達(dá)式中,可以使用用 + 或或 - ,但也必須注意其物理意義。,但

14、也必須注意其物理意義。 例如把兩個(gè)不同段的地址相加也是無意義的。例如把兩個(gè)不同段的地址相加也是無意義的。經(jīng)常使用的是地址經(jīng)常使用的是地址 數(shù)字量,它是有意義的。例如數(shù)字量,它是有意義的。例如SUM +1是指是指SUM字節(jié)單元的下一個(gè)字節(jié)單元的地址字節(jié)單元的下一個(gè)字節(jié)單元的地址(注意:不是指(注意:不是指SUM單元的內(nèi)容加單元的內(nèi)容加1),而),而SUM-1則則是指是指SUM字節(jié)單元的前一個(gè)字節(jié)單元的地址。字節(jié)單元的前一個(gè)字節(jié)單元的地址。例:例: 如果要求把首地址為如果要求把首地址為BLOCK的字?jǐn)?shù)組的的字?jǐn)?shù)組的第第6個(gè)字傳送到個(gè)字傳送到DX寄存器,可用指令如下:寄存器,可用指令如下:MOV D

15、X, BLOCK+ (6-1) * 2 例:例: 如數(shù)組如數(shù)組ARRAY定義如下,寫出把數(shù)組長定義如下,寫出把數(shù)組長度(字?jǐn)?shù))存入度(字?jǐn)?shù))存入CX寄存器的指令。寄存器的指令。ARRAY DW 1, 2, 3, 4, 5, 6, 7ARYENDDW ?其中其中ARYEND是為計(jì)算數(shù)組長度而建立的符號(hào)是為計(jì)算數(shù)組長度而建立的符號(hào)地址,所需指令如下:地址,所需指令如下:MOV CX, (ARYEND-ARRAY)/2匯編程序在匯編期間將計(jì)算出表達(dá)式的值而形匯編程序在匯編期間將計(jì)算出表達(dá)式的值而形成指令:成指令:MOV CX, 7 (2) 邏輯操作符邏輯操作符 邏輯操作符有:邏輯操作符有:AND(與

16、)、(與)、OR(或)、(或)、XOR(異或)、(異或)、NOT(非)。(非)。邏輯操作符都是按位操作的,只能用于數(shù)字表邏輯操作符都是按位操作的,只能用于數(shù)字表達(dá)式中。邏輯操作符要求達(dá)式中。邏輯操作符要求匯編程序?qū)ζ淝昂髢蓚€(gè)操匯編程序?qū)ζ淝昂髢蓚€(gè)操作數(shù)(或表達(dá)式)作指定的邏輯操作作數(shù)(或表達(dá)式)作指定的邏輯操作。 例:例:OUT PORT_VAL AND 0FEH, AL上例中上例中PORT_VAL為端口號(hào),為端口號(hào),OUT指令中的表達(dá)式說明只為偶數(shù)號(hào)端口輸指令中的表達(dá)式說明只為偶數(shù)號(hào)端口輸出數(shù)據(jù)。出數(shù)據(jù)。 (3) 關(guān)系操作符關(guān)系操作符關(guān)系操作符有:關(guān)系操作符有:EQ(相等)、(相等)、NE(

17、不(不等)、等)、LT(小于)、(小于)、GT(大于)、(大于)、LE(小于(小于或等于)、或等于)、GE(大于或等于)。(大于或等于)。關(guān)系操作符的兩個(gè)操作數(shù)必須都是數(shù)字或關(guān)系操作符的兩個(gè)操作數(shù)必須都是數(shù)字或是同一段內(nèi)的兩個(gè)存儲(chǔ)器地址。計(jì)算的結(jié)果應(yīng)是同一段內(nèi)的兩個(gè)存儲(chǔ)器地址。計(jì)算的結(jié)果應(yīng)為邏輯值:結(jié)果為真,表示為為邏輯值:結(jié)果為真,表示為0FFFFH;結(jié)果;結(jié)果為假,則表示為為假,則表示為0。 例如:例如:MOV BX,(PORT_VAL LT 5) AND 20) OR (PORT_VAL GE 5) AND 30)則當(dāng)則當(dāng)PORT_VAL 5時(shí),匯編結(jié)果應(yīng)該是:時(shí),匯編結(jié)果應(yīng)該是:MOV

18、 BX, 20否則,匯編結(jié)果應(yīng)該是:否則,匯編結(jié)果應(yīng)該是:MOV BX, 30 (4) 數(shù)值回送操作符數(shù)值回送操作符 數(shù)值回送操作符有:數(shù)值回送操作符有:TYPE、LENGTH、SIZE、OFFSET、SEG等。等。數(shù)值回送操作符把一些特征或存儲(chǔ)數(shù)值回送操作符把一些特征或存儲(chǔ)器地址的一部分作為數(shù)值回送。器地址的一部分作為數(shù)值回送。 TYPE格式為:格式為:TYPE 表達(dá)式表達(dá)式如果表達(dá)式是變量,則匯編程序?qū)⑷绻磉_(dá)式是變量,則匯編程序?qū)⒒厮驮撟兞康囊宰止?jié)數(shù)表示的類型:回送該變量的以字節(jié)數(shù)表示的類型:DB為為1,DW為為2,DD為為4,DF為為6,DQ為為8,DT為為10。如果表達(dá)式是標(biāo)號(hào),則。

19、如果表達(dá)式是標(biāo)號(hào),則匯編程序?qū)⒒厮痛碓摌?biāo)號(hào)類型的數(shù)值:匯編程序?qū)⒒厮痛碓摌?biāo)號(hào)類型的數(shù)值:NEAR為為 -1,F(xiàn)AR為為 -2。如果表達(dá)式。如果表達(dá)式為常數(shù),則應(yīng)回送為常數(shù),則應(yīng)回送0。 舉例:舉例:ARRAY DW 1, 2, 3則對(duì)于指令則對(duì)于指令A(yù)DD SI, TYPE ARRAY匯編程序?qū)⑵湫纬蔀椋簠R編程序?qū)⑵湫纬蔀椋篈DD SI, 2 LENGTH格式為:格式為:LENGTH 變量變量對(duì)于變量中使用對(duì)于變量中使用DUP的情況,匯編的情況,匯編程序?qū)⒒厮头峙浣o該變量的單元數(shù),而程序?qū)⒒厮头峙浣o該變量的單元數(shù),而對(duì)于其他情況則送對(duì)于其他情況則送1。 舉例舉例1:FEES DW 100

20、DUP (0)對(duì)于指令對(duì)于指令MOV CX, LENGTH FEES 匯編程序?qū)⑹蛊湫纬蔀椋簠R編程序?qū)⑹蛊湫纬蔀椋篗OV CX, 100舉例舉例2:ARRAY DW 1, 2, 3對(duì)于指令對(duì)于指令MOV CX, LENGTH ARRAY 匯編程序?qū)⑹蛊湫纬蔀椋簠R編程序?qū)⑹蛊湫纬蔀椋篗OV CX, 1舉例舉例3:TABLE DB ABCD對(duì)于指令對(duì)于指令MOV CX, LENGTH TABLE匯編程序?qū)⑹蛊湫纬蔀椋簠R編程序?qū)⑹蛊湫纬蔀椋篗OV CX, 1 SIZE格式為:格式為:SIZE 變量變量匯編程序應(yīng)回送分配給該變量的字匯編程序應(yīng)回送分配給該變量的字節(jié)數(shù)。但是,此值是節(jié)數(shù)。但是,此值是LE

21、NGTH值和值和TYPE值的乘積。值的乘積。 例如:例如: MOV CX, SIZE FEES將形成為將形成為 MOV CX, 200又例如:又例如: MOV CX, SIZE ARRAY將形成為將形成為 MOV CX, 2又例如:又例如: MOV CX, SIZE TABLE將形成為將形成為 MOV CX, 1。 OFFSET格式為:格式為:OFFSET 變量或標(biāo)號(hào)變量或標(biāo)號(hào)匯編程序?qū)⒒厮妥兞炕驑?biāo)號(hào)的偏移地址值。匯編程序?qū)⒒厮妥兞炕驑?biāo)號(hào)的偏移地址值。舉例:舉例:MOV BX, OFFSET OPER_ONE匯編程序?qū)R編程序?qū)PER_ONE的偏移地址作為的偏移地址作為立即數(shù)回送給指令,而在

22、執(zhí)行時(shí)則將該偏移地立即數(shù)回送給指令,而在執(zhí)行時(shí)則將該偏移地址裝入址裝入BX寄存器中。所以這條指令的功能與寄存器中。所以這條指令的功能與指令指令LEA BX, OPER_ONE是等價(jià)的。是等價(jià)的。 SEG格式為:格式為:SEG 變量或標(biāo)號(hào)變量或標(biāo)號(hào)匯編程序?qū)⒒厮妥兞炕驑?biāo)號(hào)的段地址值。匯編程序?qū)⒒厮妥兞炕驑?biāo)號(hào)的段地址值。舉例:如果舉例:如果DATA_SEG是從存儲(chǔ)器的是從存儲(chǔ)器的05000H地地址開始的一個(gè)數(shù)據(jù)段的段名,址開始的一個(gè)數(shù)據(jù)段的段名,OPER1是該段中的是該段中的一個(gè)變量名,則一個(gè)變量名,則MOV BX, SEG OPER1將把將把0500H作為立即數(shù)插入指令。實(shí)際上,作為立即數(shù)插入指

23、令。實(shí)際上,由于段地址是由連接程序分配的,所以該立即數(shù)是由于段地址是由連接程序分配的,所以該立即數(shù)是連接時(shí)插入的。執(zhí)行期間則使連接時(shí)插入的。執(zhí)行期間則使BX寄存器的內(nèi)容成為寄存器的內(nèi)容成為0500H。 PTR格式為:類型格式為:類型 PTR 符號(hào)地址符號(hào)地址PTR用來給已分配的存儲(chǔ)地址(用用來給已分配的存儲(chǔ)地址(用符號(hào)地址表示)賦予另一種屬性,使該符號(hào)地址表示)賦予另一種屬性,使該地址具有另一種類型。地址具有另一種類型。類型可有類型可有BYTE、WORD、DWORD、FWORD、QWORD、TBYTE、NEAR和和FAR等幾種,所以等幾種,所以PTR也可以用來建立字、雙字、四字或也可以用來建立

24、字、雙字、四字或段內(nèi)及段間的指令單元等。段內(nèi)及段間的指令單元等。 舉例:已有數(shù)據(jù)定義如下:舉例:已有數(shù)據(jù)定義如下:TWO_BYTE DW ?可以用以下語句對(duì)這兩個(gè)字節(jié)賦予另一種可以用以下語句對(duì)這兩個(gè)字節(jié)賦予另一種類型定義:類型定義: ONE_BYTE EQU BYTE PTR TWO_BYTE這里這里ONE_BYTE和和TWO_BYTE兩個(gè)符號(hào)兩個(gè)符號(hào)地址具有相同的段地址和偏移地址,但是它們地址具有相同的段地址和偏移地址,但是它們的類型屬性不同,前者為的類型屬性不同,前者為1,后者為,后者為2。 此外,有時(shí)指令要求使用此外,有時(shí)指令要求使用PTR操作符。例操作符。例如用如用 MOV BX, 5

25、指令把立即數(shù)存入指令把立即數(shù)存入BX寄存器內(nèi)容指寄存器內(nèi)容指定的存儲(chǔ)單元中,但匯編程序不能分清定的存儲(chǔ)單元中,但匯編程序不能分清是存入字單元還是字節(jié)單元,此時(shí)必須是存入字單元還是字節(jié)單元,此時(shí)必須用用PTR操作符來說明屬性,應(yīng)該寫明:操作符來說明屬性,應(yīng)該寫明: MOV BYTE PTR BX,5 或或 MOV WORD PTR BX,5 段操作符段操作符段操作符用來表示一個(gè)標(biāo)量、變量段操作符用來表示一個(gè)標(biāo)量、變量或地址表達(dá)式的段屬性?;虻刂繁磉_(dá)式的段屬性。格式為:格式為: 段寄存器段寄存器 地址表達(dá)式地址表達(dá)式段名段名 地址表達(dá)式地址表達(dá)式例如,用段前綴指定某段的地址操作例如,用段前綴指定某

26、段的地址操作數(shù)數(shù)MOV AX,ES:BX + SI SHORT用來修飾用來修飾JMP指令中轉(zhuǎn)向地址的屬性,指指令中轉(zhuǎn)向地址的屬性,指出轉(zhuǎn)向地址是在下一條指令地址的出轉(zhuǎn)向地址是在下一條指令地址的127個(gè)字個(gè)字節(jié)范圍之內(nèi)。節(jié)范圍之內(nèi)。例如:例如: JMP SHORT TAG ;轉(zhuǎn)移屬性為短;轉(zhuǎn)移屬性為短轉(zhuǎn)移轉(zhuǎn)移 . TAG: MOV. THIS格式為:格式為: THIS 屬性或類型屬性或類型THIS可以象可以象PTR一樣建立一個(gè)指定一樣建立一個(gè)指定類型(類型(BYTE、WORD、DWORD)或)或指定距離(指定距離(NEAR或或FAR)的地址操作)的地址操作數(shù)。數(shù)。該操作數(shù)的段地址和偏移地址與下該

27、操作數(shù)的段地址和偏移地址與下一個(gè)存儲(chǔ)單元地址相同一個(gè)存儲(chǔ)單元地址相同。 例如:例如: FIRST_TYPE EQU THIS BYTE WORD_TABLE DW 100 DUP (?)此時(shí)此時(shí)FIRST_TYPE的偏移地址和的偏移地址和WORD_TABLE完全相同,但它是字節(jié)類型的;而完全相同,但它是字節(jié)類型的;而WORD_TABLE則則是字類型的。是字類型的。又如:又如: START EQU THIS FAR MOV CX, 100這樣,這樣,MOV指令有一個(gè)指令有一個(gè)FAR屬性的符號(hào)地址屬性的符號(hào)地址START,這就允許其他段的,這就允許其他段的JMP指令直接跳轉(zhuǎn)到指令直接跳轉(zhuǎn)到STAR

28、T來。來。 HIGH和和LOW稱為字節(jié)分離操作符,它接收一個(gè)數(shù)或地稱為字節(jié)分離操作符,它接收一個(gè)數(shù)或地址表達(dá)式,址表達(dá)式,HIGH取其高位字節(jié),取其高位字節(jié),LOW取其低取其低位字節(jié)。位字節(jié)。例如:例如:CONST EQU 0ABCDH則則MOV AH, HIGH CONST將匯編成將匯編成 MOV AH, 0ABH指令指令 MOV AH, LOW CONST將匯編成將匯編成 MOV AH, 0CDH 操作符的優(yōu)先級(jí)操作符的優(yōu)先級(jí)我們知道表達(dá)式是常數(shù)、寄存器、我們知道表達(dá)式是常數(shù)、寄存器、標(biāo)號(hào)、變量和操作符的組合,在計(jì)算表標(biāo)號(hào)、變量和操作符的組合,在計(jì)算表達(dá)式時(shí),應(yīng)該首先計(jì)算優(yōu)先級(jí)高的操作達(dá)式

29、時(shí),應(yīng)該首先計(jì)算優(yōu)先級(jí)高的操作符,然后從左到右地對(duì)優(yōu)先級(jí)相同的操符,然后從左到右地對(duì)優(yōu)先級(jí)相同的操作符進(jìn)行計(jì)算。括號(hào)也可以改變計(jì)算次作符進(jìn)行計(jì)算。括號(hào)也可以改變計(jì)算次序,括號(hào)內(nèi)的表達(dá)式應(yīng)優(yōu)先計(jì)算。序,括號(hào)內(nèi)的表達(dá)式應(yīng)優(yōu)先計(jì)算。表達(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偽指令(偽指令(指示性語句)指示性語句) 偽指令又稱為偽操作,它是在對(duì)偽指令又稱為偽操作,它是在對(duì)源程序匯編期間由匯編程序處理的操作,源程序

30、匯編期間由匯編程序處理的操作,它們可以完成如它們可以完成如 定義數(shù)據(jù)、分配存儲(chǔ)定義數(shù)據(jù)、分配存儲(chǔ)區(qū)、指示程序結(jié)束等功能。區(qū)、指示程序結(jié)束等功能。 宏指令是由用戶按照宏定義格式宏指令是由用戶按照宏定義格式編寫的一段程序,其中語句可以是指令、編寫的一段程序,其中語句可以是指令、偽指令,甚至是已定義的宏指令。偽指令,甚至是已定義的宏指令。 偽指令和指令的區(qū)別在于,每一條指?jìng)沃噶詈椭噶畹膮^(qū)別在于,每一條指令必須生成機(jī)器代碼,然后在程序運(yùn)行期間令必須生成機(jī)器代碼,然后在程序運(yùn)行期間由由CPU來執(zhí)行其操作;而偽指令是在匯編期來執(zhí)行其操作;而偽指令是在匯編期間由匯編程序執(zhí)行的操作命令,除了數(shù)據(jù)定間由匯編程序

31、執(zhí)行的操作命令,除了數(shù)據(jù)定義及存儲(chǔ)器分配偽指令分配存儲(chǔ)器空間外,義及存儲(chǔ)器分配偽指令分配存儲(chǔ)器空間外,其它偽指令不生成目標(biāo)碼。和各種指令一樣,其它偽指令不生成目標(biāo)碼。和各種指令一樣,偽指令也是程序設(shè)計(jì)不可缺少的工具。下面?zhèn)沃噶钜彩浅绦蛟O(shè)計(jì)不可缺少的工具。下面介紹一些常用的偽指令。介紹一些常用的偽指令。 段定義偽指令段定義偽指令段定義偽指令是表示一個(gè)段開始和結(jié)束段定義偽指令是表示一個(gè)段開始和結(jié)束的命令的命令 。 段名段名 SEGMENT段名段名 ENDS 段名由用戶命名。對(duì)于數(shù)據(jù)段、附加段名由用戶命名。對(duì)于數(shù)據(jù)段、附加段和堆棧段來說,段內(nèi)一般是存儲(chǔ)單元的定義、段和堆棧段來說,段內(nèi)一般是存儲(chǔ)單元的

32、定義、分配等偽指令語句;對(duì)于代碼段中則主要是指分配等偽指令語句;對(duì)于代碼段中則主要是指令及偽指令語句。令及偽指令語句。定義了段還必須說明哪個(gè)段是代碼段,哪定義了段還必須說明哪個(gè)段是代碼段,哪個(gè)段是數(shù)據(jù)段。個(gè)段是數(shù)據(jù)段。ASSUME偽指令就是建立段偽指令就是建立段和段寄存器關(guān)系的偽指令,其格式為:和段寄存器關(guān)系的偽指令,其格式為:ASSUME 段寄存器名段寄存器名: 段名,段名,段寄存器名必須是段寄存器名必須是CS、DS、ES和和SS中中的一個(gè),而段名必須是由的一個(gè),而段名必須是由SEGMENT定義的段定義的段名。名。 例例; * * * * * * * * * * * * * * * * *

33、* * * * * *data_seg1 segment ; 定義數(shù)據(jù)段定義數(shù)據(jù)段 data_seg1 ends; * * * * * * * * * * * * * * * * * * * * * * * data_seg2 segment ; 定義附加段定義附加段data_seg2 ends; * * * * * * * * * * * * * * * * * * * * * * *code_seg segment ; 定義代碼段定義代碼段assume cs:code_seg, ds:data_seg1, es:data_seg2start: ; 程序執(zhí)行的起始地址程序執(zhí)行的起始地址; s

34、et DS register to current data segmentmov ax, data_seg1 ; 數(shù)據(jù)段地址數(shù)據(jù)段地址 mov ds, ax ; 存入存入DS寄存器寄存器; set ES register to current extra segmentmov ax, data_seg2 ; 附加段地址附加段地址mov es, ax ; 存入存入ES寄存器寄存器. code_seg ends ; 代碼段結(jié)束代碼段結(jié)束; * * * * * * * * * * * * * * * * * * * * * * * * * * end start 由于由于ASSUME偽指令只是指定

35、某個(gè)段分配偽指令只是指定某個(gè)段分配給哪一個(gè)段寄存器,它并不能把段地址裝入段給哪一個(gè)段寄存器,它并不能把段地址裝入段寄存器中,所以在代碼段中,還必須把段地址寄存器中,所以在代碼段中,還必須把段地址裝入相應(yīng)的段寄存器中:裝入相應(yīng)的段寄存器中:MOV AX,DATA_SEG1 ; 數(shù)據(jù)段地址數(shù)據(jù)段地址MOV DS,AX ; 存存入入DS寄存器寄存器MOV AX,DATA_SEG2 ; 附加段地址附加段地址MOV ES,AX ; 存存入入ES寄存器寄存器 如果程序中還定義了堆棧段如果程序中還定義了堆棧段STACK_SEG,也需,也需要把段地址裝入要把段地址裝入SS中:中:MOV AX,STACK_SE

36、G ; 堆棧段地址堆棧段地址MOV SS,AX ; 存存入入ES寄存器寄存器 注意,在程序中不需要用指令裝入代碼段注意,在程序中不需要用指令裝入代碼段的段地址,因?yàn)樵诔绦虺跏蓟瘯r(shí),裝入程序的段地址,因?yàn)樵诔绦虺跏蓟瘯r(shí),裝入程序已將代碼段的段地址裝入已將代碼段的段地址裝入CS寄存器了。寄存器了。程序開始和結(jié)束偽指令程序開始和結(jié)束偽指令在程序的開始可以用在程序的開始可以用NAME或或TITLE作為模塊的名字,其格式為:作為模塊的名字,其格式為:NAME 模塊名模塊名TITLE 文件名文件名表示源程序結(jié)束的偽指令的格式為:表示源程序結(jié)束的偽指令的格式為:END 標(biāo)號(hào)標(biāo)號(hào) 注意:注意:NAME及及TI

37、TLE偽指令并不是必偽指令并不是必需的,如果程序中既無需的,如果程序中既無NAME又無又無TITLE偽偽指令,則將用源文件名作為模塊名。指令,則將用源文件名作為模塊名。 END偽指令中的偽指令中的“標(biāo)號(hào)標(biāo)號(hào)”指示程序開始指示程序開始執(zhí)行的起始地址。如果多個(gè)程序模塊相連接,執(zhí)行的起始地址。如果多個(gè)程序模塊相連接,則只有主程序的則只有主程序的END要加上標(biāo)號(hào),其他子程要加上標(biāo)號(hào),其他子程序模塊則只用序模塊則只用END而不必指定標(biāo)號(hào)。上例最而不必指定標(biāo)號(hào)。上例最后使用了后使用了END START偽指令。匯編程序?qū)⒃趥沃噶?。匯編程序?qū)⒃谟鲇鯡ND時(shí)結(jié)束匯編,并且程序在運(yùn)行時(shí)從時(shí)結(jié)束匯編,并且程序在運(yùn)行

38、時(shí)從START開始執(zhí)行。開始執(zhí)行。 數(shù)據(jù)定義及存儲(chǔ)器分配偽指令數(shù)據(jù)定義及存儲(chǔ)器分配偽指令 8086提供了各種數(shù)據(jù)及存儲(chǔ)器分配偽提供了各種數(shù)據(jù)及存儲(chǔ)器分配偽指令,這些偽指令在匯編程序?qū)υ闯绦蜻M(jìn)行匯指令,這些偽指令在匯編程序?qū)υ闯绦蜻M(jìn)行匯編期間,由匯編程序完成數(shù)據(jù)類型定義及存編期間,由匯編程序完成數(shù)據(jù)類型定義及存 儲(chǔ)器分配等功能。儲(chǔ)器分配等功能。 數(shù)據(jù)定義及存儲(chǔ)器分配偽指令的格式是:數(shù)據(jù)定義及存儲(chǔ)器分配偽指令的格式是: 變量變量 助記符助記符 操作數(shù)操作數(shù), ,操作數(shù)操作數(shù) ;注釋注釋 數(shù)據(jù)定義及存儲(chǔ)器分配偽指令格式中的數(shù)據(jù)定義及存儲(chǔ)器分配偽指令格式中的變量變量是操作數(shù)的符號(hào)地址,它是可有可無的,

39、是操作數(shù)的符號(hào)地址,它是可有可無的,它的作用與指令語句前的標(biāo)號(hào)相同,區(qū)別是變它的作用與指令語句前的標(biāo)號(hào)相同,區(qū)別是變量后面不加冒號(hào)。如果語句中有變量,那么匯量后面不加冒號(hào)。如果語句中有變量,那么匯編程序?qū)⒉僮鲾?shù)的第一個(gè)字節(jié)的偏移地址賦于編程序?qū)⒉僮鲾?shù)的第一個(gè)字節(jié)的偏移地址賦于這個(gè)變量。這個(gè)變量。注釋注釋字段用來說明該偽指令的功能,它字段用來說明該偽指令的功能,它也不是必須有的。也不是必須有的。助記符助記符字段說明所用偽指令的助記符。字段說明所用偽指令的助記符。 下面介紹常用的數(shù)據(jù)定義偽指令。下面介紹常用的數(shù)據(jù)定義偽指令。DB(define byte)DB偽指令用來定義字節(jié),對(duì)其后的每個(gè)數(shù)據(jù)偽指

40、令用來定義字節(jié),對(duì)其后的每個(gè)數(shù)據(jù)都存儲(chǔ)在一個(gè)字節(jié)中。都存儲(chǔ)在一個(gè)字節(jié)中。DB能定義十進(jìn)制數(shù)、二進(jìn)能定義十進(jìn)制數(shù)、二進(jìn)制數(shù)、十六進(jìn)制數(shù)和制數(shù)、十六進(jìn)制數(shù)和ASCII字符,二進(jìn)制數(shù)和十六字符,二進(jìn)制數(shù)和十六進(jìn)制數(shù)要分別用進(jìn)制數(shù)要分別用B和和H表示,表示,ASCII字符用單引字符用單引號(hào)(號(hào)( )括起來。)括起來。DB還是唯一能定義字符串的偽操還是唯一能定義字符串的偽操作,串中的每個(gè)字符占用一個(gè)字節(jié)。作,串中的每個(gè)字符占用一個(gè)字節(jié)。 請(qǐng)看下面數(shù)據(jù)定義的例子,注意請(qǐng)看下面數(shù)據(jù)定義的例子,注意DB定義定義的每個(gè)數(shù)據(jù)的存儲(chǔ)情況,左邊第一列是匯編的每個(gè)數(shù)據(jù)的存儲(chǔ)情況,左邊第一列是匯編程序?yàn)閿?shù)據(jù)分配的字節(jié)地址

41、,第二列是相應(yīng)程序?yàn)閿?shù)據(jù)分配的字節(jié)地址,第二列是相應(yīng)地址中存儲(chǔ)的數(shù)據(jù)或地址中存儲(chǔ)的數(shù)據(jù)或ASCII字符(均用十六進(jìn)字符(均用十六進(jìn)制表示)。變量制表示)。變量DATA7定義了定義了3個(gè)數(shù)據(jù)和一個(gè)個(gè)數(shù)據(jù)和一個(gè)字符串,每個(gè)數(shù)據(jù)或串用字符串,每個(gè)數(shù)據(jù)或串用,分開,它們分別分開,它們分別存儲(chǔ)在偏移地址存儲(chǔ)在偏移地址002E開始的開始的6個(gè)字節(jié)單元中。個(gè)字節(jié)單元中。0000 19 DATA1 DB 25 ; 十進(jìn)制數(shù)十進(jìn)制數(shù) 0001 89 DATA2 DB 10001001B ; 二進(jìn)制數(shù)二進(jìn)制數(shù)0002 12 DATA3 DB 12H ; 十六進(jìn)制數(shù)十六進(jìn)制數(shù)0010 ORG0010H ; 指定偏移

42、地址為指定偏移地址為10h0010 32 35 39 31 DATA4 DB 2591 ; ASCII碼數(shù)碼數(shù)0018 ORG0018H ; 指定偏移地址為指定偏移地址為18h0018 00 DATA5 DB ? ; 保留一個(gè)字節(jié)保留一個(gè)字節(jié)0020 ORG0020H ; 指定偏移地址為指定偏移地址為20h0020 4D 79 20 6E 61 6DDATA6 DB My name is Joe ; ASCII碼字符碼字符 65 20 69 73 20 4A 6F 65002E 0A 10 02 31 30 42DATA7 DB 10,10H,10B,10B ; 不同的數(shù)據(jù)類型不同的數(shù)據(jù)類型

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

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

45、即64位字長的數(shù)據(jù),位字長的數(shù)據(jù),DQ之后的每個(gè)數(shù)據(jù)占用之后的每個(gè)數(shù)據(jù)占用8個(gè)字節(jié)(個(gè)字節(jié)(4個(gè)字)。個(gè)字)。DT(define ten bytes)DT偽指令用來為壓縮的偽指令用來為壓縮的BCD數(shù)據(jù)分配存儲(chǔ)單數(shù)據(jù)分配存儲(chǔ)單元,它雖然可以分配元,它雖然可以分配10個(gè)字節(jié)(個(gè)字節(jié)(5個(gè)字),但最多個(gè)字),但最多只能輸入只能輸入18個(gè)數(shù)字,要注意的是,數(shù)據(jù)后面不需個(gè)數(shù)字,要注意的是,數(shù)據(jù)后面不需要加要加“H”。下面是。下面是DQ和和DT的例子。的例子。 DUP(duplicate)DUP偽指令可以按照給定的次數(shù)來復(fù)制某個(gè)偽指令可以按照給定的次數(shù)來復(fù)制某個(gè)(某些)操作數(shù),它可以避免多次鍵入同樣一個(gè)(

46、某些)操作數(shù),它可以避免多次鍵入同樣一個(gè)數(shù)據(jù)。例如,把數(shù)據(jù)。例如,把6個(gè)個(gè)FFH存入相繼字節(jié)中,可以存入相繼字節(jié)中,可以用下面兩種方法,顯然用用下面兩種方法,顯然用DUP的方法更簡便些。的方法更簡便些。存入存入6字節(jié)的字節(jié)的FFHDATA20 DB 0FFH 0FFH 0FFH 0FFH 0FFH 0FFH;DATA21 DB 6 DUP(0FFH) DUP操作一般用來保留數(shù)據(jù)區(qū),操作一般用來保留數(shù)據(jù)區(qū),如用數(shù)據(jù)定義偽指令如用數(shù)據(jù)定義偽指令DB 64 DUP(?)可保留可保留64個(gè)字節(jié)單元。個(gè)字節(jié)單元。DUP還可以嵌套。還可以嵌套。 表達(dá)式賦值偽操作表達(dá)式賦值偽操作EQU 有時(shí)程序中多次出現(xiàn)同

47、一個(gè)表達(dá)式,為方便有時(shí)程序中多次出現(xiàn)同一個(gè)表達(dá)式,為方便起見可以用賦植偽操作給表達(dá)式賦予一個(gè)名字,其起見可以用賦植偽操作給表達(dá)式賦予一個(gè)名字,其格式如下:格式如下: Expresstion_name EQU Expresstion 此后,程序中凡需要用到該表達(dá)式之處就可此后,程序中凡需要用到該表達(dá)式之處就可以用表達(dá)式名來代替。上式中表達(dá)式可以是任何有以用表達(dá)式名來代替。上式中表達(dá)式可以是任何有效的操作數(shù)格式,可以是任何可以求出常數(shù)值的表效的操作數(shù)格式,可以是任何可以求出常數(shù)值的表達(dá)式,也可以是任何有效的助記符。達(dá)式,也可以是任何有效的助記符。 EQU是一個(gè)賦值偽操作(偽指是一個(gè)賦值偽操作(偽指

48、令),它給一個(gè)數(shù)據(jù)標(biāo)號(hào)賦于一個(gè)常數(shù)令),它給一個(gè)數(shù)據(jù)標(biāo)號(hào)賦于一個(gè)常數(shù)值,但這個(gè)常數(shù)不占用存儲(chǔ)單元。當(dāng)這值,但這個(gè)常數(shù)不占用存儲(chǔ)單元。當(dāng)這個(gè)數(shù)據(jù)標(biāo)號(hào)出現(xiàn)在程序中時(shí),匯編程序個(gè)數(shù)據(jù)標(biāo)號(hào)出現(xiàn)在程序中時(shí),匯編程序即用它的常數(shù)值代替數(shù)據(jù)標(biāo)號(hào)。即用它的常數(shù)值代替數(shù)據(jù)標(biāo)號(hào)。EQU可可以在數(shù)據(jù)段之外使用,甚至可用在代碼以在數(shù)據(jù)段之外使用,甚至可用在代碼段中間。段中間。 假定在數(shù)據(jù)段和代碼段中要多次使用一個(gè)假定在數(shù)據(jù)段和代碼段中要多次使用一個(gè)數(shù)據(jù)(如數(shù)據(jù)(如25),那么在編程時(shí)凡是用到),那么在編程時(shí)凡是用到25的地的地方都可用數(shù)據(jù)標(biāo)號(hào)方都可用數(shù)據(jù)標(biāo)號(hào)COUNT來表示。如果程序來表示。如果程序想修改這個(gè)數(shù)據(jù),那

49、么只需修改想修改這個(gè)數(shù)據(jù),那么只需修改EQU的賦值,的賦值,而無須修改程序中其它部分,如而無須修改程序中其它部分,如COUNTER和和MOV語句就不必修改。語句就不必修改。 COUNT EQU 25 COUNTER DB COUNTMOV AL, COUNT DATA EQU HEIGHT + 12 ; 地址表達(dá)式賦以符號(hào)地址表達(dá)式賦以符號(hào)ALPHA EQU 7 ; 常數(shù)賦以符號(hào)名常數(shù)賦以符號(hào)名BETA EQU ALPHA-2 ; 把把7-2=5賦以符號(hào)名賦以符號(hào)名BETAADDR EQU VAR + BETA ; VAR+5賦以符號(hào)名賦以符號(hào)名ADDRB EQU BP + 8 ; 變址引用賦

50、以符號(hào)名變址引用賦以符號(hào)名 BP8 EQU DS:BP + 8 ; 加段前綴的變址引用賦以符號(hào)名加段前綴的變址引用賦以符號(hào)名P8 注意:在注意:在EQU語句的表達(dá)式中,如果有變語句的表達(dá)式中,如果有變量或標(biāo)號(hào)的表達(dá)式,則在該語句前應(yīng)該量或標(biāo)號(hào)的表達(dá)式,則在該語句前應(yīng)該先給出它們的定義。如上例,先給出它們的定義。如上例,ALPHA必必須在須在BETA之前定義,否則匯編程序?qū)⒅钢岸x,否則匯編程序?qū)⒅甘境鲥e(cuò)。示出錯(cuò)。= 偽操作偽操作 賦值偽操作賦值偽操作=的作用與的作用與EQU類似。類似。它們之間的區(qū)別是,它們之間的區(qū)別是,EQU偽操作中的標(biāo)偽操作中的標(biāo)號(hào)名是不允許重復(fù)定義的,而號(hào)名是不允許重復(fù)

51、定義的,而=偽操作是偽操作是允許重復(fù)定義的。允許重復(fù)定義的。例如,例如, TMP EQU 5 TMP EQU TMP+1 則是錯(cuò)誤語句,因?yàn)閯t是錯(cuò)誤語句,因?yàn)門MP已賦值為已賦值為5,就不能再把它定義為其它數(shù)值。就不能再把它定義為其它數(shù)值。而而 TMP = 5 TMP = TMP+1 則是允許使用的,因?yàn)閯t是允許使用的,因?yàn)?偽操作允許重偽操作允許重復(fù)定義。第一個(gè)語句復(fù)定義。第一個(gè)語句TMP的值為的值為5,第二個(gè),第二個(gè)語句語句TMP的值就為的值就為6了。了。地址計(jì)數(shù)器與對(duì)準(zhǔn)偽指令地址計(jì)數(shù)器與對(duì)準(zhǔn)偽指令 1地址計(jì)數(shù)器地址計(jì)數(shù)器在匯編程序?qū)υ闯绦騾R編的過程中,使用在匯編程序?qū)υ闯绦騾R編的過程中,使用地址計(jì)數(shù)器來保存當(dāng)前正在匯編的指令的地址。地址計(jì)數(shù)器來保存當(dāng)前正在匯編的指令的地址。地址計(jì)數(shù)器的值在匯編語言中可用來表示。地址計(jì)數(shù)器的值在匯編語言中可用來表示。當(dāng)用在偽指令的參數(shù)字段時(shí),它所表示當(dāng)用在偽指令的參數(shù)字段時(shí),它所表示的是地址計(jì)數(shù)器的當(dāng)前值的是地址計(jì)數(shù)器的當(dāng)前值 匯編語言允許用戶直接用來引用地址計(jì)匯編語言允許用戶直接用來引用

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論