匯編語言源程序格式_第1頁
匯編語言源程序格式_第2頁
匯編語言源程序格式_第3頁
匯編語言源程序格式_第4頁
匯編語言源程序格式_第5頁
已閱讀5頁,還剩92頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第2 2章章 匯編語言程序格式匯編語言程序格式 第第2章章 匯編語言程序格式匯編語言程序格式2.1 匯編語言語句格式匯編語言語句格式2.2 偽指令偽指令2.3 匯編語言源程序基本框架匯編語言源程序基本框架第第2 2章章 匯編語言程序格式匯編語言程序格式 2.1 匯編語言語句格式匯編語言語句格式同其他程序設計語言一樣,匯編語言的翻譯器同其他程序設計語言一樣,匯編語言的翻譯器(匯編程序)對源程序有嚴格的格式要求。這樣,(匯編程序)對源程序有嚴格的格式要求。這樣,匯編程序才能確切翻譯源程序,形成功能等價的匯編程序才能確切翻譯源程序,形成功能等價的機器指令(目標代碼),連接后能直接運行。匯機器指令(

2、目標代碼),連接后能直接運行。匯編語言程序格式就是匯編語言必須遵循的語法規(guī)編語言程序格式就是匯編語言必須遵循的語法規(guī)則。則。 第第2 2章章 匯編語言程序格式匯編語言程序格式 匯編語言源程序由語句序列構(gòu)成,匯編語言程序中的語句可以分為匯編語言源程序由語句序列構(gòu)成,匯編語言程序中的語句可以分為指令語句、偽指令語句和宏指令語句三種。指令語句、偽指令語句和宏指令語句三種。(1)指令語句:對應于指令語句:對應于CPU指令系統(tǒng)中的一條機器指令,由指令系統(tǒng)中的一條機器指令,由CPU執(zhí)行,能完成一定操作功能,能夠翻譯成機器代碼的語句。執(zhí)行,能完成一定操作功能,能夠翻譯成機器代碼的語句。(2)偽指令語句:無對

3、應的機器指令,不由偽指令語句:無對應的機器指令,不由CPU執(zhí)行,只為匯編執(zhí)行,只為匯編程序在翻譯匯編語言源程序時提供有關(guān)信息,并不翻譯成機器代碼程序在翻譯匯編語言源程序時提供有關(guān)信息,并不翻譯成機器代碼的語句。的語句。(3)宏指令語句:就是由若干條指令語句形成的語句,一條宏指宏指令語句:就是由若干條指令語句形成的語句,一條宏指令語句的功能相當于若干條指令語句的功能,詳見第令語句的功能相當于若干條指令語句的功能,詳見第5章。章。第第2 2章章 匯編語言程序格式匯編語言程序格式 匯編語言源程序中的每個語句可以由匯編語言源程序中的每個語句可以由4項組成,格式如下:項組成,格式如下:名字:名字: 操作

4、碼操作碼 操作數(shù)操作數(shù),操作數(shù),操作數(shù) ;注釋;注釋其中,名字項是一個符號項。其中,名字項是一個符號項。操作碼項是一個操作碼的助記符,它可以是指令、偽指令或宏指令操作碼項是一個操作碼的助記符,它可以是指令、偽指令或宏指令名。名。操作數(shù)項由一個或多個表達式組成,它提供為執(zhí)行所要求的操作而操作數(shù)項由一個或多個表達式組成,它提供為執(zhí)行所要求的操作而需要的信息。需要的信息。注釋項用來說明程序或語句的功能。注釋項用來說明程序或語句的功能?!?;”為識別注釋項的開始。為識別注釋項的開始。帶方括號的項是可選項,需要根據(jù)具體情況而定。帶方括號的項是可選項,需要根據(jù)具體情況而定。匯編語言源程序中的每條語句一般占一

5、行,各項之間必須用空格或匯編語言源程序中的每條語句一般占一行,各項之間必須用空格或制表符作為分隔符,操作數(shù)之間用逗號分隔。制表符作為分隔符,操作數(shù)之間用逗號分隔。 第第2 2章章 匯編語言程序格式匯編語言程序格式 名字是用戶按照一定規(guī)則定義的標識符,可由下列符號組成:名字是用戶按照一定規(guī)則定義的標識符,可由下列符號組成:字母字母 AZ、az數(shù)字數(shù)字 09 特殊字符特殊字符 ?、.、_、$數(shù)字不能作名字項的第一個字符。而圓點僅能用作第一個字符,可數(shù)字不能作名字項的第一個字符。而圓點僅能用作第一個字符,可以用很多字符來說明名字,但只有前面的以用很多字符來說明名字,但只有前面的31個字符能被匯編程序

6、所個字符能被匯編程序所識別。為了便于記憶,名字的定義應該能夠見名知義,如用識別。為了便于記憶,名字的定義應該能夠見名知義,如用BUFFER表示緩沖區(qū)、表示緩沖區(qū)、SUM表示累加和等。表示累加和等。名字有兩種形式:標號或變量。指令語句中的名字通常用標號表示,名字有兩種形式:標號或變量。指令語句中的名字通常用標號表示,而偽指令語句中的名字通常用變量名、段名和過程名表示,多數(shù)情而偽指令語句中的名字通常用變量名、段名和過程名表示,多數(shù)情況下用變量名表示。況下用變量名表示。第第2 2章章 匯編語言程序格式匯編語言程序格式 (1)標號標號標號在代碼段中定義,也可以用標號在代碼段中定義,也可以用EQU或或L

7、ABEL偽指令來定義,標號與其所代表的指令之間用冒偽指令來定義,標號與其所代表的指令之間用冒號分開,用來代表一條指令所在單元的地址。標號分開,用來代表一條指令所在單元的地址。標號也可以作為過程名定義。標號經(jīng)常在轉(zhuǎn)移指令號也可以作為過程名定義。標號經(jīng)常在轉(zhuǎn)移指令的操作數(shù)字段出現(xiàn),用以表示轉(zhuǎn)向的目標地址。的操作數(shù)字段出現(xiàn),用以表示轉(zhuǎn)向的目標地址。標號在命名時,應盡量取有意義的字符,以便程標號在命名時,應盡量取有意義的字符,以便程序的閱讀和理解。序的閱讀和理解。第第2 2章章 匯編語言程序格式匯編語言程序格式 標號有標號有3種屬性:段屬性、偏移屬性和類型屬性。種屬性:段屬性、偏移屬性和類型屬性。段屬

