MASM匯編語言基礎(chǔ)_第1頁
MASM匯編語言基礎(chǔ)_第2頁
MASM匯編語言基礎(chǔ)_第3頁
MASM匯編語言基礎(chǔ)_第4頁
MASM匯編語言基礎(chǔ)_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、4.1 4.1 匯編語言語句種類及其格式匯編語言語句種類及其格式 匯編程序是計算機的系統(tǒng)軟件之一,它的作用是將匯編程序是計算機的系統(tǒng)軟件之一,它的作用是將匯編語言源程序翻譯成機器語言程序。匯編語言源程序翻譯成機器語言程序。 最常用的支持最常用的支持Intel8086/8088Intel8086/8088系列微機的匯編程序系列微機的匯編程序MASMMASM,是美國,是美國MicrosoftMicrosoft公司開發(fā)較早的宏匯編程序,公司開發(fā)較早的宏匯編程序,它不僅具有它不僅具有ASMASM的全部功能(支持基本匯編語言),而的全部功能(支持基本匯編語言),而且增加了宏指令、結(jié)構(gòu)、記錄等高級宏匯編功

2、能。且增加了宏指令、結(jié)構(gòu)、記錄等高級宏匯編功能。 語句(語句(StatementStatement)是匯編語言源程序的基本組成)是匯編語言源程序的基本組成單位。一個匯編語言源程序有三種基本語句:單位。一個匯編語言源程序有三種基本語句:指令語句指令語句、偽指令語句偽指令語句、宏指令語句宏指令語句。第第4 4章章 MASMMASM匯編語言基礎(chǔ)匯編語言基礎(chǔ) 4.1.1 指令語句指令語句 每一條每一條指令語句指令語句在匯編時都要產(chǎn)生一個可供機在匯編時都要產(chǎn)生一個可供機器執(zhí)行的目標(biāo)代碼,因此,也被稱為器執(zhí)行的目標(biāo)代碼,因此,也被稱為可執(zhí)行語句可執(zhí)行語句。格式如圖格式如圖4.1所示:所示:圖圖4.1 指令

3、語句的格式指令語句的格式標(biāo)號指令助記符操作數(shù)注釋:;,一條指令語句有如下一條指令語句有如下4個字段:個字段:1標(biāo)號字段標(biāo)號字段這是一個可選字段。標(biāo)號必須以這是一個可選字段。標(biāo)號必須以“:”作為結(jié)束符。一個標(biāo)號作為結(jié)束符。一個標(biāo)號是一條指令的符號地址,它代表該指令的第一個字節(jié)的地址。是一條指令的符號地址,它代表該指令的第一個字節(jié)的地址。 2指令助記符字段指令助記符字段這是一條指令中這是一條指令中不可缺少不可缺少的主要成分。它表示這條語句要求的主要成分。它表示這條語句要求CPU完成什么操作。完成什么操作。 3操作數(shù)字段操作數(shù)字段參與操作的數(shù)據(jù)或地址。指令語句可以有一個操作數(shù)、兩個操參與操作的數(shù)據(jù)或

4、地址。指令語句可以有一個操作數(shù)、兩個操作數(shù)或無操作數(shù)。作數(shù)或無操作數(shù)。 4注釋字段注釋字段這是一個可選字段,注釋字段必須以分號這是一個可選字段,注釋字段必須以分號“;”為開始,它可以為開始,它可以方便程序設(shè)計人員對程序或指令加以注釋,提高程序的的可讀性。方便程序設(shè)計人員對程序或指令加以注釋,提高程序的的可讀性。4.1.2 偽指令語句偽指令語句 偽指令本身不產(chǎn)生與之對應(yīng)的目標(biāo)代碼。它是在偽指令本身不產(chǎn)生與之對應(yīng)的目標(biāo)代碼。它是在匯編程序?qū)R編語言源程序匯編期間,由匯編程序處匯編程序?qū)R編語言源程序匯編期間,由匯編程序處理的操作,可以完成數(shù)據(jù)定義、分配存儲區(qū)、指示程理的操作,可以完成數(shù)據(jù)定義、分配

5、存儲區(qū)、指示程序結(jié)束等任務(wù)。序結(jié)束等任務(wù)。 ,;注釋操作符偽指令符號名圖圖4.2 偽指令語句的格式偽指令語句的格式一條偽指令語句也有如下一條偽指令語句也有如下4個字段:個字段:1符號名字段符號名字段 這是一個可選字段。這是一個可選字段。符號名后面不得用冒號符號名后面不得用冒號“:”,這是它與指令語句格式上的唯一區(qū)別。這是它與指令語句格式上的唯一區(qū)別。2偽指令字段偽指令字段 這是偽指令語句中這是偽指令語句中不可省略不可省略的主要成分。是偽指令語的主要成分。是偽指令語句要求匯編程序完成的具體操作命令。句要求匯編程序完成的具體操作命令。3操作數(shù)字段操作數(shù)字段 這是數(shù)據(jù)項,本字段是否需要,需要幾個,需

6、要什這是數(shù)據(jù)項,本字段是否需要,需要幾個,需要什么樣的操作數(shù)等都由偽指令字段中偽指令來確定。么樣的操作數(shù)等都由偽指令字段中偽指令來確定。4注釋字段注釋字段 這是一個任選字段,它必須以分號為開始,它的作這是一個任選字段,它必須以分號為開始,它的作用與指令語句的注釋字段相同。用與指令語句的注釋字段相同。4.2 匯編語言數(shù)據(jù)匯編語言數(shù)據(jù)通常匯編語言能識別的數(shù)據(jù)有:常量、變量和標(biāo)號。通常匯編語言能識別的數(shù)據(jù)有:常量、變量和標(biāo)號。4.2.1 常量常量常量:出現(xiàn)在常量:出現(xiàn)在8086源程序中的固定值。源程序中的固定值。 1十進制常量:以字母十進制常量:以字母D結(jié)尾的結(jié)尾的09的的數(shù)字序列,其中字母數(shù)字序列

