![匯編語言的基本語法_第1頁](http://file1.renrendoc.com/fileroot_temp2/2020-8/9/7cae3a2c-1a25-4164-8124-a33f8e5e867d/7cae3a2c-1a25-4164-8124-a33f8e5e867d1.gif)
![匯編語言的基本語法_第2頁](http://file1.renrendoc.com/fileroot_temp2/2020-8/9/7cae3a2c-1a25-4164-8124-a33f8e5e867d/7cae3a2c-1a25-4164-8124-a33f8e5e867d2.gif)
![匯編語言的基本語法_第3頁](http://file1.renrendoc.com/fileroot_temp2/2020-8/9/7cae3a2c-1a25-4164-8124-a33f8e5e867d/7cae3a2c-1a25-4164-8124-a33f8e5e867d3.gif)
![匯編語言的基本語法_第4頁](http://file1.renrendoc.com/fileroot_temp2/2020-8/9/7cae3a2c-1a25-4164-8124-a33f8e5e867d/7cae3a2c-1a25-4164-8124-a33f8e5e867d4.gif)
![匯編語言的基本語法_第5頁](http://file1.renrendoc.com/fileroot_temp2/2020-8/9/7cae3a2c-1a25-4164-8124-a33f8e5e867d/7cae3a2c-1a25-4164-8124-a33f8e5e867d5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、匯編語言的基本語法,1.1. 匯編語言源程序的格式 DATA SEGMENT AT 2000H ARRAY DB a1,a2,a3,a10(a1a10為立即數(shù)) COUNT EQU $ - ARRAY SUM DW ? DATA ENDS STACK SEGMENT PARA STACK STACK STAK DB 10 DUP (?) TOP EQU LENGTH STAK STACKENDS,CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK START: MOV AX,DATA MOV DS,AX MOV AX,0 MOV DI,OFFSET S
2、UM MOV BX,OFFSET ARRAY MOV CX,COUNT LOP: ADD AL,BX ADC AH,0 INC BX LOOP LOP MOV DI,AX MOV AH,4CH INT 21H CODE ENDS END START,匯編語言源程序格式的特點是: 1 .分段結(jié)構(gòu) 2 .語句行 匯編語言程序的語句有兩類: ( 1 ) 指令性語句 ( 2 ) 指示性語句,匯編語言源程序語句的格式 匯編語言源程序中的每個語句可以由四項組成,格式如下:名字 操作 操作數(shù) ;注釋其中:名字項是指一個標(biāo)號或變量。操作項是一個操作碼的助記符,它可以是指令、偽指令或宏指令名。,操作數(shù)項由一個或
3、多個表達(dá)式組成,它提供為執(zhí)行所要求的操作而需要的信息。操作數(shù)項可以是常數(shù)、寄存器、標(biāo)號、變量或由表達(dá)式組成。注釋項用來說明程序或語句的功能。;為識別注釋項的開始。;也可以從一行的第一個字符開始,此時整行都是注釋,常用來說明下面一段程序的功能。,上面四項中帶方括號的兩項是可選項。各項之間必須用空格(space)或水平制表(Tab)符隔開。(1) 名字項(2) 操作項(3) 操作數(shù)項(4) 注釋項,(1) 名字項源程序中用下列字符來表示名字:字母AZ數(shù)字09專用字符 ?、 、-、除數(shù)字外,所有字符都可以放在源語句的第一個位置。名字中如果用到則必須是第一個字符??梢杂煤芏嘧址麃碚f明名字,但只有前面的
4、31個字符能被匯編程序所識別。,一般說來,名字項可以是標(biāo)號或變量。它們都用來表示本語句的符號地址,都是可有可無的,只有當(dāng)需要用符號地址來訪問該語句時它才需要出現(xiàn)。 標(biāo)號:標(biāo)號在代碼段中定義,后面跟著冒號:,此外,它還可以作為過程名定義。 變量:變量在數(shù)據(jù)段或附加數(shù)據(jù)段中定義,后面不跟冒號。 變量經(jīng)常在操作數(shù)字段出現(xiàn)。,(2)操作項操作項可以是指令、偽指令或宏指令的助記符。對于指令,匯編程序?qū)⑵浞g為機(jī)器語言指令。對于偽指令,匯編程序?qū)⒏鶕?jù)其所要求的功能進(jìn)行處理。對于宏指令,則將根據(jù)其定義展開。,(3) 操作數(shù)項 操作數(shù)項由一個或多個表達(dá)式組成,多個操作數(shù)項之間一般用逗號分開。對于指令,操作數(shù)項
5、一般給出操作數(shù)地址,它們可能有一個,或二個,或三個,或一個也沒有。對于偽操作或宏指令,則給出它們所要求的參數(shù)。操作數(shù)項可以是常數(shù)、寄存器、標(biāo)號、變量或由表達(dá)式組成。,(4) 注釋項注釋項用來說明一段程序、一條或幾條指令的功能。對于匯編語言程序來說,注釋項的作用是很明顯的,它可以使程序容易被讀懂,因此匯編語言程序必須寫好注釋。注釋應(yīng)該寫出本條(或本段)指令在程序中的功能和作用,而不應(yīng)該只寫指令的動作。讀者在有機(jī)會閱讀程序例子時,應(yīng)注意學(xué)習(xí)注釋的寫法,在編制程序時,更應(yīng)學(xué)會寫好注釋。,指令性語句 格式為: 標(biāo)號 : 操作碼 操作數(shù) ; 注釋 帶方括號的為任選項, 標(biāo)號是指令的符號地址, 操作碼和操
6、作數(shù)是用匯編語言指令表示的指令部分, 注釋是對該語句在本程序中的功能的說明。,指示性語句 格式為: 名字 / 變量 命令 參數(shù) ; 注釋 命令指示匯編程序進(jìn)行某種匯編操作, 參數(shù)是有關(guān)的數(shù)據(jù), 名字是段名、符號名等標(biāo)識符,變量用變量名表示。,常量、標(biāo)識符和表達(dá)式 一、常量 其值在程序中不能改變的量, 在匯編語言源程序中的常量有: 數(shù)字常量、字符常量和符號常量 ( 1 ) 數(shù)字常量可以是二進(jìn)制數(shù)、八進(jìn)制數(shù)、十進(jìn)制數(shù)或十六進(jìn)制數(shù)表示 ( 2 ) 字符常量是用單引號 括起來的ASCII字符, 其值是該字符的ASCII代碼值,( 3 ) 符號常量是用標(biāo)識符定義的常量。 例如,采用符號定義語句 PORT
7、A EQU 80H, 則指令 MOV AL,PORTA 與指令 MOV AL,80H 等價。 二、標(biāo)識符 在編程時建立的有特定意義的字符序列,標(biāo)識符可用作符號常量、名字、變量和標(biāo)號等。 組成標(biāo)識符有如下規(guī)定:,( 1 ) 組成標(biāo)識符的字符有: 英文大寫字母:AZ; 英文小寫字母: a-z; 數(shù)字09; 字符?、_ 、$; ( 2 )字符長度不超過3l個; ( 3 ) 首字符不能是數(shù)字; ( 4 ) ? 不能單獨作為一個標(biāo)識符; ( 5 ) 不能把保留字用作標(biāo)識符,保留字包括助記符、寄存器名等。,三、表達(dá)式 表達(dá)式是常數(shù)、標(biāo)號、變量與一些操作符相組合的序列,可以有數(shù)字表達(dá)式和地址表達(dá)式兩種。在匯
8、編期間,匯編程序按照一定的優(yōu)先規(guī)則對表達(dá)式進(jìn)行計算后可得到一個數(shù)值或一個地址。常用的表達(dá)式操作符介紹如下:,(1) 算術(shù)操作符 算術(shù)操作符有+、-、*、/ 和MOD。MOD是指除法運(yùn)算后得到的余數(shù),如19/7的商是2,而19 MOD 7則為5(余數(shù))。,算術(shù)操作符可以用于數(shù)字表達(dá)式或地址表達(dá)式中,但當(dāng)它用于地址表達(dá)式時,只有當(dāng)其結(jié)果有明確的物理意義時才是有效的結(jié)果。例如兩個地址相乘或相除是無意義的。在地址表達(dá)式中,可以使用 + 或 - ,但也必須注意其物理意義。,例如把兩個不同段的地址相加也是無意義的。經(jīng)常使用的是地址 數(shù)字量,它是有意義的。例如SUM +1是指SUM字節(jié)單元的下一個字節(jié)單元的
9、地址(注意:不是指SUM單元的內(nèi)容加1),而SUM-1則是指SUM字節(jié)單元的前一個字節(jié)單元的地址。例: 如果要求把首地址為BLOCK的字?jǐn)?shù)組的第6個字傳送到DX寄存器,可用指令如下: MOV DX, BLOCK+ (6-1) * 2,例: 如數(shù)組ARRAY定義如下,寫出把數(shù)組長度(字?jǐn)?shù))存入CX寄存器的指令。ARRAY DW 1, 2, 3, 4, 5, 6, 7ARYENDDW ?其中ARYEND是為計算數(shù)組長度而建立的符號地址,所需指令如下: MOV CX, (ARYEND-ARRAY)/2匯編程序在匯編期間將計算出表達(dá)式的值而形成指令:MOV CX, 7,(2) 邏輯操作符 邏輯操作符有
10、:AND(與)、OR(或)、XOR(異或)、NOT(非)。邏輯操作符都是按位操作的,只能用于數(shù)字表達(dá)式中。邏輯操作符要求匯編程序?qū)ζ淝昂髢蓚€操作數(shù)(或表達(dá)式)作指定的邏輯操作。,例:OUT PORT_VAL AND 0FEH, AL上例中PORT_VAL為端口號,OUT指令中的表達(dá)式說明只為偶數(shù)號端口輸出數(shù)據(jù)。,(3) 關(guān)系操作符關(guān)系操作符有:EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)。關(guān)系操作符的兩個操作數(shù)必須都是數(shù)字或是同一段內(nèi)的兩個存儲器地址。計算的結(jié)果應(yīng)為邏輯值:結(jié)果為真,表示為0FFFFH;結(jié)果為假,則表示為0。,例如:MOV BX
11、,(PORT_VAL LT 5) AND 20) OR (PORT_VAL GE 5) AND 30)則當(dāng)PORT_VAL 5時,匯編結(jié)果應(yīng)該是: MOV BX, 20否則,匯編結(jié)果應(yīng)該是: MOV BX, 30,(4) 數(shù)值回送操作符 數(shù)值回送操作符有:TYPE、LENGTH、SIZE、OFFSET、SEG等。數(shù)值回送操作符把一些特征或存儲器地址的一部分作為數(shù)值回送。, TYPE格式為:TYPE 表達(dá)式如果表達(dá)式是變量,則匯編程序?qū)⒒厮驮撟兞康囊宰止?jié)數(shù)表示的類型:DB為1,DW為2,DD為4,DF為6,DQ為8,DT為10。如果表達(dá)式是標(biāo)號,則匯編程序?qū)⒒厮痛碓摌?biāo)號類型的數(shù)值:NEAR為
12、-1,F(xiàn)AR為 -2。如果表達(dá)式為常數(shù),則應(yīng)回送0。,舉例:ARRAY DW 1, 2, 3則對于指令A(yù)DD SI, TYPE ARRAY匯編程序?qū)⑵湫纬蔀椋?ADD SI, 2, LENGTH格式為:LENGTH 變量對于變量中使用DUP的情況,匯編程序?qū)⒒厮头峙浣o該變量的單元數(shù),而對于其他情況則送1。,舉例1:FEES DW 100 DUP (0)對于指令MOV CX, LENGTH FEES 匯編程序?qū)⑹蛊湫纬蔀椋?MOV CX, 100 舉例2:ARRAY DW 1, 2, 3對于指令MOV CX, LENGTH ARRAY 匯編程序?qū)⑹蛊湫纬蔀椋?MOV CX, 1,舉例3:TABL
13、E DB ABCD對于指令MOV CX, LENGTH TABLE匯編程序?qū)⑹蛊湫纬蔀椋?MOV CX, 1, SIZE格式為:SIZE 變量匯編程序應(yīng)回送分配給該變量的字節(jié)數(shù)。但是,此值是LENGTH值和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)號匯編程序?qū)⒒厮妥兞炕驑?biāo)號的偏移地址值。舉例:MOV BX, OFFSET OPER_ONE匯編程
14、序?qū)PER_ONE的偏移地址作為立即數(shù)回送給指令,而在執(zhí)行時則將該偏移地址裝入BX寄存器中。所以這條指令的功能與指令LEA BX, OPER_ONE是等價的。, SEG格式為:SEG 變量或標(biāo)號匯編程序?qū)⒒厮妥兞炕驑?biāo)號的段地址值。舉例:如果DATA_SEG是從存儲器的05000H地址開始的一個數(shù)據(jù)段的段名,OPER1是該段中的一個變量名,則MOV BX, SEG OPER1 將把0500H作為立即數(shù)插入指令。實際上,由于段地址是由連接程序分配的,所以該立即數(shù)是連接時插入的。執(zhí)行期間則使BX寄存器的內(nèi)容成為0500H。, PTR格式為:類型 PTR 符號地址PTR用來給已分配的存儲地址(用符號
15、地址表示)賦予另一種屬性,使該地址具有另一種類型。類型可有BYTE、WORD、DWORD、FWORD、QWORD、TBYTE、NEAR和FAR等幾種,所以PTR也可以用來建立字、雙字、四字或段內(nèi)及段間的指令單元等。,舉例:已有數(shù)據(jù)定義如下: TWO_BYTE DW ?可以用以下語句對這兩個字節(jié)賦予另一種類型定義: ONE_BYTE EQU BYTE PTR TWO_BYTE這里ONE_BYTE和TWO_BYTE兩個符號地址具有相同的段地址和偏移地址,但是它們的類型屬性不同,前者為1,后者為2。,此外,有時指令要求使用PTR操作符。例如用 MOV BX, 5指令把立即數(shù)存入BX寄存器內(nèi)容指定的存
16、儲單元中,但匯編程序不能分清是存入字單元還是字節(jié)單元,此時必須用PTR操作符來說明屬性,應(yīng)該寫明: MOV BYTE PTR BX,5 或 MOV WORD PTR BX,5, 段操作符段操作符用來表示一個標(biāo)量、變量或地址表達(dá)式的段屬性。格式為: 段寄存器地址表達(dá)式段名地址表達(dá)式 例如,用段前綴指定某段的地址操作數(shù)MOV AX,ES:BX + SI, SHORT用來修飾JMP指令中轉(zhuǎn)向地址的屬性,指出轉(zhuǎn)向地址是在下一條指令地址的127個字節(jié)范圍之內(nèi)。例如: JMP SHORT TAG ;轉(zhuǎn)移屬性為短轉(zhuǎn)移 . TAG: MOV., THIS格式為: THIS 屬性或類型THIS可以象PTR一樣建
17、立一個指定類型(BYTE、WORD、DWORD)或指定距離(NEAR或FAR)的地址操作數(shù)。該操作數(shù)的段地址和偏移地址與下一個存儲單元地址相同。,例如: FIRST_TYPE EQU THIS BYTE WORD_TABLE DW 100 DUP (?)此時FIRST_TYPE的偏移地址和WORD_TABLE完全相同,但它是字節(jié)類型的;而WORD_TABLE則是字類型的。又如: START EQU THIS FAR MOV CX, 100這樣,MOV指令有一個FAR屬性的符號地址START,這就允許其他段的JMP指令直接跳轉(zhuǎn)到START來。, HIGH和LOW稱為字節(jié)分離操作符,它接收一個數(shù)或
18、地址表達(dá)式,HIGH取其高位字節(jié),LOW取其低位字節(jié)。例如:CONST EQU 0ABCDH則MOV AH, HIGH CONST將匯編成 MOV AH, 0ABH指令 MOV AH, LOW CONST將匯編成 MOV AH, 0CDH, 操作符的優(yōu)先級我們知道表達(dá)式是常數(shù)、寄存器、標(biāo)號、變量和操作符的組合,在計算表達(dá)式時,應(yīng)該首先計算優(yōu)先級高的操作符,然后從左到右地對優(yōu)先級相同的操作符進(jìn)行計算。括號也可以改變計算次序,括號內(nèi)的表達(dá)式應(yīng)優(yōu)先計算。,表達(dá)式中的運(yùn)算符,偽指令(指示性語句) 偽指令又稱為偽操作,它是在對源程序匯編期間由匯編程序處理的操作,它們可以完成如 定義數(shù)據(jù)、分配存儲區(qū)、指示
19、程序結(jié)束等功能。 宏指令是由用戶按照宏定義格式編寫的一段程序,其中語句可以是指令、偽指令,甚至是已定義的宏指令。,偽指令和指令的區(qū)別在于,每一條指令必須生成機(jī)器代碼,然后在程序運(yùn)行期間由CPU來執(zhí)行其操作;而偽指令是在匯編期間由匯編程序執(zhí)行的操作命令,除了數(shù)據(jù)定義及存儲器分配偽指令分配存儲器空間外,其它偽指令不生成目標(biāo)碼。和各種指令一樣,偽指令也是程序設(shè)計不可缺少的工具。下面介紹一些常用的偽指令。,段定義偽指令段定義偽指令是表示一個段開始和結(jié)束的命令 。 段名 SEGMENT段名 ENDS,段名由用戶命名。對于數(shù)據(jù)段、附加段和堆棧段來說,段內(nèi)一般是存儲單元的定義、分配等偽指令語句;對于代碼段中
20、則主要是指令及偽指令語句。定義了段還必須說明哪個段是代碼段,哪個段是數(shù)據(jù)段。ASSUME偽指令就是建立段和段寄存器關(guān)系的偽指令,其格式為:ASSUME 段寄存器名: 段名,段寄存器名必須是CS、DS、ES和SS中的一個,而段名必須是由SEGMENT定義的段名。,例; * * * * * * * * * * * * * * * * * * * * * * *data_seg1 segment ; 定義數(shù)據(jù)段 data_seg1 ends; * * * * * * * * * * * * * * * * * * * * * * * data_seg2 segment ; 定義附加段data_seg
21、2 ends; * * * * * * * * * * * * * * * * * * * * * * *,code_seg segment ; 定義代碼段assume cs:code_seg, ds:data_seg1, es:data_seg2 start: ; 程序執(zhí)行的起始地址; set DS register to current data segmentmov ax, data_seg1 ; 數(shù)據(jù)段地址 mov ds, ax ; 存入DS寄存器; set ES register to current extra segmentmov ax, data_seg2 ; 附加段地址mov
22、 es, ax ; 存入ES寄存器. code_seg ends ; 代碼段結(jié)束; * * * * * * * * * * * * * * * * * * * * * * * * * * end start,由于ASSUME偽指令只是指定某個段分配給哪一個段寄存器,它并不能把段地址裝入段寄存器中,所以在代碼段中,還必須把段地址裝入相應(yīng)的段寄存器中:MOV AX,DATA_SEG1 ; 數(shù)據(jù)段地址MOV DS,AX ; 存入DS寄存器MOV AX,DATA_SEG2 ; 附加段地址MOV ES,AX ; 存入ES寄存器,如果程序中還定義了堆棧段STACK_SEG,也需要把段地址裝入SS中:MOV
23、 AX,STACK_SEG ; 堆棧段地址MOV SS,AX ; 存入ES寄存器,注意,在程序中不需要用指令裝入代碼段的段地址,因為在程序初始化時,裝入程序已將代碼段的段地址裝入CS寄存器了。,程序開始和結(jié)束偽指令在程序的開始可以用NAME或TITLE作為模塊的名字,其格式為:NAME 模塊名TITLE 文件名表示源程序結(jié)束的偽指令的格式為:END 標(biāo)號,注意:NAME及TITLE偽指令并不是必需的,如果程序中既無NAME又無TITLE偽指令,則將用源文件名作為模塊名。 END偽指令中的“標(biāo)號”指示程序開始執(zhí)行的起始地址。如果多個程序模塊相連接,則只有主程序的END要加上標(biāo)號,其他子程序模塊則
24、只用END而不必指定標(biāo)號。上例最后使用了END START偽指令。匯編程序?qū)⒃谟鯡ND時結(jié)束匯編,并且程序在運(yùn)行時從START開始執(zhí)行。,數(shù)據(jù)定義及存儲器分配偽指令 8086提供了各種數(shù)據(jù)及存儲器分配偽指令,這些偽指令在匯編程序?qū)υ闯绦蜻M(jìn)行匯編期間,由匯編程序完成數(shù)據(jù)類型定義及存 儲器分配等功能。 數(shù)據(jù)定義及存儲器分配偽指令的格式是: 變量 助記符 操作數(shù), ,操作數(shù) ;注釋,數(shù)據(jù)定義及存儲器分配偽指令格式中的變量是操作數(shù)的符號地址,它是可有可無的,它的作用與指令語句前的標(biāo)號相同,區(qū)別是變量后面不加冒號。如果語句中有變量,那么匯編程序?qū)⒉僮鲾?shù)的第一個字節(jié)的偏移地址賦于這個變量。注釋字段用來說明
25、該偽指令的功能,它也不是必須有的。助記符字段說明所用偽指令的助記符。,下面介紹常用的數(shù)據(jù)定義偽指令。DB(define byte)DB偽指令用來定義字節(jié),對其后的每個數(shù)據(jù)都存儲在一個字節(jié)中。DB能定義十進(jìn)制數(shù)、二進(jìn)制數(shù)、十六進(jìn)制數(shù)和ASCII字符,二進(jìn)制數(shù)和十六進(jìn)制數(shù)要分別用B和H表示,ASCII字符用單引號( )括起來。DB還是唯一能定義字符串的偽操作,串中的每個字符占用一個字節(jié)。,請看下面數(shù)據(jù)定義的例子,注意DB定義的每個數(shù)據(jù)的存儲情況,左邊第一列是匯編程序為數(shù)據(jù)分配的字節(jié)地址,第二列是相應(yīng)地址中存儲的數(shù)據(jù)或ASCII字符(均用十六進(jìn)制表示)。變量DATA7定義了3個數(shù)據(jù)和一個字符串,每個
26、數(shù)據(jù)或串用,分開,它們分別存儲在偏移地址002E開始的6個字節(jié)單元中。,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 ORG0010H ; 指定偏移地址為10h 0010 32 35 39 31 DATA4 DB 2591 ; ASCII碼數(shù) 0018 ORG0018H ; 指定偏移地址為18h 0018 00 DATA5 DB ? ; 保留一個字節(jié) 0020 ORG0020H ; 指定偏移地址為20h 0020 4D 79 20 6E 61 6DDA
27、TA6 DB My name is Joe ; ASCII碼字符 65 20 69 73 20 4A 6F 65 002E 0A 10 02 31 30 42DATA7 DB 10,10H,10B,10B ; 不同的數(shù)據(jù)類型,DW(define word)DW偽指令用來定義字,對其后的每個數(shù)據(jù)分配2個字節(jié)(1個字),數(shù)據(jù)的低8位存儲在低字節(jié)地址中,高8位存儲在高字節(jié)地址中,如下例中的變量DATA8的數(shù)據(jù)存儲在0070字地址中,其中0070字節(jié)存儲0BAH,0071字節(jié)存儲03H。DW還可存儲變量或標(biāo)號的偏移地址。見下面DW偽指令的例子。,DD(define doubleword)DD偽指令用來
28、定義雙字,對其后的每個數(shù)據(jù)分配4個字節(jié)(2個字)。該偽指令同樣將數(shù)據(jù)轉(zhuǎn)換為十六進(jìn)制,并根據(jù)低地址存儲低字節(jié),高地址存儲高字節(jié)的規(guī)則來存放數(shù)據(jù)。如下例DATA15的存儲情況是:00A8:0F2H,00A9H:57H,00AAH:2AH,00ABH:5CH。用DD存入地址時,第一個字為偏移地址,第二個字為段地址。,DQ(define quadword)DQ偽指令用來定義4字,即64位字長的數(shù)據(jù),DQ之后的每個數(shù)據(jù)占用8個字節(jié)(4個字)。DT(define ten bytes)DT偽指令用來為壓縮的BCD數(shù)據(jù)分配存儲單元,它雖然可以分配10個字節(jié)(5個字),但最多只能輸入18個數(shù)字,要注意的是,數(shù)據(jù)
29、后面不需要加“H”。下面是DQ和DT的例子。,DUP(duplicate)DUP偽指令可以按照給定的次數(shù)來復(fù)制某個(某些)操作數(shù),它可以避免多次鍵入同樣一個數(shù)據(jù)。例如,把6個FFH存入相繼字節(jié)中,可以用下面兩種方法,顯然用DUP的方法更簡便些。存入6字節(jié)的FFHDATA20 DB 0FFH 0FFH 0FFH 0FFH 0FFH 0FFH;DATA21 DB 6 DUP(0FFH),DUP操作一般用來保留數(shù)據(jù)區(qū),如用數(shù)據(jù)定義偽指令DB 64 DUP(?)可保留64個字節(jié)單元。DUP還可以嵌套。,表達(dá)式賦值偽操作EQU 有時程序中多次出現(xiàn)同一個表達(dá)式,為方便起見可以用賦植偽操作給表達(dá)式賦予一個名
30、字,其格式如下: Expresstion_name EQU Expresstion 此后,程序中凡需要用到該表達(dá)式之處就可以用表達(dá)式名來代替。上式中表達(dá)式可以是任何有效的操作數(shù)格式,可以是任何可以求出常數(shù)值的表達(dá)式,也可以是任何有效的助記符。,EQU是一個賦值偽操作(偽指令),它給一個數(shù)據(jù)標(biāo)號賦于一個常數(shù)值,但這個常數(shù)不占用存儲單元。當(dāng)這個數(shù)據(jù)標(biāo)號出現(xiàn)在程序中時,匯編程序即用它的常數(shù)值代替數(shù)據(jù)標(biāo)號。EQU可以在數(shù)據(jù)段之外使用,甚至可用在代碼段中間。,假定在數(shù)據(jù)段和代碼段中要多次使用一個數(shù)據(jù)(如25),那么在編程時凡是用到25的地方都可用數(shù)據(jù)標(biāo)號COUNT來表示。如果程序想修改這個數(shù)據(jù),那么只需
31、修改EQU的賦值,而無須修改程序中其它部分,如COUNTER和MOV語句就不必修改。 COUNT EQU 25 COUNTER DB COUNTMOV AL, COUNT,DATA EQU HEIGHT + 12 ; 地址表達(dá)式賦以符號 ALPHA EQU 7 ; 常數(shù)賦以符號名 BETA EQU ALPHA-2 ; 把7-2=5賦以符號名BETA ADDR EQU VAR + BETA ; VAR+5賦以符號名ADDR B EQU BP + 8 ; 變址引用賦以符號名 B P8 EQU DS:BP + 8 ; 加段前綴的變址引用賦以符號名P8,注意:在EQU語句的表達(dá)式中,如果有變量或標(biāo)號的
32、表達(dá)式,則在該語句前應(yīng)該先給出它們的定義。如上例,ALPHA必須在BETA之前定義,否則匯編程序?qū)⒅甘境鲥e。,= 偽操作 賦值偽操作=的作用與EQU類似。它們之間的區(qū)別是,EQU偽操作中的標(biāo)號名是不允許重復(fù)定義的,而=偽操作是允許重復(fù)定義的。,例如, TMP EQU 5 TMP EQU TMP+1 則是錯誤語句,因為TMP已賦值為5,就不能再把它定義為其它數(shù)值。而 TMP = 5 TMP = TMP+1 則是允許使用的,因為=偽操作允許重復(fù)定義。第一個語句TMP的值為5,第二個語句TMP的值就為6了。,地址計數(shù)器與對準(zhǔn)偽指令 1地址計數(shù)器在匯編程序?qū)υ闯绦騾R編的過程中,使用地址計數(shù)器來保存當(dāng)前正在匯編的指令的地址。地址計數(shù)器的值在匯編語言中可用來表示。當(dāng)用在偽指令的參數(shù)字段時,它所表示的是地址計數(shù)器的當(dāng)前值,匯編語言允許用戶直接用來引用地
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 深信服智慧校園云機(jī)房解決方案
- 2025年山東省職教高考《語文》核心考點必刷必練試題庫(含答案)
- 《現(xiàn)代康旅產(chǎn)業(yè)概論》期末參考試題庫及答案
- 《工程招投標(biāo)與合同管理》參考試題庫(含答案)
- 2025年武夷山職業(yè)學(xué)院高職單招語文2018-2024歷年參考題庫頻考點含答案解析
- 2025年新疆輕工職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 2025年晉中職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年常考版參考題庫含答案解析
- 部編版語文五年級下冊《快樂讀書吧》精美課件
- 滬教版(上海)七年級地理第一學(xué)期中國區(qū)域篇(上)1.3《青藏高原地區(qū)》聽課評課記錄
- 幼兒園中班秋季活動策劃方案五篇
- 2025版茅臺酒出口業(yè)務(wù)代理及銷售合同模板4篇
- 2025年N1叉車司機(jī)考試試題(附答案)
- 《醫(yī)院財務(wù)分析報告》課件
- 2024年考研政治試題及答案
- 2025年初級社會工作者綜合能力全國考試題庫(含答案)
- 2024年濰坊護(hù)理職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫附答案
- 《鉗工基本知識》課件
- 2022-2023學(xué)年五年級數(shù)學(xué)春季開學(xué)摸底考(四)蘇教版
- 【螞蟻?!?024中國商業(yè)醫(yī)療險發(fā)展研究藍(lán)皮書
- 授信審批部工作計劃及思路
- 財務(wù)管理學(xué)(第10版)課件 第3章 財務(wù)分析
評論
0/150
提交評論