8、性:標號所代表指令單元的段起始地址,此值必須段屬性:標號所代表指令單元的段起始地址,此值必須在一個段寄存器中,而標號的段則總是在在一個段寄存器中,而標號的段則總是在CS寄存器中。寄存器中。偏移屬性:標號所代表指令單元的段內(nèi)偏移地址,標號偏移屬性:標號所代表指令單元的段內(nèi)偏移地址,標號的偏移地址是從段起始地址到定義標號的位置之間的字的偏移地址是從段起始地址到定義標號的位置之間的字節(jié)數(shù)。對于節(jié)數(shù)。對于16位段是位段是16位無符號數(shù)。位無符號數(shù)。類型屬性:用來指出標號是在本段內(nèi)引用還是在其他段類型屬性:用來指出標號是在本段內(nèi)引用還是在其他段中引用的。如是在段內(nèi)引用的,則稱為中引用的。如是在段內(nèi)引用的

9、,則稱為NEAR,轉(zhuǎn)移源和,轉(zhuǎn)移源和轉(zhuǎn)移目標在同一個代碼段中,轉(zhuǎn)移時,只改變轉(zhuǎn)移目標在同一個代碼段中,轉(zhuǎn)移時,只改變IP值,不值,不改變改變CS值;如在段外引用,則稱為值;如在段外引用,則稱為FAR,轉(zhuǎn)移源和轉(zhuǎn)移,轉(zhuǎn)移源和轉(zhuǎn)移目標在不同的代碼段中,轉(zhuǎn)移時,既改變目標在不同的代碼段中,轉(zhuǎn)移時,既改變IP值,又改變值,又改變CS值。值。第第2 2章章 匯編語言程序格式匯編語言程序格式 (2)變量變量 變量在除代碼段以外的其它段中定義,后面變量在除代碼段以外的其它段中定義,后面不跟冒號。它也可以用不跟冒號。它也可以用EQU或或LABEL偽指令來偽指令來定義。變量是一個可以存放數(shù)據(jù)的存儲單元的名定義。

10、變量是一個可以存放數(shù)據(jù)的存儲單元的名字,即存放數(shù)據(jù)的存儲單元的地址符號名。變量字,即存放數(shù)據(jù)的存儲單元的地址符號名。變量用用DB、DW、DD定義,此時變量名僅表示該數(shù)定義,此時變量名僅表示該數(shù)據(jù)區(qū)或存儲區(qū)的第一個數(shù)據(jù)單元的首地址。變量據(jù)區(qū)或存儲區(qū)的第一個數(shù)據(jù)單元的首地址。變量經(jīng)常在操作數(shù)字段出現(xiàn)。經(jīng)常在操作數(shù)字段出現(xiàn)。第第2 2章章 匯編語言程序格式匯編語言程序格式 變量也有變量也有3種屬性:段屬性、偏移屬性和類型屬性。種屬性:段屬性、偏移屬性和類型屬性。變量所代表數(shù)據(jù)單元的段起始地址,此值必須變量所代表數(shù)據(jù)單元的段起始地址,此值必須在一個段寄存器中(在一個段寄存器中(DS、ES或或SS中)。

11、中)。變量所代表數(shù)據(jù)單元的段內(nèi)偏移地址,變量變量所代表數(shù)據(jù)單元的段內(nèi)偏移地址,變量的偏移地址是從段的起始地址到定義變量的位置之間的的偏移地址是從段的起始地址到定義變量的位置之間的字節(jié)數(shù)。對于字節(jié)數(shù)。對于16位段是位段是16位無符號數(shù)。在當前段內(nèi)給出位無符號數(shù)。在當前段內(nèi)給出變量的偏移值等于當前地址計數(shù)器的值,當前地址計數(shù)變量的偏移值等于當前地址計數(shù)器的值,當前地址計數(shù)器的值可以用器的值可以用$來表示。來表示。變量的類型屬性定義該變量所保留的字節(jié)數(shù),變量的類型屬性定義該變量所保留的字節(jié)數(shù),如如BYTE(1個字節(jié)長),個字節(jié)長),WORD(2個字節(jié)長),個字節(jié)長),DWORD(4個字節(jié)長)。這一點

12、,將在數(shù)據(jù)定義偽指令個字節(jié)長)。這一點,將在數(shù)據(jù)定義偽指令中說明。中說明。在同一個程序中,同樣的標號或變量的定義只允許出現(xiàn)在同一個程序中,同樣的標號或變量的定義只允許出現(xiàn)一次,否則匯編程序會指示出錯。一次,否則匯編程序會指示出錯。第第2 2章章 匯編語言程序格式匯編語言程序格式 操作碼項可以是指令、偽指令或宏指令的助記符。助記操作碼項可以是指令、偽指令或宏指令的助記符。助記符表示指令語句的功能,如符表示指令語句的功能,如INC、MOV等,其符號與意等,其符號與意義是由系統(tǒng)定義的,編程時必須照寫不誤,既不能多寫,義是由系統(tǒng)定義的,編程時必須照寫不誤,既不能多寫,也不能少寫,如果指令帶有前綴(如也

13、不能少寫,如果指令帶有前綴(如REP、REPE等),等),則指令前綴和指令助記符要用空格分開。則指令前綴和指令助記符要用空格分開。對于指令,匯編程序?qū)⑵浞g為機器語言指令。對于偽對于指令,匯編程序?qū)⑵浞g為機器語言指令。對于偽指令,匯編程序?qū)⒏鶕?jù)其所要求的功能進行處理。對于指令,匯編程序?qū)⒏鶕?jù)其所要求的功能進行處理。對于宏指令,則將根據(jù)其定義展開。在第宏指令,則將根據(jù)其定義展開。在第5章中將會專門討論。章中將會專門討論。第第2 2章章 匯編語言程序格式匯編語言程序格式 指令中的操作數(shù)用來指定參與操作的數(shù)據(jù)。對于指令中的操作數(shù)用來指定參與操作的數(shù)據(jù)。對于一般指令,可以有一個或兩個操作數(shù),也可以沒

14、一般指令,可以有一個或兩個操作數(shù),也可以沒有操作數(shù);對于偽指令和宏指令,可以根據(jù)需要有操作數(shù);對于偽指令和宏指令,可以根據(jù)需要有多個操作數(shù)。操作數(shù)多于一個時,各操作數(shù)之有多個操作數(shù)。操作數(shù)多于一個時,各操作數(shù)之間用逗號分開。間用逗號分開。第第2 2章章 匯編語言程序格式匯編語言程序格式 操作數(shù)可以是常數(shù)、寄存器、標號、變量或由表操作數(shù)可以是常數(shù)、寄存器、標號、變量或由表達式組成。在這里,將專門對表達式加以說明。達式組成。在這里,將專門對表達式加以說明。表達式是常數(shù)、標號、變量、寄存器與一些操作表達式是常數(shù)、標號、變量、寄存器與一些操作符相組合的序列,可以有數(shù)字表達式和地址表達符相組合的序列,可