7、,其中字母D可以省略;可以省略;2二進制常量:以字母二進制常量:以字母B結(jié)尾的結(jié)尾的0和和1組成的數(shù)字序列;組成的數(shù)字序列;3八進制常量:以字母八進制常量:以字母O或或Q結(jié)尾的結(jié)尾的07的的數(shù)字序列;數(shù)字序列;4十六進制常量:以字母十六進制常量:以字母H結(jié)尾的結(jié)尾的09和和AF(或(或af)的數(shù)字字母)的數(shù)字字母 序列。序列。(注意:若最高位數(shù)是(注意:若最高位數(shù)是AF,則前面需加,則前面需加“0”)5字符串常量:用單引號或雙引號括起來的一個或多個字符,這些字符字符串常量:用單引號或雙引號括起來的一個或多個字符,這些字符 用它的用它的ASCII碼值存儲在內(nèi)存中。碼值存儲在內(nèi)存中。 4.2.2

8、變量變量 變量就是用來表示程序中所用的內(nèi)存操作數(shù)。變量就是用來表示程序中所用的內(nèi)存操作數(shù)。1定義定義格式:格式:變量名變量名 類型助記符類型助記符 操作數(shù)操作數(shù),操作數(shù),操作數(shù), 其中變量名字段是可有可無的,它用于指示內(nèi)存操作數(shù)的其中變量名字段是可有可無的,它用于指示內(nèi)存操作數(shù)的地址(符號地址);操作數(shù)字段用于指示內(nèi)存操作數(shù),匯編程地址(符號地址);操作數(shù)字段用于指示內(nèi)存操作數(shù),匯編程序?qū)⒍x的內(nèi)存操作數(shù),按其類型給它們分配內(nèi)存單元。序?qū)⒍x的內(nèi)存操作數(shù),按其類型給它們分配內(nèi)存單元。常用的有以下幾種:常用的有以下幾種:DB偽指令用來定義字節(jié),其后的每個操作數(shù)都占用偽指令用來定義字節(jié),其后的每個

9、操作數(shù)都占用1個存儲單元;個存儲單元;DW偽指令用來定義字,其后的每個操作數(shù)都占用偽指令用來定義字,其后的每個操作數(shù)都占用2個存儲單元個存儲單元 (低位字節(jié)存放在低地址,高位字節(jié)存放在高地址);(低位字節(jié)存放在低地址,高位字節(jié)存放在高地址);DD偽指令用來定義雙字,其后的每個操作數(shù)都占用偽指令用來定義雙字,其后的每個操作數(shù)都占用4個存儲單元;個存儲單元;DQ偽指令用來定義四個字,其后的每個操作數(shù)都占用偽指令用來定義四個字,其后的每個操作數(shù)都占用8個存儲單元。個存儲單元。2變量的三個屬性變量的三個屬性(1)段屬性)段屬性SEG 它表示變量存放在哪一個邏輯段中。當(dāng)指令中要對這些變它表示變量存放在哪

10、一個邏輯段中。當(dāng)指令中要對這些變量進行存取操作時,事先要把它們所在的段的段基址存放到段量進行存取操作時,事先要把它們所在的段的段基址存放到段寄存器中;寄存器中;(2)偏移量屬性)偏移量屬性O(shè)FFSET 表示變量在邏輯段中離段起始點的字節(jié)距離。上述段屬性表示變量在邏輯段中離段起始點的字節(jié)距離。上述段屬性和偏移量屬性就構(gòu)成了變量的邏輯地址;和偏移量屬性就構(gòu)成了變量的邏輯地址;(3)類型屬性)類型屬性TYPE 表示變量占用存儲單元的字節(jié)數(shù)表示變量占用存儲單元的字節(jié)數(shù)(并非總字節(jié)數(shù)),(并非總字節(jié)數(shù)),它由它由類型助記符類型助記符DB、DW、DD、DQ來規(guī)定,即由數(shù)據(jù)定義偽指令來規(guī)定,即由數(shù)據(jù)定義偽指

11、令確定的。確定的。3預(yù)置初值預(yù)置初值變量定義格式中的操作數(shù)部分,實際上就是給變量預(yù)置初值,它們通常變量定義格式中的操作數(shù)部分,實際上就是給變量預(yù)置初值,它們通常有以下幾種情況:有以下幾種情況:(1)數(shù)值表達(dá)式:)數(shù)值表達(dá)式:表示內(nèi)存操作數(shù)的初始值表示內(nèi)存操作數(shù)的初始值,其值應(yīng)在其定義的類型其值應(yīng)在其定義的類型范圍內(nèi)。范圍內(nèi)。如:如:xx DB1,1 yy DW216,1(2)問號表達(dá)式:)問號表達(dá)式:不帶引號的?表示可預(yù)置任何內(nèi)容。如:不帶引號的?表示可預(yù)置任何內(nèi)容。如:cc DB ?(3)字符串表達(dá)式:)字符串表達(dá)式: 對于對于DB偽指令,為字符串中每個字符分配一個字節(jié)單元。字符串偽指令,為