15、以有數(shù)字表達式和地址表達式兩種。數(shù)字表達式由匯編程序根據(jù)優(yōu)先級規(guī)則式兩種。數(shù)字表達式由匯編程序根據(jù)優(yōu)先級規(guī)則計算得到一個常數(shù)值。地址表達式由匯編程序計計算得到一個常數(shù)值。地址表達式由匯編程序計算得到一個地址或一個常數(shù)值(地址間的距離長算得到一個地址或一個常數(shù)值(地址間的距離長度)。度)。組成表達式的操作符有算術(shù)、邏輯、關(guān)系、數(shù)值組成表達式的操作符有算術(shù)、邏輯、關(guān)系、數(shù)值返回、屬性操作符。返回、屬性操作符。 第第2 2章章 匯編語言程序格式匯編語言程序格式 常用的操作符常用的操作符 算術(shù)操作符算術(shù)操作符邏輯與移位運算符邏輯與移位運算符關(guān)系運算符關(guān)系運算符 數(shù)值返回運算符數(shù)值返回運算符 屬性運算符

16、屬性運算符 第第2 2章章 匯編語言程序格式匯編語言程序格式 算術(shù)操作符算術(shù)操作符算術(shù)運算符包括:算術(shù)運算符包括:+、*、/、MOD(取余)。(取余)。運算符運算符MOD是作除法操作,取余數(shù),如是作除法操作,取余數(shù),如10 MOD 3 = 1。算術(shù)運算符可以用于數(shù)字表達式或地址表達式中。但當算術(shù)運算符可以用于數(shù)字表達式或地址表達式中。但當它用于地址表達式時,只有當其結(jié)果有明確的物理意它用于地址表達式時,只有當其結(jié)果有明確的物理意義時才是有效的結(jié)果,例如,兩個地址相乘或相除是義時才是有效的結(jié)果,例如,兩個地址相乘或相除是無意義的。在地址表達式中,可以用無意義的。在地址表達式中,可以用+或或-,但

17、也必須,但也必須注意其物理意義,例如把兩個不同段的地址相加也是注意其物理意義,例如把兩個不同段的地址相加也是無意義的。經(jīng)常使用的方法是無意義的。經(jīng)常使用的方法是“地址地址常量常量”來描述來描述指針的移動,例如,指針的移動,例如,SUM+1是指是指SUM字節(jié)單元的下字節(jié)單元的下一個字節(jié)單元的地址(注意:不是指一個字節(jié)單元的地址(注意:不是指SUM單元的內(nèi)單元的內(nèi)容加容加1),而),而SUM-1則是指則是指SUM字節(jié)單元的前一個字字節(jié)單元的前一個字節(jié)單元的地址。節(jié)單元的地址。 第第2 2章章 匯編語言程序格式匯編語言程序格式 【例例2.1】將首地址為將首地址為ARRAY的字數(shù)組的第的字數(shù)組的第6個

18、字傳送到個字傳送到DX寄存器中。寄存器中。MOV DX,ARRAY+(6-1)*2【例例2.2】數(shù)組數(shù)組ARR定義如下,試寫出把數(shù)組長度定義如下,試寫出把數(shù)組長度(字數(shù)字數(shù))存入存入CX寄存器的指令。寄存器的指令。ARR DW 1,2,3,4,5,6,7ARREND DW ?其中,其中,ARREND是為計算數(shù)組長度而建立的符號地址,是為計算數(shù)組長度而建立的符號地址,則指令如下:則指令如下:MOV CX,(ARREND-ARR)/2匯編程序在匯編期間將計算出表達式的值而形成指令:匯編程序在匯編期間將計算出表達式的值而形成指令:MOV CX,7第第2 2章章 匯編語言程序格式匯編語言程序格式 (2

19、)邏輯與移位運算符邏輯與移位運算符邏輯運算符邏輯運算符邏輯運算符包括:邏輯運算符包括:AND(邏輯與)、(邏輯與)、OR(邏輯或)、(邏輯或)、XOR(邏輯異或)、(邏輯異或)、NOT(邏輯非)。(邏輯非)。邏輯運算符是按位操作的,它的操作數(shù)只能是數(shù)字,且邏輯運算符是按位操作的,它的操作數(shù)只能是數(shù)字,且結(jié)果也為數(shù)字。邏輯運算符只能用在數(shù)字表達式中,不結(jié)果也為數(shù)字。邏輯運算符只能用在數(shù)字表達式中,不能用在地址表達式中。邏輯運算符和邏輯運算指令是有能用在地址表達式中。邏輯運算符和邏輯運算指令是有區(qū)別的,邏輯運算符的功能在匯編階段完成,邏輯運算區(qū)別的,邏輯運算符的功能在匯編階段完成,邏輯運算指令的功

20、能是在程序執(zhí)行階段完成。要注意指令的功能是在程序執(zhí)行階段完成。要注意AND、OR、XOR、NOT不是助記符,而是運算符。不是助記符,而是運算符。第第2 2章章 匯編語言程序格式匯編語言程序格式 【例例2.3】AND AL,78H AND 0FH等價于:等價于: AND AL,08H【例例2.4】設設VALUE是字節(jié)型變量,分析下面這條語句執(zhí)是字節(jié)型變量,分析下面這條語句執(zhí)行完行完AL寄存器的內(nèi)容。寄存器的內(nèi)容。MOV AL,VALUE AND 01H在匯編后,該語句的源操作數(shù)(在匯編后,該語句的源操作數(shù)(VALUE AND 01H)可能)可能產(chǎn)生兩個結(jié)果之一:當產(chǎn)生兩個結(jié)果之一:當VALUE值

21、的值的D0位為位為1時,時,VALUE和和01與操作的結(jié)果為與操作的結(jié)果為01H,則該語句變成,則該語句變成MOV AL,01H;當;當VALUE值的值的D0位為位為0時,時,VALUE和和01與操作的與操作的結(jié)果為結(jié)果為00H,則該語句變成,則該語句變成MOV AL,00H。因此,執(zhí)行。因此,執(zhí)行后后AL寄存器的內(nèi)容為寄存器的內(nèi)容為01H或或00H。第第2 2章章 匯編語言程序格式匯編語言程序格式 移位運算符移位運算符移位運算符有:移位運算符有:SHL(邏輯左移)、(邏輯左移)、SHR(邏輯右移)(邏輯右移)格式:格式: 表達式表達式 SHL(或(或SHR) n(移位次數(shù))(移位次數(shù))匯編程

22、序?qū)⒈磉_式左移或右移匯編程序?qū)⒈磉_式左移或右移n位,高位或低位補位,高位或低位補0,若移,若移位次數(shù)大于位次數(shù)大于15,則結(jié)果為,則結(jié)果為0?!纠?.5】VAL EQU 5H ;符號常量;符號常量VAL值值=5H MOV AL,VAL SHR 1;VAL=00000101B邏輯邏輯 右移右移1位為位為00000010=2注意:移位運算符注意:移位運算符SHL/SHR在操作數(shù)中,匯編時對常量進在操作數(shù)中,匯編時對常量進行移位;而移位指令行移位;而移位指令SHL/SHR是在指令的操作碼位置,執(zhí)是在指令的操作碼位置,執(zhí)行時對寄存器或存儲器單元中的操作數(shù)移位。行時對寄存器或存儲器單元中的操作數(shù)移位。