12、字符串中每個字符分配一個字節(jié)單元。字符串必須是引號括起來的,不超過必須是引號括起來的,不超過255個字符。個字符。 對于對于DW偽指令,可以給兩個字符組成的字符串分配兩個字節(jié)的存?zhèn)沃噶?,可以給兩個字符組成的字符串分配兩個字節(jié)的存儲單元,儲單元,而且這兩個字符的而且這兩個字符的ASCII碼的存儲順序是前一個字符在高字節(jié),碼的存儲順序是前一個字符在高字節(jié),后一字符在低字節(jié)后一字符在低字節(jié)。每一個數(shù)據(jù)項只能是。每一個數(shù)據(jù)項只能是12個字符。相當(dāng)于定義字。個字符。相當(dāng)于定義字。 對于對于DD偽指令,僅可給兩個字符組成的字符串分配偽指令,僅可給兩個字符組成的字符串分配4個字節(jié)的單元,個字節(jié)的單元,且這兩

13、個且這兩個ASCII碼是存儲在兩個低字節(jié)(存儲順序與碼是存儲在兩個低字節(jié)(存儲順序與DW偽指令相同)中,偽指令相同)中,兩個高字節(jié)均存放兩個高字節(jié)均存放00H。相當(dāng)于定義一個雙字。相當(dāng)于定義一個雙字。(4)帶)帶DUP表達(dá)式:表達(dá)式:DUP是定義重復(fù)數(shù)據(jù)操作符,在操作數(shù)是定義重復(fù)數(shù)據(jù)操作符,在操作數(shù)部分的格式為:部分的格式為:重復(fù)次數(shù)重復(fù)次數(shù) DUP(重復(fù)的內(nèi)容)(重復(fù)的內(nèi)容)DUP可以嵌套使用可以嵌套使用舉例:jia DB 2 DUP (3,0FH,a) jin DB 3 DUP (2 DUP (?),0E5H),800001111000000110110000100001111000000

14、1101100001jiajin11100101000010001110010111100101其中jia,jin是變量名 4變量的使用變量的使用(1)在指令語句中,如果要對某存儲單元進行存取操作,就)在指令語句中,如果要對某存儲單元進行存取操作,就可直接引用它的變量名;若操作數(shù)采用直接尋址,變量的偏可直接引用它的變量名;若操作數(shù)采用直接尋址,變量的偏移量作為操作數(shù)偏移量;而操作數(shù)若采用了寄存器相對尋址移量作為操作數(shù)偏移量;而操作數(shù)若采用了寄存器相對尋址或相對基址變址尋址,此時變量的偏移量就作為操作數(shù)的位或相對基址變址尋址,此時變量的偏移量就作為操作數(shù)的位移量。移量。(2)在偽指令語句中:定義

15、變量時引用了另一個變量,則這)在偽指令語句中:定義變量時引用了另一個變量,則這個變量的內(nèi)容均是被引用變量的邏輯地址。如用個變量的內(nèi)容均是被引用變量的邏輯地址。如用DW,則僅有,則僅有偏移量,如用偏移量,如用DD則前兩個字節(jié)存放偏移量,后兩個字節(jié)存放則前兩個字節(jié)存放偏移量,后兩個字節(jié)存放段地址段地址;注意不能用注意不能用DB引用變量名。引用變量名。 4.2.3 標(biāo)號(標(biāo)號(Label) 1定義:定義:標(biāo)號是一條指令目標(biāo)代碼的符號地址,它常作為轉(zhuǎn)標(biāo)號是一條指令目標(biāo)代碼的符號地址,它常作為轉(zhuǎn)移指令或調(diào)用指令的操作數(shù)。移指令或調(diào)用指令的操作數(shù)。 2標(biāo)號的三個屬性:標(biāo)號的三個屬性: (1)段屬性)段屬性

16、:表示這條指令的目標(biāo)代碼在哪個邏表示這條指令的目標(biāo)代碼在哪個邏輯段中;輯段中; (2)偏移量屬性)偏移量屬性:表示這條指令目標(biāo)代碼的首字表示這條指令目標(biāo)代碼的首字節(jié)在段內(nèi)離段起始點的字節(jié)距離;節(jié)在段內(nèi)離段起始點的字節(jié)距離; (3)距離屬性(或類型屬性)距離屬性(或類型屬性) 4.3.1 算術(shù)運算符算術(shù)運算符 算術(shù)運算符有(加)、(減)、(乘)、算術(shù)運算符有(加)、(減)、(乘)、/(整除)、(整除)、MOD(求余)。(求余)。 4.3.2 邏輯運算符邏輯運算符 邏輯運算符有邏輯運算符有4個:個:AND(與)、(與)、OR(或)、(或)、NOT(非)和(非)和XOR(異或),邏輯運算是按位進行的

17、。(異或),邏輯運算是按位進行的。4.3 表達(dá)式與運算符表達(dá)式與運算符4.3.3 關(guān)系運算符關(guān)系運算符 這這6個關(guān)系運算符分別是:個關(guān)系運算符分別是:GT(大于)、(大于)、GE(大于等于)、(大于等于)、LT(小于)、(小于)、LE(小于等于)、(小于等于)、EQ(等于)、和(等于)、和NE(不等(不等于)。它們用于比較兩個表達(dá)式。若是常數(shù),按無符號數(shù)比較;于)。它們用于比較兩個表達(dá)式。若是常數(shù),按無符號數(shù)比較;若是變量則比較它們的偏移量。比較的結(jié)果為真,表示為全若是變量則比較它們的偏移量。比較的結(jié)果為真,表示為全1;結(jié)果為假,表示為全結(jié)果為假,表示為全0。 4.3.4 數(shù)值返回運算符數(shù)值返

18、回運算符 數(shù)值返回運算符有數(shù)值返回運算符有5個,分別是:個,分別是:SEG、OFFSET、TYPE、LENGTH和和SIZE。這種運算符的對象必須是存儲器操作數(shù),即。這種運算符的對象必須是存儲器操作數(shù),即變量名或標(biāo)號,通過運算后返回的是一個數(shù)值。下面分別說明各變量名或標(biāo)號,通過運算后返回的是一個數(shù)值。下面分別說明各運算符的功能。運算符的功能。1SEG格式:格式:SEG 變量名或標(biāo)號變量名或標(biāo)號 當(dāng)運算符當(dāng)運算符SEG加在一個變量名或標(biāo)號前面時,匯編程序回送加在一個變量名或標(biāo)號前面時,匯編程序回送的運算結(jié)果是這個變量或標(biāo)號所在的段的段基址;的運算結(jié)果是這個變量或標(biāo)號所在的段的段基址;2OFFSE

19、T格式:格式:OFFSET 變量名或標(biāo)號變量名或標(biāo)號 當(dāng)運算符當(dāng)運算符OFFSET加在一個變量名或標(biāo)號前面時,匯編程序回加在一個變量名或標(biāo)號前面時,匯編程序回送的運算結(jié)果是這個變量或標(biāo)號所在的段的偏移量;送的運算結(jié)果是這個變量或標(biāo)號所在的段的偏移量;3TYPE 格式:格式:TYPE 變量名或標(biāo)號變量名或標(biāo)號 如果是變量,則匯編程序?qū)⒒厮驮撟兞康囊宰止?jié)數(shù)表示的類型:如果是變量,則匯編程序?qū)⒒厮驮撟兞康囊宰止?jié)數(shù)表示的類型:DB為為1,DW為為2,DD為為4,DQ為為8。如果是標(biāo)號,則匯編程序?qū)⒒?。如果是?biāo)號,則匯編程序?qū)⒒厮痛碓摌?biāo)號類型的數(shù)值:送代表該標(biāo)號類型的數(shù)值:NEAR為為1,F(xiàn)AR為為2

20、。4LENGTH 格式:格式:LENGTH 變量名變量名 如果變量是用重復(fù)數(shù)據(jù)操作符如果變量是用重復(fù)數(shù)據(jù)操作符DUP說明的,匯編程序?qū)⒒厮屯鈱诱f明的,匯編程序?qū)⒒厮屯鈱覦UP給定的值;如果變量沒有用給定的值;如果變量沒有用DUP說明,則返回的值總是說明,則返回的值總是1。5SIZE格式:格式:SIZE 變量名變量名 運算符運算符SIZE加在變量的前面,匯編程序回送的值等于加在變量的前面,匯編程序回送的值等于LENGTH和和TYPE兩個運算符返回值的乘積。兩個運算符返回值的乘積。(實際上就是數(shù)據(jù)的存儲單元數(shù))(實際上就是數(shù)據(jù)的存儲單元數(shù))4.3.5 屬性修改運算符屬性修改運算符 這種運算符是對變

21、量、標(biāo)號或某存儲器的類型屬性進行修改指這種運算符是對變量、標(biāo)號或某存儲器的類型屬性進行修改指定,它主要有定,它主要有PTR、段跨越前綴、段跨越前綴、SHORT、HIGH和和LOW等等5種。種。1PTR 格式:類型格式:類型 PTR 地址表達(dá)式地址表達(dá)式 其中,地址表達(dá)式是指要修改類型屬性的標(biāo)號或存儲器操作數(shù)。其中,地址表達(dá)式是指要修改類型屬性的標(biāo)號或存儲器操作數(shù)。如果它是標(biāo)號,則與之對應(yīng)的類型有:如果它是標(biāo)號,則與之對應(yīng)的類型有:NEAR、FAR;如果它是存;如果它是存儲器操作數(shù),則與之對應(yīng)的類型有:儲器操作數(shù),則與之對應(yīng)的類型有:BYTE、WORD、DWORD。 2段跨越前綴段跨越前綴 它是

22、在存儲器操作數(shù)之前加上段寄存器名和冒號用于強行指定此它是在存儲器操作數(shù)之前加上段寄存器名和冒號用于強行指定此存儲器操作數(shù)相對哪個段寄存器,共有存儲器操作數(shù)相對哪個段寄存器,共有4種:種:DS:、:、CS:、:、SS:和:和ES: 3SHORT 用來修飾用來修飾JMP指令中轉(zhuǎn)向地址的屬性,指出轉(zhuǎn)向地址是在指令中轉(zhuǎn)向地址的屬性,指出轉(zhuǎn)向地址是在下一條指令地址的下一條指令地址的128127字節(jié)范圍之內(nèi)。字節(jié)范圍之內(nèi)。4HIGH/LOW格式:格式:HIGH常數(shù)或地址表達(dá)式常數(shù)或地址表達(dá)式 (表示取高字節(jié))(表示取高字節(jié)) LOW常數(shù)或地址表達(dá)式常數(shù)或地址表達(dá)式 (表示取高字節(jié))(表示取高字節(jié)) 這兩個

23、運算符這兩個運算符稱為字節(jié)分離操作符,它接收一個常數(shù)或地稱為字節(jié)分離操作符,它接收一個常數(shù)或地址表達(dá)式,址表達(dá)式,HIGH取其高位字節(jié),取其高位字節(jié),LOW取其低位字節(jié)。其中取其低位字節(jié)。其中地址表達(dá)式必須具有常量值,地址表達(dá)式必須具有常量值,HIGH/LOW運算符用于分離出運算符用于分離出段地址或偏移量的高字節(jié)段地址或偏移量的高字節(jié)/低字節(jié)。低字節(jié)。 表達(dá)式中運算符的計算順序表達(dá)式中運算符的計算順序 首先應(yīng)該計算優(yōu)先級別高的運算符;然后從左往右地對首先應(yīng)該計算優(yōu)先級別高的運算符;然后從左往右地對優(yōu)先級別相同的運算符進行計算。優(yōu)先級別相同的運算符進行計算。 表表4.1 運運算符的優(yōu)先級別關(guān)系表