23、 第第2 2章章 匯編語言程序格式匯編語言程序格式 (3)關(guān)系運算符關(guān)系運算符關(guān)系運算符包括:關(guān)系運算符包括:EQ(等于)、(等于)、NE(不等)、(不等)、LT(小于)、(小于)、GT(大于)、(大于)、LE(小于等于)、(小于等于)、GE(大于等于)(大于等于)6種。種。格式:格式:表達式表達式1 關(guān)系運算符關(guān)系運算符 表達式表達式2計算結(jié)果,若關(guān)系成立,則為全計算結(jié)果,若關(guān)系成立,則為全1,即,即0FFFFH;關(guān)系不成立,則為全關(guān)系不成立,則為全0。第第2 2章章 匯編語言程序格式匯編語言程序格式 【例例2.6】MOV BX,32 EQ 45 等價于:等價于: MOV BX,0【例例2.

24、7】MOV BX,56 GT 30 等價于:等價于: MOV BX,0FFFFH【例例2.8】MOV BX,(VAL LT 5) AND 20) OR (VAL GE 5) AND 30) 當當VAL5時,匯編結(jié)果應該是:時,匯編結(jié)果應該是: MOV BX,20 當當VAL5時,匯編結(jié)果應該是:時,匯編結(jié)果應該是: MOV BX,30第第2 2章章 匯編語言程序格式匯編語言程序格式 (4)數(shù)值返回運算符數(shù)值返回運算符數(shù)值返回運算符包括:數(shù)值返回運算符包括:SEG(取段地址取段地址)、OFFSET(取偏移地址取偏移地址)、TYPE(取類型值取類型值)、LENGTH(取長度取長度)、SIZE(取總

25、字節(jié)數(shù)取總字節(jié)數(shù))這些操作符把一些特征或存儲器地址的一部分作這些操作符把一些特征或存儲器地址的一部分作為數(shù)值回送,但不改變源操作數(shù)的屬性。為數(shù)值回送,但不改變源操作數(shù)的屬性。第第2 2章章 匯編語言程序格式匯編語言程序格式 SEG格式:格式:SEG 變量名變量名/標號標號匯編程序?qū)⒒厮妥兞炕驑颂柕亩蔚刂分?。匯編程序?qū)⒒厮妥兞炕驑颂柕亩蔚刂分??!纠?.9】如果如果DATA_SEG是從存儲器的是從存儲器的05000H開始的開始的一個數(shù)據(jù)段的段名,一個數(shù)據(jù)段的段名,OPER1是該段中的一個變量名,則是該段中的一個變量名,則MOV BX,SEG OPER1將把將把05000H作為立即數(shù)插入指令。實際

26、上,由于段地址作為立即數(shù)插入指令。實際上,由于段地址是由連接程序分配的,所以該立即數(shù)是連接時插入的。是由連接程序分配的,所以該立即數(shù)是連接時插入的。執(zhí)行期間則使執(zhí)行期間則使BX寄存器的內(nèi)容變成為寄存器的內(nèi)容變成為05000H第第2 2章章 匯編語言程序格式匯編語言程序格式 OFFSET格式:格式:OFFSET 變量名變量名/標號標號 匯編程序?qū)⒒厮妥兞炕驑颂柕钠频刂?。匯編程序?qū)⒒厮妥兞炕驑颂柕钠频刂贰!纠?.10】MOV BX,OFFSET OPER_2匯編程序?qū)R編程序?qū)PER_2的偏移地址作為立即數(shù)回送的偏移地址作為立即數(shù)回送給指令,而在執(zhí)行時則將該偏移地址裝入給指令,而在執(zhí)行時則

27、將該偏移地址裝入BX寄寄存器中,所以這條指令與存器中,所以這條指令與LEA BX,OPER_2是等價的。是等價的。第第2 2章章 匯編語言程序格式匯編語言程序格式 TYPE格式:格式:TYPE 變量名變量名/標號標號 如果該表達式是變量,則匯編程序?qū)⒒厮妥兞康囊宰止?jié)如果該表達式是變量,則匯編程序?qū)⒒厮妥兞康囊宰止?jié)數(shù)表示的類型:數(shù)表示的類型:DB為為1,DW為為2,DD為為4。如果該表達。如果該表達式是標號,則匯編程序?qū)⒒厮痛碓摌颂栴愋蛿?shù)值:式是標號,則匯編程序?qū)⒒厮痛碓摌颂栴愋蛿?shù)值:NEAR為為-1,F(xiàn)AR為為-2。如果表達式為常數(shù),則應回送。如果表達式為常數(shù),則應回送0?!纠?.11】

28、ARRAY DW 1,2,3則對于指令:則對于指令:ADD SI,TYPE ARRAY匯編程序?qū)⑵湫纬蔀椋簠R編程序?qū)⑵湫纬蔀椋篈DD SI,2第第2 2章章 匯編語言程序格式匯編語言程序格式 LENGTH格式:格式:LENGTH 變量名變量名對于變量中使用對于變量中使用DUP的情況,匯編程序?qū)⒒厮头值那闆r,匯編程序?qū)⒒厮头峙浣o該變量的單元數(shù),對于其他情況則送配給該變量的單元數(shù),對于其他情況則送1?!纠?.12】FEES DW 100 DUP(0)對于指令:對于指令:MOV CX,LENGTH FEES匯編程序?qū)⑵湫纬蔀椋簠R編程序?qū)⑵湫纬蔀椋?MOV CX,100第第2 2章章 匯編語言程序格