24、算符的優(yōu)先級別關(guān)系表 優(yōu)先級別運算符 ,(),LENGTH,SIZE,WIDTH,MASK從 (結(jié)構(gòu)域名操作符)PTR,OFFSET,SEG,TYPE,THIS及段跨越前綴HIGH,LOW高 ,/,MOD,SHL,SHR,EQ,NE,LT,LE,GT,GE到 NOTANDOR,XOR低 SHORT4.4.1 段定義偽指令段定義偽指令格式:格式: 段名段名SEGMENT 段名段名ENDS 一個完整的匯編源程序中可以定義多個段,但同時起作用的一個完整的匯編源程序中可以定義多個段,但同時起作用的最多只有最多只有4個。每一個段都是由偽指令個。每一個段都是由偽指令SEGMENT開始,由開始,由ENDS結(jié)

25、束,結(jié)束,SEGMENT和和ENDS必須成對出現(xiàn),并且在必須成對出現(xiàn),并且在SEGMENT和和ENDS的前面都必須有同一個段名;的前面都必須有同一個段名;SEGMENT和和ENDS語句之語句之間的省略號部分,對于代碼段來說,主要是指令,也可以有偽指間的省略號部分,對于代碼段來說,主要是指令,也可以有偽指令;對于數(shù)據(jù)段、附加段和堆棧段來說,一般是存儲單元的定義、令;對于數(shù)據(jù)段、附加段和堆棧段來說,一般是存儲單元的定義、分配等偽操作。分配等偽操作。 4.4 程序的段結(jié)構(gòu)程序的段結(jié)構(gòu)4.4.2 段尋址偽指令段尋址偽指令 該偽指令用來指明所定義的段與段寄存器的關(guān)系該偽指令用來指明所定義的段與段寄存器的

26、關(guān)系其格式如下:其格式如下:ASSUME 段寄存器名:段名段寄存器名:段名,段寄存器:段名,段寄存器:段名, 其中段寄存器名為其中段寄存器名為CS、DS、ES、SS中的一個;段名則必須中的一個;段名則必須是由是由SEGMENT定義過的段名;段寄存器名和段名之間必須有定義過的段名;段寄存器名和段名之間必須有冒號冒號“:”。 ASSUME偽操作的作用是指示匯編程序指令中用到的標(biāo)號、偽操作的作用是指示匯編程序指令中用到的標(biāo)號、過程及變量所在的段。在代碼段中,可以隨時用過程及變量所在的段。在代碼段中,可以隨時用ASSUME偽指偽指令修改令修改“段寄存器名:段名段寄存器名:段名”的聯(lián)系。的聯(lián)系。4.4.

27、3 段寄存器的裝入段寄存器的裝入1DS和和ES的裝入的裝入 在程序中,引用段名就是以立即數(shù)形式獲取該段的段基址,在程序中,引用段名就是以立即數(shù)形式獲取該段的段基址,而立即數(shù)又不能直接送給段寄存器,所以一個段的段基址要經(jīng)而立即數(shù)又不能直接送給段寄存器,所以一個段的段基址要經(jīng)過通用寄存器傳送給過通用寄存器傳送給DS,ES。如:如:MOV AX, DATA MOV DS, AX 2SS的裝入的裝入裝入的辦法有兩個:裝入的辦法有兩個: (1)在段定義偽指令()在段定義偽指令(SEGMENT)的組合類型中選擇)的組合類型中選擇“STACK”參數(shù),且在段尋址偽指令(參數(shù),且在段尋址偽指令(ASSUME)中

28、,把堆棧)中,把堆棧用的這一個段指派給段寄存器用的這一個段指派給段寄存器SS。 (2)可用類似)可用類似DS,ES的裝入辦法,用幾條指令實現(xiàn)對的裝入辦法,用幾條指令實現(xiàn)對SS和和SP的裝入的裝入 。用戶定義的數(shù)據(jù)段名 3CS的裝入的裝入 用用DS、ES的裝入辦法,那么為裝入的裝入辦法,那么為裝入CS、IP的的新值需要執(zhí)行幾條指令。新值需要執(zhí)行幾條指令。 對對CS、IP的裝入通常是:按照的裝入通常是:按照END結(jié)束偽指結(jié)束偽指令指定的地址裝入令指定的地址裝入CS、IP。任何一個源程序都是。任何一個源程序都是以以END偽指令來結(jié)束。偽指令來結(jié)束。格式:格式:END 起始地址起始地址 起始地址可以是

29、一個標(biāo)號或表達(dá)式;起始地址可以是一個標(biāo)號或表達(dá)式;END偽指偽指令的作用是指示令的作用是指示源程序到此結(jié)束源程序到此結(jié)束和指定程序運行時和指定程序運行時的起始地址。的起始地址。 4.5.1 符號定義語句符號定義語句1.等值語句等值語句 就是賦值語句就是賦值語句格式:符號格式:符號EQU表達(dá)式表達(dá)式 其中其中EQU是等值偽指令,把表達(dá)式的值或符號是等值偽指令,把表達(dá)式的值或符號賦給賦給EQU左邊的符號,表達(dá)式可以是:左邊的符號,表達(dá)式可以是:(1)常量表達(dá)式,)常量表達(dá)式,(2)地址表達(dá)式,)地址表達(dá)式,(3)變量、標(biāo)號或指令助記符,)變量、標(biāo)號或指令助記符,4.5 其它常用偽指令其它常用偽指令