29、式匯編語言程序格式 SIZE格式:格式:SIZE 變量名變量名匯編程序應回送分配給該變量的總字節(jié)數(shù),也就匯編程序應回送分配給該變量的總字節(jié)數(shù),也就是是LENGTH和和TYPE的乘積,即:的乘積,即:SIZE=LENGTHTYPE【例例2.13】FEES DW 100 DUP(0)對于指令:對于指令:MOV CX,SIZE FEES匯編程序?qū)⑵湫纬蔀椋簠R編程序?qū)⑵湫纬蔀椋?MOV CX,200第第2 2章章 匯編語言程序格式匯編語言程序格式 (5)屬性運算符屬性運算符屬性運算符包括:屬性運算符包括:PTR(屬性修改運算符屬性修改運算符)、“:”(段跨越前綴符)和(段跨越前綴符)和SHORT(短取

30、代運算符)。(短取代運算符)。PTR格式:格式:類型類型 PTR 表達式表達式是屬性修改運算符,用是屬性修改運算符,用PTR來建立符號地址,但來建立符號地址,但它本身并不分配存儲器,只是用來給已分配的存它本身并不分配存儲器,只是用來給已分配的存儲地址賦予另一種屬性,使該地址具有另一種類儲地址賦予另一種屬性,使該地址具有另一種類型,僅在本語句有效。格式中的類型字段表示所型,僅在本語句有效。格式中的類型字段表示所賦予的新的類型屬性,而表達式字段則是被取代賦予的新的類型屬性,而表達式字段則是被取代類型的符號地址。類型的符號地址。第第2 2章章 匯編語言程序格式匯編語言程序格式 【例例2.16】已有數(shù)

31、據(jù)定義如下:已有數(shù)據(jù)定義如下:ARRAY DW ?可以用以下語句對這兩個字節(jié)賦予另一種類型定義:可以用以下語句對這兩個字節(jié)賦予另一種類型定義:ARRAY1 EQU BYTE PTR ARRAYARRAY2 EQU BYTE PTR (ARRAY+1)這里,這里,ARRAY和和ARRAY1兩個符號地址具有相同的段地兩個符號地址具有相同的段地址和偏移地址,但是它們的屬性類型不同,前者為址和偏移地址,但是它們的屬性類型不同,前者為1,后,后者為者為2。第第2 2章章 匯編語言程序格式匯編語言程序格式 此外,有時指令中也要求使用此外,有時指令中也要求使用PTR運算符。例如,運算符。例如,當匯編程序遇到

32、當匯編程序遇到“MOV BX,5”指令時,指令指令時,指令要求把立即數(shù)要求把立即數(shù)5存入存入BX寄存器內(nèi)容所指定的存儲寄存器內(nèi)容所指定的存儲單元中,但是,匯編程序不能分清是存入字單元單元中,但是,匯編程序不能分清是存入字單元還是字節(jié)單元,此時必須用還是字節(jié)單元,此時必須用PTR運算符來說明屬運算符來說明屬性,應該寫明:性,應該寫明:MOV BYTE PTR BX,5或或MOV WORD PTR BX,5第第2 2章章 匯編語言程序格式匯編語言程序格式 :格式:格式:段寄存器:地址表達式段寄存器:地址表達式“:”稱為段運算符,又稱為段跨越前綴符。用稱為段運算符,又稱為段跨越前綴符。用于臨時給變量

33、、標號或地址表達式指定一個段屬于臨時給變量、標號或地址表達式指定一個段屬性,地址表達式的性,地址表達式的EA和類型屬性不變。在指令和類型屬性不變。在指令中代替默認的段以形成物理地址。中代替默認的段以形成物理地址?!纠?.17】MOV AX,ES:BX+SI;PA=ES*16+EA,臨時替換默認的,臨時替換默認的DS第第2 2章章 匯編語言程序格式匯編語言程序格式 SHORT短取代運算符,用來修飾短取代運算符,用來修飾JMP指令中轉(zhuǎn)向地址的指令中轉(zhuǎn)向地址的屬性,指出轉(zhuǎn)向地址是在下一條指令地址的屬性,指出轉(zhuǎn)向地址是在下一條指令地址的-128+127個字節(jié)范圍內(nèi)。個字節(jié)范圍內(nèi)?!纠?.18】JM

34、P SHORT NEXTNEXT:MOV AX,BX第第2 2章章 匯編語言程序格式匯編語言程序格式 (6)運算符的優(yōu)先級運算符的優(yōu)先級以上說明了以上說明了5類常用的運算符,在計算表達式時,應該首先計算優(yōu)先類常用的運算符,在計算表達式時,應該首先計算優(yōu)先級高的運算符,同級運算符從自左向右進行計算。下面給出運算符級高的運算符,同級運算符從自左向右進行計算。下面給出運算符的優(yōu)先級別,從高到低排列如下:的優(yōu)先級別,從高到低排列如下:( )、 、LENGTH、SIZE,然后是段跨越前綴符,然后是段跨越前綴符“:”PTR、OFFSET、SEG、TYPE、THIS以及段運算符以及段運算符HIGH、LOW*

35、、/、MOD、SHL、SHR+、-EQ、NE、LT、LE、GT、GENOTANDOR、XORSHORT第第2 2章章 匯編語言程序格式匯編語言程序格式 4注釋項注釋項注釋項由分號注釋項由分號“;”開始,用來說明一條指令或開始,用來說明一條指令或一段程序的功能,它不屬于程序本身,在匯編過一段程序的功能,它不屬于程序本身,在匯編過程中,匯編程序不會對注釋作任何加工,這部分程中,匯編程序不會對注釋作任何加工,這部分不產(chǎn)生機器代碼,注釋只是為了增加程序的可讀不產(chǎn)生機器代碼,注釋只是為了增加程序的可讀性,便于閱讀、理解和修改程序。對于匯編語言性,便于閱讀、理解和修改程序。對于匯編語言程序來說,注釋項的作

36、用是很明顯的,讀者應該程序來說,注釋項的作用是很明顯的,讀者應該在編寫匯編程序的過程中,注意學會寫好注釋。在編寫匯編程序的過程中,注意學會寫好注釋。第第2 2章章 匯編語言程序格式匯編語言程序格式 2.2 偽指令偽指令第第2 2章章 匯編語言程序格式匯編語言程序格式 由于由于80 x86的所有處理器都支持的所有處理器都支持8086/8088指令系統(tǒng),但每一指令系統(tǒng),但每一種高檔的機型又都增加一些新的指令,因此,在編寫程序種高檔的機型又都增加一些新的指令,因此,在編寫程序時要對所用處理器有一個明確的選擇。此類偽指令格式為:時要對所用處理器有一個明確的選擇。此類偽指令格式為: 8086;選擇;選擇

37、8086指令系統(tǒng)指令系統(tǒng) 286;選擇;選擇80286指令系統(tǒng)指令系統(tǒng) 286P;選擇保護模式下;選擇保護模式下80286指令系統(tǒng)指令系統(tǒng) 386;選擇;選擇80386指令系統(tǒng)指令系統(tǒng)需要注意的問題:需要注意的問題: (1)處理器選擇偽指令在完整和簡化兩種程序框架中均可使處理器選擇偽指令在完整和簡化兩種程序框架中均可使 用。用。(2) 缺省時為選擇缺省時為選擇8088/8086微處理器指令系統(tǒng)。微處理器指令系統(tǒng)。第第2 2章章 匯編語言程序格式匯編語言程序格式 程序中所涉及到的大量初始數(shù)據(jù)、中間數(shù)據(jù)和結(jié)果數(shù)據(jù),程序中所涉及到的大量初始數(shù)據(jù)、中間數(shù)據(jù)和結(jié)果數(shù)據(jù),一般都要在程序設計時進行預置和分配

38、存儲空間,可以一般都要在程序設計時進行預置和分配存儲空間,可以通過數(shù)據(jù)定義偽指令實現(xiàn),其格式為:通過數(shù)據(jù)定義偽指令實現(xiàn),其格式為:變量名變量名 DB 表達式表達式;定義字節(jié)型變量,每個操;定義字節(jié)型變量,每個操 作數(shù)占作數(shù)占1個字節(jié)的內(nèi)存?zhèn)€字節(jié)的內(nèi)存單元單元變量名變量名 DW 表達式表達式;定義字型變量,每個操作;定義字型變量,每個操作 數(shù)占數(shù)占2個字節(jié)的內(nèi)存單個字節(jié)的內(nèi)存單元元變量名變量名 DD 表達式表達式;定義雙字型變量,每個操;定義雙字型變量,每個操 作數(shù)占作數(shù)占4個字節(jié)的內(nèi)存?zhèn)€字節(jié)的內(nèi)存單元單元 第第2 2章章 匯編語言程序格式匯編語言程序格式 其中,其中,DB、DW、DD稱為偽指令

39、助記符,分別用來定義稱為偽指令助記符,分別用來定義字節(jié)型、字型、雙字型變量。數(shù)據(jù)定義偽指令可用于除字節(jié)型、字型、雙字型變量。數(shù)據(jù)定義偽指令可用于除代碼段以外的任何段中,但主要用于數(shù)據(jù)段和附加數(shù)據(jù)代碼段以外的任何段中,但主要用于數(shù)據(jù)段和附加數(shù)據(jù)段中,用來按名字存取其對應的內(nèi)存單元。數(shù)據(jù)定義偽段中,用來按名字存取其對應的內(nèi)存單元。數(shù)據(jù)定義偽指令可以為一個或連續(xù)的存儲單元設置數(shù)值初值。其中指令可以為一個或連續(xù)的存儲單元設置數(shù)值初值。其中變量名、助記符和操作數(shù)之間以空格隔開,且方括號中變量名、助記符和操作數(shù)之間以空格隔開,且方括號中內(nèi)容為可選項。表達式可為如下幾種情況:常數(shù)表達式、內(nèi)容為可選項。表達式

40、可為如下幾種情況:常數(shù)表達式、問號(?)、地址表達式(適用問號(?)、地址表達式(適用DW和和DD)、字符及字)、字符及字符串(適用于符串(適用于DB)、重復子句)、重復子句DUP(表達式)、用逗號(表達式)、用逗號分開的上述各項。分開的上述各項。 第第2 2章章 匯編語言程序格式匯編語言程序格式 需要說明的是:(1)若是字符串且是DB類型時,必須以單引號括起來,括起來的字符個數(shù)不能超過255個,字符串以ASCII碼的形式按地址遞增的順序依次存放在以變量名開始的內(nèi)存單元中;(2)若是?時,表示為變量預留內(nèi)存單元。例如: X1 DB ? ;為變量X1預留1個字節(jié)單元;(3)若是帶DUP的表達式表

41、示定義多個相同的操作數(shù)和要預留多個內(nèi)存單元。DUP的使用格式如下:表達式 DUP(操作數(shù)項)表達式為要重復的次數(shù);操作數(shù)表示要重復的內(nèi)容,可以是常數(shù)或表達式、字符串、?和帶DUP的表達式。 第第2 2章章 匯編語言程序格式匯編語言程序格式 【例例2.19】操作數(shù)可以是常數(shù),或者是表達式。操作數(shù)可以是常數(shù),或者是表達式。DATA1 DB 12,4,10H;每個操作數(shù)占用一個字節(jié)單元;每個操作數(shù)占用一個字節(jié)單元DATA2 DW 100,100H,-5;每個操作數(shù)占用一個字單元;每個操作數(shù)占用一個字單元DATA3 DD 3*20,0FFFDH;每個操作數(shù)占用一個雙字單元;每個操作數(shù)占用一個雙字單元匯

42、編程序可以在匯編期間在存儲器中存入數(shù)據(jù),匯編程序可以在匯編期間在存儲器中存入數(shù)據(jù),如圖如圖2.1所示。所示。第第2 2章章 匯編語言程序格式匯編語言程序格式 0CFB010000640A04FF00FFFD0000003C0012d4d10h100d100h-560d0FFFDHDATA1DATA3DATA2圖2.1 例2.19的匯編結(jié)果第第2 2章章 匯編語言程序格式匯編語言程序格式 【例例2.20】操作數(shù)也可以是字符操作數(shù)也可以是字符串。下面串。下面3個定義語句是等價的。個定義語句是等價的。存儲器存儲情況如圖存儲器存儲情況如圖2.2所示。所示。STR1 DB ABCD ;存放地;存放地址由

43、低到高分別為:址由低到高分別為:41H、42H、43H、44HSTR1 DB A,B,C,DSTR1 DB 41H,42H,43H,44H 41H44H43H42HABCDSTR1圖2.2 例2.20的匯編結(jié)果 第第2 2章章 匯編語言程序格式匯編語言程序格式 1模塊命名偽指令模塊命名偽指令(NAME)格式:格式:NAME 模塊名模塊名該命令表示一個模塊的開始,并給出該模塊名。如果程該命令表示一個模塊的開始,并給出該模塊名。如果程序中沒有使用序中沒有使用NAME偽指令,也可以使用偽指令,也可以使用TITLE偽指令來偽指令來給源程序設置標題,以后每頁的第一行都列出該標題。給源程序設置標題,以后每

44、頁的第一行都列出該標題。2標題偽指令標題偽指令(TITLE)格式:格式:TITLE TEXT這里這里TEXT為標題,即為不加引號的字符串,最長為為標題,即為不加引號的字符串,最長為60個個字符。一個程序模塊中只允許一個字符。一個程序模塊中只允許一個TITLE命令,否則會引命令,否則會引起誤會。在無起誤會。在無NAME命令情況下,命令情況下,TEXT的前的前6個字符一個字符一般用作模塊名。般用作模塊名。第第2 2章章 匯編語言程序格式匯編語言程序格式 格式:格式:END 標號標號其中:標號可以是過程名或帶其中:標號可以是過程名或帶“:”的標號,標號表示的標號,標號表示為程序開始執(zhí)行的起始地址,即