30、 等值語句僅在匯編源程序時,作為替代符號用,不產(chǎn)等值語句僅在匯編源程序時,作為替代符號用,不產(chǎn)生任何的目標(biāo)代碼,也不占有存儲單元。因此,等值語生任何的目標(biāo)代碼,也不占有存儲單元。因此,等值語句左邊的符號沒有段、偏移量、類型三個屬性;句左邊的符號沒有段、偏移量、類型三個屬性; 在同一源程序中,同一符號在在同一源程序中,同一符號在EQU語句未解除之前語句未解除之前不能用不能用EQU偽指令重新定義。偽指令重新定義。NUMEQU10HNUMEQU20H;第二條;第二條EQU語句因為符號重語句因為符號重定義而出現(xiàn)語法錯誤定義而出現(xiàn)語法錯誤 已經(jīng)用已經(jīng)用EQU定義的符號,若以后不再用了就可以用定義的符號,

31、若以后不再用了就可以用PURGE語句來解除。語句來解除。PURGE語句的格式如下:語句的格式如下:PURGE符號符號1,符號,符號2,符號,符號n注意事項:注意事項: 2. 等號語句等號語句格式:符號格式:符號=表達(dá)式表達(dá)式 此語句的功能與此語句的功能與EQU等值語句類似,其最大的特點是等值語句類似,其最大的特點是能對符號進行重定義。能對符號進行重定義。 4.5.2 程序開始和結(jié)束偽指令程序開始和結(jié)束偽指令1.開始偽指令開始偽指令NAME的格式:的格式:NAME module_name匯編程序?qū)⒁越o出的匯編程序?qū)⒁越o出的module_name作為模塊的名字。如果程序作為模塊的名字。如果程序中沒

32、有中沒有NAME偽指令,則可使用偽指令,則可使用TITLE偽指令,其格式:偽指令,其格式:TITLE text2.程序結(jié)束偽指令程序結(jié)束偽指令表示源程序結(jié)束的偽指令的格式:表示源程序結(jié)束的偽指令的格式:END 起始標(biāo)號起始標(biāo)號一般情況下:一般情況下: “ NAME module_name ”或或“ TITLE text ”與與END配合使用;配合使用;不使用模塊名時則用不使用模塊名時則用“END 起始標(biāo)號起始標(biāo)號”結(jié)束程序,這時只在結(jié)束程序,這時只在代碼段中第一條可執(zhí)行指令之前加一個標(biāo)號作為代碼段中第一條可執(zhí)行指令之前加一個標(biāo)號作為起始標(biāo)號起始標(biāo)號就可就可以了。以了。 1. 定位偽指令(定位偽

33、指令(ORG)定位偽指令定位偽指令ORG的格式:的格式:ORG 表達(dá)式表達(dá)式它表示把表達(dá)式的值賦給當(dāng)前位置計數(shù)器:它表示把表達(dá)式的值賦給當(dāng)前位置計數(shù)器:ORG語句后的指令或數(shù)據(jù)以表達(dá)式給定的值作起始偏移量。語句后的指令或數(shù)據(jù)以表達(dá)式給定的值作起始偏移量。2. 當(dāng)前位置計數(shù)器(當(dāng)前位置計數(shù)器($)“$”表示當(dāng)前指令的地址。表示當(dāng)前指令的地址。符號符號“$”代表當(dāng)前位代表當(dāng)前位置計數(shù)器的現(xiàn)行值。置計數(shù)器的現(xiàn)行值。4.5.3 定位偽指令(定位偽指令(ORG)和當(dāng)前位置計數(shù)器()和當(dāng)前位置計數(shù)器($) 4.5.4 過程定義偽指令過程定義偽指令 在程序設(shè)計中,通常把具有一定功能的程序段設(shè)計成一在程序設(shè)計

34、中,通常把具有一定功能的程序段設(shè)計成一個子程序。過程定義偽指令格式如下:個子程序。過程定義偽指令格式如下:過程名過程名PROC (NEAR/FAR) RET過程名過程名 ENDP 過程名就是過程調(diào)用指令過程名就是過程調(diào)用指令CALL的目標(biāo)操作數(shù)。它類同于的目標(biāo)操作數(shù)。它類同于標(biāo)號的作用,同樣具有三個屬性。當(dāng)沒有定義它的距離屬性時,標(biāo)號的作用,同樣具有三個屬性。當(dāng)沒有定義它的距離屬性時,隱含為隱含為NEAR。段屬性,偏移量屬性和距離屬性段屬性,偏移量屬性和距離屬性 1.編輯編輯 調(diào)用編輯程序調(diào)用編輯程序EDIT.EXE,WS.EXE等,用鍵盤敲入源程序,等,用鍵盤敲入源程序,退出編輯系統(tǒng)時,保存

35、編輯完成的文件,且擴展名為退出編輯系統(tǒng)時,保存編輯完成的文件,且擴展名為.ASM。2.匯編匯編 匯編就是用宏匯編程序匯編就是用宏匯編程序MASM.EXE把匯編語言源程序翻譯把匯編語言源程序翻譯(匯編)成機器語言的目標(biāo)程序。宏匯編程序主要有以下功能:(匯編)成機器語言的目標(biāo)程序。宏匯編程序主要有以下功能:檢查源程序中語法錯誤,給出錯誤信息;檢查源程序中語法錯誤,給出錯誤信息;展開宏指令;展開宏指令;產(chǎn)生目標(biāo)程序(產(chǎn)生目標(biāo)程序(.OBJ),列表文件(),列表文件(.LST)和交叉引用文件)和交叉引用文件(.CRF)。)。 假設(shè)現(xiàn)已編輯完成了源程序假設(shè)現(xiàn)已編輯完成了源程序TEST.ASM,在操作系統(tǒng)

36、狀態(tài)下,在操作系統(tǒng)狀態(tài)下,直接調(diào)用宏匯編程序直接調(diào)用宏匯編程序MASM.EXE對它進行匯編。對它進行匯編。4.6 匯編語言上機調(diào)試匯編語言上機調(diào)試4.6.1 上機步驟上機步驟接著屏幕上顯示:接著屏幕上顯示: 宏匯編程序詢問匯編產(chǎn)生的目標(biāo)程序文件的文件名是否為方括號中宏匯編程序詢問匯編產(chǎn)生的目標(biāo)程序文件的文件名是否為方括號中的默認(rèn)值(即目標(biāo)程序與源程序同名)。若是,直接按一回車鍵,否的默認(rèn)值(即目標(biāo)程序與源程序同名)。若是,直接按一回車鍵,否則需自己輸入另一文件名。然后,宏匯編程序接著依次詢問產(chǎn)生列表則需自己輸入另一文件名。然后,宏匯編程序接著依次詢問產(chǎn)生列表文件和交叉引用文件的文件名,屏幕上顯

37、示:文件和交叉引用文件的文件名,屏幕上顯示: 這兩個文件是否建立由操作人員確定:這兩個文件是否建立由操作人員確定:若要建立其中一個或兩個,若要建立其中一個或兩個,操作人員便可輸入所需建立的文件名,否則直接送入回車鍵。待完成上操作人員便可輸入所需建立的文件名,否則直接送入回車鍵。待完成上述人機對話后,宏匯編程序便對源程序進行掃描,檢查源程序中各語句述人機對話后,宏匯編程序便對源程序進行掃描,檢查源程序中各語句是否有語法錯誤,同時把各語句匯編成對應(yīng)的機器目標(biāo)代碼。是否有語法錯誤,同時把各語句匯編成對應(yīng)的機器目標(biāo)代碼。 在匯編過程中,若發(fā)現(xiàn)源程序有語法錯誤,便隨時給出出錯信息。在匯編過程中,若發(fā)現(xiàn)源

38、程序有語法錯誤,便隨時給出出錯信息。屏幕上顯示:屏幕上顯示: 如果警告錯誤和嚴(yán)重錯誤總數(shù)都等于零,那么這次源程序的匯如果警告錯誤和嚴(yán)重錯誤總數(shù)都等于零,那么這次源程序的匯編獲得通過,可以進行連接。否則,返回編輯程序,修改源程序,編獲得通過,可以進行連接。否則,返回編輯程序,修改源程序,然后再次進行匯編,直到源程序匯編正確無誤。然后再次進行匯編,直到源程序匯編正確無誤。 如果匯編時,無須產(chǎn)生列表文件和交叉引用文件,則在啟動宏如果匯編時,無須產(chǎn)生列表文件和交叉引用文件,則在啟動宏匯編程序時可用分號結(jié)尾,比如:匯編程序時可用分號結(jié)尾,比如:C:MASM TEST; 如果需要后面的列表文件和交叉引用文

39、件,且它們的文件名與如果需要后面的列表文件和交叉引用文件,且它們的文件名與源文件名相同,這時啟動宏匯編程序時,可用逗號指明,比如:源文件名相同,這時啟動宏匯編程序時,可用逗號指明,比如:C:MASM TEST,;,; 3. 連接連接 源程序經(jīng)過匯編后產(chǎn)生的目標(biāo)程序,必須經(jīng)過連接程序源程序經(jīng)過匯編后產(chǎn)生的目標(biāo)程序,必須經(jīng)過連接程序LINK.EXE連接后才能運行。連接后才能運行。 連接程序把一個或多個獨立的目標(biāo)程序模塊連接裝配成一連接程序把一個或多個獨立的目標(biāo)程序模塊連接裝配成一個可重定位的可執(zhí)行文件(擴展名為個可重定位的可執(zhí)行文件(擴展名為.EXE)。連接程序)。連接程序LINK除產(chǎn)生一個可執(zhí)行

40、文件外,還可產(chǎn)生一個內(nèi)存映象文件(擴展除產(chǎn)生一個可執(zhí)行文件外,還可產(chǎn)生一個內(nèi)存映象文件(擴展名為名為.MAP)。)。LINK連接的一定是擴展名為連接的一定是擴展名為.OBJ的目標(biāo)程序。的目標(biāo)程序。在操作系統(tǒng)狀態(tài)下,直接啟動連接程序在操作系統(tǒng)狀態(tài)下,直接啟動連接程序LINK.EXE。例如例如:C:LINK TEST 接著屏幕上顯示:接著屏幕上顯示: 連接程序詢問連接時產(chǎn)生的可執(zhí)行文件名是否用方括號中的連接程序詢問連接時產(chǎn)生的可執(zhí)行文件名是否用方括號中的默認(rèn)值(即可執(zhí)行文件與目標(biāo)程序文件同名)。若是,可直接按默認(rèn)值(即可執(zhí)行文件與目標(biāo)程序文件同名)。若是,可直接按一回車鍵,否則需要重新輸入一文件名

41、。接著依次詢問,屏幕上一回車鍵,否則需要重新輸入一文件名。接著依次詢問,屏幕上顯示:顯示: 其中其中MAP文件(文件(MAP文件列出各段的起點,終點及長度。)是否文件列出各段的起點,終點及長度。)是否建立,由操作人員確定。若要,則輸入一文件名,否則直接送一回車建立,由操作人員確定。若要,則輸入一文件名,否則直接送一回車鍵。后一個是詢問在連接時是否要用庫文件。對于來自宏匯編語言程鍵。后一個是詢問在連接時是否要用庫文件。對于來自宏匯編語言程序的目標(biāo)程序文件,通常是直接送一回車鍵。序的目標(biāo)程序文件,通常是直接送一回車鍵。 與啟動宏匯編程序一樣,可以在啟動連接程序時,用分號結(jié)束后與啟動宏匯編程序一樣,

42、可以在啟動連接程序時,用分號結(jié)束后續(xù)詢問。如續(xù)詢問。如:C:LINK TEST; 若要產(chǎn)生若要產(chǎn)生MAP文件,且使用目標(biāo)程序文件名,可用一逗號表示。如文件,且使用目標(biāo)程序文件名,可用一逗號表示。如:C:LINK TEST,;,; 若需要連接多模塊的目標(biāo)程序時,可用若需要連接多模塊的目標(biāo)程序時,可用“+”把它們連接起把它們連接起來。例如連接三個目標(biāo)程序文件來。例如連接三個目標(biāo)程序文件P1.OBJ、P2.OBJ、P3.OBJ,其,其操作如下:操作如下:C:LINK P1+P2+P3; 這樣產(chǎn)生的一個可執(zhí)行文件是約定取用第一個目標(biāo)程序文這樣產(chǎn)生的一個可執(zhí)行文件是約定取用第一個目標(biāo)程序文件名,當(dāng)然操作

43、人員也可重新用另外的文件名。件名,當(dāng)然操作人員也可重新用另外的文件名。4. 調(diào)試運行調(diào)試運行 在建立好可執(zhí)行文件后,就可以直接從在建立好可執(zhí)行文件后,就可以直接從DOS執(zhí)行程序,如執(zhí)行程序,如下所示:下所示:C:TEST.EXE (即輸入文件名,擴展名(即輸入文件名,擴展名“.EXE ”可省略)可省略)C: 程序運行結(jié)束后返回程序運行結(jié)束后返回DOS。如果用戶程序已直接把結(jié)果在。如果用戶程序已直接把結(jié)果在終端上顯示出來,那么程序已經(jīng)運行結(jié)束,結(jié)果也已經(jīng)得到了。終端上顯示出來,那么程序已經(jīng)運行結(jié)束,結(jié)果也已經(jīng)得到了。 4.6.2 DEBUG主要命令主要命令 DEBUG是為匯編語言設(shè)計的一種高級工

44、具,它通過單是為匯編語言設(shè)計的一種高級工具,它通過單步、設(shè)置斷點等方式為匯編語言程序員提供了非常有效的調(diào)步、設(shè)置斷點等方式為匯編語言程序員提供了非常有效的調(diào)試手段。試手段。1. DEBUG程序的調(diào)用程序的調(diào)用在在DOS的提示符下,可鍵入命令:的提示符下,可鍵入命令:C:DEBUG D:PATHFILENAME.EXTPARM1PARM2 其中,文件名是被調(diào)試文件的名字。如用戶鍵入文件,則其中,文件名是被調(diào)試文件的名字。如用戶鍵入文件,則DEBUG將指定的文件裝入存儲器中,用戶可對其進行調(diào)試。將指定的文件裝入存儲器中,用戶可對其進行調(diào)試。如果未鍵入文件名,則用戶可以用當(dāng)前存儲器的內(nèi)容工作,如果未

45、鍵入文件名,則用戶可以用當(dāng)前存儲器的內(nèi)容工作,或者用或者用DEBUG命令命令N和和L把需要的文件裝入存儲器后再進行把需要的文件裝入存儲器后再進行調(diào)試。命令中的調(diào)試。命令中的D指定驅(qū)動器,指定驅(qū)動器,PATH為路徑,為路徑,PARM1和和PARM2則為運行被調(diào)試文件時所需要的命令參數(shù)。則為運行被調(diào)試文件時所需要的命令參數(shù)。2. DEBUG的主要命令的主要命令(1)顯示存儲單元的命令)顯示存儲單元的命令D(DUMP),格式為:格式為:_Daddress或或_Drange例如,例如,D命令的使用情況命令的使用情況如下如下:(2)修改存儲單元內(nèi)容的命令有兩種。)修改存儲單元內(nèi)容的命令有兩種。輸入命令輸