45、主程序中的第一條可執(zhí)為程序開始執(zhí)行的起始地址,即主程序中的第一條可執(zhí)行指令的地址。當標號缺省時表示該程序是一個子程序,行指令的地址。當標號缺省時表示該程序是一個子程序,不能單獨運行,只能被其他程序調(diào)用。不能單獨運行,只能被其他程序調(diào)用。模塊的一般形式為:模塊的一般形式為:NAME 模塊名模塊名所有的語句所有的語句END 啟動標號或過程啟動標號或過程第第2 2章章 匯編語言程序格式匯編語言程序格式 8086按照邏輯段組織程序,具有代碼段、數(shù)據(jù)段、按照邏輯段組織程序,具有代碼段、數(shù)據(jù)段、附加段和堆棧段。因此,一個匯編語言源程序可附加段和堆棧段。因此,一個匯編語言源程序可以包括若干個代碼段、數(shù)據(jù)段或

46、堆棧段,段與段以包括若干個代碼段、數(shù)據(jù)段或堆棧段,段與段之間的順序可以隨意排列。邏輯段用匯編語言源之間的順序可以隨意排列。邏輯段用匯編語言源程序中的段定義偽指令來定義。程序中的段定義偽指令來定義。第第2 2章章 匯編語言程序格式匯編語言程序格式 1完整段定義偽指令(完整段定義偽指令(SEGMENT、ENDS)采用完整段定義偽指令可具體控制匯編程序和連接程序采用完整段定義偽指令可具體控制匯編程序和連接程序在內(nèi)存中組織代碼和數(shù)據(jù)的方式。為此,需要用段定義在內(nèi)存中組織代碼和數(shù)據(jù)的方式。為此,需要用段定義偽操作,其格式如下:偽操作,其格式如下:段名段名 SEGMENT 定位類型定位類型 組合類型組合類

47、型 類別名類別名段名段名 ENDS第第2 2章章 匯編語言程序格式匯編語言程序格式 定義了一個以定義了一個以SEGMENT偽指令開始,以偽指令開始,以ENDS偽指令結(jié)偽指令結(jié)束的存儲段,二者總是成對出現(xiàn),缺一不可。中間省略束的存儲段,二者總是成對出現(xiàn),缺一不可。中間省略的部分稱為段體。對數(shù)據(jù)段、附加段、堆棧段來說,一的部分稱為段體。對數(shù)據(jù)段、附加段、堆棧段來說,一般為變量、符號定義等偽指令;對代碼段來說,則主要般為變量、符號定義等偽指令;對代碼段來說,則主要是程序代碼。方括號中的為可選項,當有可選項時各項是程序代碼。方括號中的為可選項,當有可選項時各項順序不能錯,可選項之間用空格隔開。下面分別

48、介紹這順序不能錯,可選項之間用空格隔開。下面分別介紹這些部分的作用。些部分的作用。(1) 段名段名段名是用戶自定義的,但不要與指令助記符或偽指令重段名是用戶自定義的,但不要與指令助記符或偽指令重名,用來指示匯編程序為該段分配的存儲區(qū)的首地址,名,用來指示匯編程序為該段分配的存儲區(qū)的首地址,它有段地址和偏移地址兩個屬性。段開始和段結(jié)束的段它有段地址和偏移地址兩個屬性。段開始和段結(jié)束的段名必須相同。名必須相同。第第2 2章章 匯編語言程序格式匯編語言程序格式 (2) 定位類型定位類型說明段的起始地址的邊界要求,指示連接程序按定位類說明段的起始地址的邊界要求,指示連接程序按定位類型提出的要求,安排各

49、段在內(nèi)存的相互銜接方式。它型提出的要求,安排各段在內(nèi)存的相互銜接方式。它有有5種可選擇類型:種可選擇類型: BYTE:段的起始地址可以從任何地址開始。:段的起始地址可以從任何地址開始。 段起始地址段起始地址(20位位): B WORD:段的起始地址必須以偶地址開始,即該地:段的起始地址必須以偶地址開始,即該地 址的址的D0位應為位應為0。 段起始地址段起始地址(20位位): 0 B第第2 2章章 匯編語言程序格式匯編語言程序格式 DWORD:段的起始地址必須為:段的起始地址必須為4的倍數(shù),即該地址的倍數(shù),即該地址的的D1和和D0位應為位應為0。 段起始地址段起始地址(20位位): 00 B P

50、ARA:段的起始地址必須從小段邊界開始,即該地:段的起始地址必須從小段邊界開始,即該地址的址的D3D0位應為位應為0。 段起始地址段起始地址(20位位): 0000 BPAGE:段的起始地址必須從頁的邊界開始,即該地:段的起始地址必須從頁的邊界開始,即該地址的址的D7D0位應為位應為0。 段起始地址段起始地址(20位位): 0000 0000 B 如未指定定位類型,則匯編程序默認為如未指定定位類型,則匯編程序默認為PARA。第第2 2章章 匯編語言程序格式匯編語言程序格式 (3) 組合類型組合類型當程序有多個段時,組合類型用來說明段與段之間是怎當程序有多個段時,組合類型用來說明段與段之間是怎樣

51、連接和定位的,共有樣連接和定位的,共有6種組合類型:種組合類型: 不指定或稱隱含方式:表示本段與其他模塊中的同不指定或稱隱含方式:表示本段與其他模塊中的同 名段無連接關(guān)系,它將作為一個獨立的段運行。名段無連接關(guān)系,它將作為一個獨立的段運行。 PUBLIC:本段與其他模塊中說明為:本段與其他模塊中說明為PUBLIC方式的方式的 同名段順序連接,組成一個大的邏輯段,它們共同名段順序連接,組成一個大的邏輯段,它們共用用 同一個段起始地址。同一個段起始地址。 COMMON:本段與其他模塊中說明為:本段與其他模塊中說明為COMMON方方 式的同名段從同一地址開始重疊連接,段長是同式的同名段從同一地址開始

52、重疊連接,段長是同名名 段中最長的段的長度。段中最長的段的長度。第第2 2章章 匯編語言程序格式匯編語言程序格式 STACK:表示該段是堆棧段的一部分。把所有相同:表示該段是堆棧段的一部分。把所有相同 類別名類別名的具有的具有STACK組合類型的段連接成一組合類型的段連接成一個連個連 續(xù)段,該段長度為各原有段的總和。將連續(xù)段首續(xù)段,該段長度為各原有段的總和。將連續(xù)段首地地 址送址送SS,段內(nèi)最大偏移地址送,段內(nèi)最大偏移地址送SP(SP指向棧指向棧頂)。頂)。 當定義了當定義了STACK屬性后,在主程序中可省略對屬性后,在主程序中可省略對SS和和 SP的初始化。的初始化。 MEMORY:與:與P