46、入命令E(ENTER),有兩種格式如下:,有兩種格式如下:第一種格式可以用給定的內(nèi)容表來替代指定范圍的存儲單元第一種格式可以用給定的內(nèi)容表來替代指定范圍的存儲單元內(nèi)容。命令格式為:內(nèi)容。命令格式為:-E address list例如,例如,-E DS:100 F3XYZ8D第二種格式則是采用逐個單元相繼修改的方法。命令格式為:第二種格式則是采用逐個單元相繼修改的方法。命令格式為:-E address(3)檢查和修改寄存器內(nèi)容的命令)檢查和修改寄存器內(nèi)容的命令R(register),它有它有三種格式三種格式如下:如下:顯示顯示CPU內(nèi)所有寄存器內(nèi)容和標(biāo)志位狀態(tài),其格式為:內(nèi)所有寄存器內(nèi)容和標(biāo)志位狀態(tài),其格式為:-R顯示和修改某個寄存器內(nèi)容,其格式為:顯示和修改某個寄存器內(nèi)容,其格式為:-R register name顯示和修改標(biāo)志位狀態(tài),命令格式為:顯示和修改標(biāo)志位狀態(tài),命令格式為:-RF(4)運行命令)運行命令G,其格式為:其格式為:-G=address1address2address3 其中,地

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論