53、UBLIC同義。同義。 AT表達式:表示本段的段地址由表達式的值得到。表達式:表示本段的段地址由表達式的值得到。 該段的偏移地址為該段的偏移地址為“零零”。這種方式用戶可直接。這種方式用戶可直接規(guī)定該規(guī)定該 段的起始地址。例如,段的起始地址。例如,AT 1000H,定位的段首,定位的段首地址地址 為(為(1000H:0000H),但這種方式不能用于代),但這種方式不能用于代碼段。碼段。第第2 2章章 匯編語言程序格式匯編語言程序格式 (4) 類別名類別名類別名必須用單引號括起來。連接時對不同模塊、不同類別名必須用單引號括起來。連接時對不同模塊、不同名的程序段只要名的程序段只要類別名類別名相同,

54、則放在一個連續(xù)的物相同,則放在一個連續(xù)的物理空間,但每段之間是獨立的,不進行組合。理空間,但每段之間是獨立的,不進行組合。第第2 2章章 匯編語言程序格式匯編語言程序格式 2指定段寄存器偽指令(指定段寄存器偽指令(ASSUME)在程序中,必須明確段和段寄存器之間的關(guān)系,這可用在程序中,必須明確段和段寄存器之間的關(guān)系,這可用ASSUME偽指令來實現(xiàn),其格式為:偽指令來實現(xiàn),其格式為:ASSUME 段寄存器名:段名段寄存器名:段名,段寄存器名:段名,段寄存器名:段名ASSUME偽指令告訴匯編程序,在運行期間通過哪個段偽指令告訴匯編程序,在運行期間通過哪個段寄存器才能找到所要的指令和數(shù)據(jù)。該指令放在

55、程序的寄存器才能找到所要的指令和數(shù)據(jù)。該指令放在程序的代碼段中。代碼段中。如:如:ASSUME CS:CODE,ES:EXTRA,DS:DATA,SS:STACK第第2 2章章 匯編語言程序格式匯編語言程序格式 3段寄存器的裝入段寄存器的裝入 ASSUME偽指令只是指出各段和段寄存器之間的關(guān)偽指令只是指出各段和段寄存器之間的關(guān)系,但并未真正將段基地址裝入相應的段寄存器中,所系,但并未真正將段基地址裝入相應的段寄存器中,所以在程序的代碼段開始處就應該先進行數(shù)據(jù)段以在程序的代碼段開始處就應該先進行數(shù)據(jù)段DS、附加、附加段段ES和堆棧段和堆棧段SS的段基址的裝入,否則無法正確對數(shù)據(jù)的段基址的裝入,否

56、則無法正確對數(shù)據(jù)進行尋址操作。而代碼段進行尋址操作。而代碼段CS則在加載程序后由系統(tǒng)自動則在加載程序后由系統(tǒng)自動裝入。裝入。 DS和和ES的裝填方法可以使用相同的方法,直接由的裝填方法可以使用相同的方法,直接由用戶程序進行加載。用戶程序進行加載。第第2 2章章 匯編語言程序格式匯編語言程序格式 (1) DS、ES的裝入的裝入 MOV AX,DATA ;數(shù)據(jù)段段基地址送;數(shù)據(jù)段段基地址送AX寄存器寄存器 MOV DS,AX ;AX寄存器的內(nèi)容送數(shù)據(jù)段寄寄存器的內(nèi)容送數(shù)據(jù)段寄存器存器DS或或 MOV AX,SEG X ;變量;變量X所在數(shù)據(jù)段的段基址送所在數(shù)據(jù)段的段基址送AX寄存器寄存器 MOV

57、DS,AX第第2 2章章 匯編語言程序格式匯編語言程序格式 (2) CS的裝入的裝入對對CS和和IP的裝入方法是利用的裝入方法是利用END后的標號來完成的。因后的標號來完成的。因為該標號是可執(zhí)行程序的起始地址。如:為該標號是可執(zhí)行程序的起始地址。如:START:END START系統(tǒng)自動將系統(tǒng)自動將START所在段的段地址送所在段的段地址送CS寄存器,將寄存器,將START所在段內(nèi)的偏移地址送所在段內(nèi)的偏移地址送IP寄存器。寄存器。 第第2 2章章 匯編語言程序格式匯編語言程序格式 (3) SS的裝入的裝入方法方法1:堆棧段:堆棧段SS也可以不用用戶裝入,而由系統(tǒng)自動裝填。但是也可以不用用戶裝

58、入,而由系統(tǒng)自動裝填。但是在定義堆棧段時,必須把參數(shù)寫全。這時,將程序裝入內(nèi)存,系統(tǒng)在定義堆棧段時,必須把參數(shù)寫全。這時,將程序裝入內(nèi)存,系統(tǒng)會自動地把堆棧段地址和堆棧指針置入會自動地把堆棧段地址和堆棧指針置入SS和和SP中,因而可以不在代中,因而可以不在代碼段中裝入碼段中裝入SS和和SP的值。的值。STACK1 SEGMENT PARA STACK STACKDB 50H DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE, SS:STACK1CODE ENDS當目標代碼裝入存儲器后,當目標代碼裝入存儲器后,SS中已自動裝入中已自動裝入STACK段的段基值

59、,堆段的段基值,堆棧指針棧指針SP指向堆棧的底部指向堆棧的底部+1的存儲單元。的存儲單元。 第第2 2章章 匯編語言程序格式匯編語言程序格式 方法方法2:STACK1 SEGMENT PARADW 50H DUP(?)TOP LABEL WORD;TOP屬性為屬性為WORDSTACK1 ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK1START:MOV AX,STACK1MOV SS,AX;堆棧段的段地址送;堆棧段的段地址送SSMOV SP,OFFSET TOP;堆棧段的棧頂?shù)刂匪?;堆棧段的棧頂?shù)刂匪蚐PTOP是該堆棧的初始棧頂部地址。是該堆棧的初始棧頂部地址。

60、第第2 2章章 匯編語言程序格式匯編語言程序格式 4操作系統(tǒng)下匯編程序的正常結(jié)束操作系統(tǒng)下匯編程序的正常結(jié)束對于可執(zhí)行文件(對于可執(zhí)行文件(.EXE)在)在DOS提示符下正常結(jié)束可以用兩種方法:提示符下正常結(jié)束可以用兩種方法:方法方法1: MOV AX,4C00H;INT 21H方法方法2: MAIN PROC FARPUSH DS;保存原來的數(shù)據(jù)段段地址;保存原來的數(shù)據(jù)段段地址MOV AX,0H ;0送送AX PUSH AX;0壓棧壓棧RET;返回;返回DOSMAIN ENDP第第2 2章章 匯編語言程序格式匯編語言程序格式 簡化的段定義書寫簡單,有利于實現(xiàn)匯編語言程簡化的段定義書寫簡單,有

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論