MASM匯編語(yǔ)言基礎(chǔ).ppt_第1頁(yè)
MASM匯編語(yǔ)言基礎(chǔ).ppt_第2頁(yè)
MASM匯編語(yǔ)言基礎(chǔ).ppt_第3頁(yè)
MASM匯編語(yǔ)言基礎(chǔ).ppt_第4頁(yè)
MASM匯編語(yǔ)言基礎(chǔ).ppt_第5頁(yè)
已閱讀5頁(yè),還剩49頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第4章MASM匯編語(yǔ)言基礎(chǔ),4.1匯編語(yǔ)言語(yǔ)句種類(lèi)及其格式4.2匯編語(yǔ)言數(shù)據(jù)4.3表達(dá)式與運(yùn)算符4.4程序的段結(jié)構(gòu)4.5其他常用偽指令4.6匯編語(yǔ)言上機(jī)調(diào)試,Intel8086/8088系列微機(jī)的匯編程序MASM,是美國(guó)Microsoft公司開(kāi)發(fā)較早的宏匯編程序,它不僅具有ASM的全部功能(支持基本匯編語(yǔ)言),而且增加了指令、結(jié)構(gòu)、記錄等高級(jí)宏匯編功能。語(yǔ)句(Statement)是匯編語(yǔ)言源程序的基本組成單位。一個(gè)匯編語(yǔ)言源程序有三種基本語(yǔ)句:指令語(yǔ)句、偽指令語(yǔ)句、宏指令語(yǔ)句。,第4章MASM匯編語(yǔ)言基礎(chǔ),4.1匯編語(yǔ)言語(yǔ)句種類(lèi)及其格式,每一條指令語(yǔ)句在匯編時(shí)都要產(chǎn)生一個(gè)可供機(jī)器執(zhí)行的目標(biāo)代碼,這種語(yǔ)句也被稱(chēng)為可執(zhí)行語(yǔ)句。指令語(yǔ)句的格式如圖4.1所示:圖4.1指令語(yǔ)句的格式,4.1匯編語(yǔ)言語(yǔ)句種類(lèi)及其格式(續(xù)),4.1.1指令語(yǔ)句,一條指令語(yǔ)句有如下4個(gè)字段:1標(biāo)號(hào)字段這是一個(gè)可選字段。標(biāo)號(hào)必須以“:”作為結(jié)束符。一個(gè)標(biāo)號(hào)是一條指令的符號(hào)地址,它代表該指令的第一個(gè)字節(jié)的地址。2指令助記符字段這是一條指令中不可缺少的主要成分。它表示這條語(yǔ)句要求CPU完成什么操作。,4.1.1指令語(yǔ)句(續(xù)),3操作數(shù)字段按照指令助記符字段要求,指令語(yǔ)句可以有一個(gè)操作數(shù)、兩個(gè)操作數(shù)或無(wú)操作數(shù)。4注釋字段這是一個(gè)可選字段,注釋字段必須以分號(hào)“;”為開(kāi)始,它可以方便程序設(shè)計(jì)人員對(duì)程序或指令加以注釋?zhuān)岣叱绦虻牡目勺x性。,4.1.1指令語(yǔ)句(續(xù)),4.1.2偽指令語(yǔ)句,與指令語(yǔ)句不同的是,偽指令本身不產(chǎn)生與之對(duì)應(yīng)的目標(biāo)代碼。它是在匯編程序?qū)R編語(yǔ)言源程序匯編期間,由匯編程序處理的操作,它們可以完成如數(shù)據(jù)定義、分配存儲(chǔ)區(qū)、指示程序結(jié)束等功能。,4.1匯編語(yǔ)言語(yǔ)句種類(lèi)及其格式(續(xù)),圖4.2偽指令語(yǔ)句的格式,一條偽指令語(yǔ)句也有如下4個(gè)字段:1符號(hào)名字段這是一個(gè)可選字段。符號(hào)名后面不得用冒號(hào)“:”,這是它與指令語(yǔ)句突出的一個(gè)區(qū)別。,4.1.2偽指令語(yǔ)句(續(xù)),4.1.2偽指令語(yǔ)句(續(xù)),2偽指令字段這是偽指令語(yǔ)句中不可省略的主要成分。它們是偽指令語(yǔ)句要求匯編程序完成的具體操作命令。,3操作數(shù)字段本字段是否需要,需要幾個(gè),需要什么樣的操作數(shù)等都由偽指令字段中偽指令來(lái)確定。,4注釋字段這是一個(gè)任選字段,它必須以分號(hào)為開(kāi)始,它的作用與指令語(yǔ)句的注釋字段相同。,4.2.1常量凡是出現(xiàn)在8086源程序中的固定值(即在匯編期間,它的值已經(jīng)能夠完全確定,在程序運(yùn)行期間,它的值也不會(huì)發(fā)生任何的變化),就稱(chēng)為常量。,4.2匯編語(yǔ)言數(shù)據(jù),通常匯編語(yǔ)言能識(shí)別的數(shù)據(jù)有:常量、變量和標(biāo)號(hào)。,1十進(jìn)制常量:09數(shù)字序列,可以用字母D結(jié)尾,也可沒(méi)有結(jié)尾字母;2二進(jìn)制常量:以字母B結(jié)尾的0和1組成的數(shù)字序列;3八進(jìn)制常量:以字母O或Q結(jié)尾的07數(shù)字序列;4十六進(jìn)制常量:以字母H結(jié)尾的09和AF(或af)的數(shù)字字母序列。5字符串常量:用單引號(hào)或雙引號(hào)括起來(lái)的一個(gè)或多個(gè)字符,這些字符用它的ASCII碼值存儲(chǔ)在內(nèi)存中。,4.2.1常量(續(xù)),變量就是用來(lái)表示程序中所用的內(nèi)存操作數(shù)。,1定義格式:變量名類(lèi)型助記符操作數(shù),操作數(shù),其中變量名字段是可有可無(wú)的,它用于指示內(nèi)存操作數(shù)的地址(符號(hào)地址);操作數(shù)字段用于指示內(nèi)存操作數(shù),匯編程序?qū)⒍x的內(nèi)存操作數(shù),按其類(lèi)型分配內(nèi)存,4.2.2變量,DQ偽指令用來(lái)定義四個(gè)字,其后的每個(gè)操作數(shù)都占有四個(gè)字;,4.2.2變量(續(xù)),常用的有以下幾種:,DB偽指令用來(lái)定義字節(jié),其后的每個(gè)操作數(shù)都占有一個(gè)字節(jié);,DW偽指令用來(lái)定義字,其后的每個(gè)操作數(shù)都占有一個(gè)字(低位字節(jié)存放在低地址,高位字節(jié)存放在高地址);,DD偽指令用來(lái)定義雙字,其后的每個(gè)操作數(shù)都占有兩個(gè)字;,(1)段屬性SEG它表示變量存放在哪一個(gè)邏輯段中。(2)偏移量屬性O(shè)FFSET表示變量在邏輯段中離段起始點(diǎn)的字節(jié)距離。(3)類(lèi)型屬性TYPE表示變量占用存儲(chǔ)單元的字節(jié)數(shù),它由類(lèi)型助記符DB、DW、DD、DQ來(lái)規(guī)定。,4.2.2變量(續(xù)),2變量的三個(gè)屬性,它們通常有以下幾種情況:(1)數(shù)值表達(dá)式:表示內(nèi)存操作數(shù)的初始值,其值應(yīng)在其定義的類(lèi)型范圍內(nèi)。如:xxDB1,1yyDW216,1(2)表達(dá)式:不帶引號(hào)的?表示可預(yù)置任何內(nèi)容。,3預(yù)置初值,4.2.2變量(續(xù)),對(duì)于DB偽指令,為字符串中每個(gè)字符分配一個(gè)字節(jié)單元。字符串必須是引號(hào)括起來(lái)的不超過(guò)255個(gè)字符。對(duì)于DW偽指令,可以給兩個(gè)字符組成的字符串分配兩個(gè)字節(jié)的存儲(chǔ)單元,而且這兩個(gè)字符的ASCII碼的存儲(chǔ)順序是前一個(gè)字符在高字節(jié),后一字符在低字節(jié)。每一個(gè)數(shù)據(jù)項(xiàng)只能是12個(gè)字符。,(3)字符串表達(dá)式,3預(yù)置初值(續(xù)),對(duì)于DD偽指令,僅可給兩個(gè)字符組成的字符串分配4個(gè)字節(jié)的單元,且這兩個(gè)ASCII碼是存儲(chǔ)在兩個(gè)低字節(jié)(存儲(chǔ)順序與DW偽指令相同)中,兩個(gè)高字節(jié)均存放00H。,(4)帶DUP表達(dá)式:DUP是定義重復(fù)數(shù)據(jù)操作符,在操作數(shù)部分的格式為:重復(fù)次數(shù)DUP(重復(fù)的內(nèi)容),(3)字符串表達(dá)式(續(xù)),3預(yù)置初值(續(xù)),(1)在指令語(yǔ)句中,如果要對(duì)某存儲(chǔ)單元進(jìn)行存取操作,就可直接引用它的變量名。(2)在偽指令語(yǔ)句中:定義變量時(shí)引用了另一個(gè)變量,則這個(gè)變量的內(nèi)容均是被引用變量的邏輯地址。如用DW,則僅有偏移量,如用DD則前兩個(gè)字節(jié)存放偏移量,后兩個(gè)字節(jié)存放段地址;注意不能用DB引用變量名。,4.2.2變量(續(xù)),4變量的使用,2標(biāo)號(hào)的三個(gè)屬性:(1)段屬性:表示這條指令的目標(biāo)代碼在哪個(gè)邏輯段中;(2)偏移量屬性:表示這條指令目標(biāo)代碼的首字節(jié)在段內(nèi)離段起始點(diǎn)的字節(jié)距離;(3)距離屬性(或類(lèi)型屬性),4.2.3標(biāo)號(hào)(Label),1定義:標(biāo)號(hào)是一條指令目標(biāo)代碼的符號(hào)地址,它常作為轉(zhuǎn)移指令或調(diào)用指令的操作數(shù)。,4.3.1算術(shù)運(yùn)算符算術(shù)運(yùn)算符有(加)、(減)、(乘)、/(整除)、MOD(求余),參加運(yùn)算的數(shù)和運(yùn)算結(jié)果均是整數(shù)。,4.3.2邏輯運(yùn)算符邏輯運(yùn)算符有4個(gè):AND(與)、OR(或)、NOT(非)和XOR(異或),參加運(yùn)算的數(shù)和運(yùn)算的結(jié)果均是整數(shù),邏輯運(yùn)算是按位進(jìn)行的。,4.3表達(dá)式與運(yùn)算符,這6個(gè)關(guān)系運(yùn)算符分別是:GT(大于)、GE(大于等于)、LT(小于)、LE(小于等于)、EQ(等于)、和NE(不等于)。它們用于比較兩個(gè)表達(dá)式,表達(dá)式一定是常數(shù)或同段內(nèi)的變量。若是常數(shù),按無(wú)符號(hào)數(shù)比較;若是變量則比較它們的偏移量。比較的結(jié)果為以真,表示為全1;結(jié)果為假,表示為全0。,4.3表達(dá)式與運(yùn)算符(續(xù)),4.3.3關(guān)系運(yùn)算符,1SEG格式:SEG變量名或標(biāo)號(hào)當(dāng)運(yùn)算符SEG加在一個(gè)變量名或標(biāo)號(hào)前面時(shí),匯編程序回送的運(yùn)算結(jié)果是這個(gè)變量或標(biāo)號(hào)所在的段的段基址;,4.3表達(dá)式與運(yùn)算符(續(xù)),4.3.4數(shù)值返回運(yùn)算符,數(shù)值返回運(yùn)算符有5個(gè),分別是:SEG、OFFSET、TYPE、LENGTH和SIZE。這種運(yùn)算符的對(duì)象必須是存儲(chǔ)器操作數(shù),即變量名或標(biāo)號(hào),通過(guò)運(yùn)算后返回的是一個(gè)數(shù)值。,3TYPE格式:TYPE變量名或標(biāo)號(hào)如果是變量,則匯編程序?qū)⒒厮驮撟兞康囊宰止?jié)數(shù)表示的類(lèi)型:DB為1,DW為2,DD為4,DQ為8。如果是標(biāo)號(hào),則匯編程序?qū)⒒厮痛碓摌?biāo)號(hào)類(lèi)型的數(shù)值:NEAR為1,F(xiàn)AR為2。,4.3.4數(shù)值返回運(yùn)算符(續(xù)),2OFFSET格式:OFFSET變量名或標(biāo)號(hào)當(dāng)運(yùn)算符OFFSET加在一個(gè)變量名或標(biāo)號(hào)前面時(shí),匯編程序回送的運(yùn)算結(jié)果是這個(gè)變量或標(biāo)號(hào)所在的段的偏移量;,5SIZE格式:SIZE變量名運(yùn)算符SIZE加在變量的前面,匯編程序回送的值等于LENGTH和TYPE兩個(gè)運(yùn)算符返回值的乘積。,4.3.4數(shù)值返回運(yùn)算符(續(xù)),4LENGTH格式:LENGTH變量名如果變量是用重復(fù)數(shù)據(jù)操作符DUP說(shuō)明的,匯編程序?qū)⒒厮屯鈱覦UP給定的值;如果變量沒(méi)有用DUP說(shuō)明,則返回的值總是1。,這種運(yùn)算符是對(duì)變量、標(biāo)號(hào)或某存儲(chǔ)器的類(lèi)型屬性進(jìn)行修改指定,它主要有PTR、段跨越前綴、SHORT、HIGH和LOW等5種。,4.3.5屬性修改運(yùn)算符,1PTR格式:類(lèi)型PTR地址表達(dá)式其中,地址表達(dá)式是指要修改類(lèi)型屬性的標(biāo)號(hào)或存儲(chǔ)器操作數(shù)。如果它是標(biāo)號(hào),則與之對(duì)應(yīng)的類(lèi)型有:NEAR、FAR;如果它是存儲(chǔ)器操作數(shù),則與之對(duì)應(yīng)的類(lèi)型有:BYTE、WORD、DWORD。,2段跨越前綴它是在存儲(chǔ)器操作數(shù)之前加上段寄存器名和冒號(hào)用于強(qiáng)行指定此存儲(chǔ)器操作數(shù)相對(duì)哪個(gè)段寄存器,共有4種:DS:、CS:、SS:和ES:,4.3.5屬性修改運(yùn)算符(續(xù)),3SHORT用來(lái)修飾JMP指令中轉(zhuǎn)向地址的屬性,指出轉(zhuǎn)向地址是在下一條指令地址的128127字節(jié)范圍之內(nèi)。,4HIGH/LOW格式:HIGH常數(shù)或地址表達(dá)式LOW常數(shù)或地址表達(dá)式這兩個(gè)運(yùn)算符稱(chēng)為字節(jié)分離操作符,它接收一個(gè)常數(shù)或地址表達(dá)式,HIGH取其高位字節(jié),LOW取其低位字節(jié)。其中地址表達(dá)式必須具有常量值,HIGH/LOW運(yùn)算符用于分離出段地址或偏移量的高字節(jié)/低字節(jié)。,4.3.5屬性修改運(yùn)算符(續(xù)),由高到低,從左往右地對(duì)優(yōu)先級(jí)別相同的運(yùn)算符進(jìn)行計(jì)算。表4.1算符的優(yōu)先級(jí)別關(guān)系表,4.3表達(dá)式與運(yùn)算符(續(xù)),格式:段名SEGMENT段名ENDS一個(gè)完整的匯編源程序中可以定義多個(gè)段,但同時(shí)起作用的最多只有4個(gè)。每一個(gè)段都是由偽指令SEGMENT開(kāi)始,由ENDS結(jié)束,SEGMENT和ENDS必須成對(duì)出現(xiàn),并且在SEGMENT和ENDS的前面都必須有同一個(gè)段名;SEGMENT和ENDS語(yǔ)句之間可以的省略號(hào)部分,對(duì)于代碼段來(lái)說(shuō),主要是指令,也可以有偽指令;對(duì)于數(shù)據(jù)段、附加段和堆棧段來(lái)說(shuō),一般是存儲(chǔ)單元的定義、分配等偽操作。,4.4程序的段結(jié)構(gòu),4.4.1段定義偽指令,4.4.2段尋址偽指令定義段與段寄存器的關(guān)系,這可用ASSUME這個(gè)段尋址偽指令來(lái)實(shí)現(xiàn),其格式如下:ASSUME段寄存器名:段名,段寄存器:段名,其中段寄存器名為CS、DS、ES、SS中的一個(gè);段名則必須是由SEGMENT定義過(guò)的段名;段寄存器名和段名之間必須有冒號(hào)“:”。ASSUME偽操作的作用指示匯編程序指令中用到的標(biāo)號(hào)、過(guò)程及變量所在的段。在代碼段中,可以隨時(shí)用ASSUME偽指令修改“段寄存器名:段名”的聯(lián)系。,4.4程序的段結(jié)構(gòu)(續(xù)),2SS的裝入裝入的辦法有兩個(gè):(1)在段定義偽指令的組合類(lèi)型中選擇“STACK”參數(shù),且在段尋址偽指令(ASSUME)中,把堆棧用的這一個(gè)段指派給段寄存器SS。(2)可用類(lèi)似DS,ES的裝入辦法。,4.4.3段寄存器的裝入,4.4程序的段結(jié)構(gòu)(續(xù)),1DS和ES的裝入在程序中,引用段名就是以立即數(shù)形式獲取該段的段基址,所以一個(gè)段的段基址要經(jīng)過(guò)通用寄存器傳送給DS,ES。,用DS、ES的裝入的辦法,那么為裝入CS、IP的新值需要執(zhí)行幾條指令。對(duì)CS、IP的裝入通常是:按照END結(jié)束偽指令指定的地址裝入CS、IP。任何一個(gè)源程序都是以END偽指令來(lái)結(jié)束。格式:END起始地址起始地址可以是一個(gè)標(biāo)號(hào)或表達(dá)式;END偽指令的作用是指示源程序到此結(jié)束和指定程序運(yùn)行時(shí)的起始地址。,4.4.3段寄存器的裝入(續(xù)),3CS的裝入,1.等值語(yǔ)句格式:符號(hào)EQU表達(dá)式其中EQU是等值偽指令,把表達(dá)式的值或符號(hào)賦給EQU左邊的符號(hào),表達(dá)式可以是:常量表達(dá)式,地址表達(dá)式,變量、標(biāo)號(hào)或指令助記符,,4.5其它常用偽指令,4.5.1符號(hào)定義語(yǔ)句,等值語(yǔ)句僅在匯編源程序時(shí),作為替代符號(hào)用,不產(chǎn)生任何的目標(biāo)代碼,也不占有存儲(chǔ)單元。在同一源程序中,同一符號(hào)在EQU語(yǔ)句未解除之前不能用EQU偽指令重新定義。已經(jīng)用EQU定義的符號(hào),若以后不再用了就可以用PURGE語(yǔ)句來(lái)解除。PURGE語(yǔ)句的格式如下:PURGE符號(hào)1,符號(hào)2,符號(hào)n,注意事項(xiàng):,4.5.1符號(hào)定義語(yǔ)句(續(xù)),2、等號(hào)語(yǔ)句格式:符號(hào)=表達(dá)式此語(yǔ)句的功能與EQU等值語(yǔ)句類(lèi)似,其最大的特點(diǎn)是能對(duì)符號(hào)進(jìn)行重定義。,4.5其它常用偽指令(續(xù)),4.5.2程序開(kāi)始和結(jié)束偽指令1.開(kāi)始偽指令NAME的格式:NAMEmodule_name匯編程序?qū)⒁越o出的module_name作為模塊的名字。如果程序中沒(méi)有NAME偽指令,則可使用TITLE偽指令,其格式:TITLEtext,2.程序結(jié)束偽指令表示源程序結(jié)束的偽指令的格式:END起始標(biāo)號(hào),4.5.2程序開(kāi)始和結(jié)束偽指令(續(xù)),4.5.3定位偽指令(ORG)和當(dāng)前位置計(jì)數(shù)器($)符號(hào)“$”代表當(dāng)前位置計(jì)數(shù)器的現(xiàn)行值。定位偽指令的ORG的格式:ORG表達(dá)式它表示把表達(dá)式的值賦給當(dāng)前位置計(jì)數(shù)器:ORG語(yǔ)句后的指令或數(shù)據(jù)以表達(dá)式給定的值作起始偏移量。,在程序設(shè)計(jì)中,通常把具有一定功能的程序段設(shè)計(jì)成一個(gè)子程序。過(guò)程定義偽指令格式如下:過(guò)程名PROC(NEAR/FAR)RET過(guò)程名ENDP,4.5.4過(guò)程定義偽指令,4.5其它常用偽指令(續(xù)),過(guò)程名不能省,且過(guò)程的開(kāi)始PROC和結(jié)束ENDP應(yīng)使用同一個(gè)過(guò)程名;它就是過(guò)程調(diào)用指令CALL的目標(biāo)操作數(shù)。它類(lèi)同于標(biāo)號(hào)的的作用,同樣具有三個(gè)屬性。當(dāng)沒(méi)有定義它的距離屬性,隱含為NEAR。任何一個(gè)過(guò)程,一定含有返回指令RET,它可以在過(guò)程中任何位置,不一定非要放在最后。若一個(gè)過(guò)程有多個(gè)出口,它可能有多個(gè)返回指令。但一個(gè)過(guò)程執(zhí)行的最后一條指令必定是RET。,4.5.4過(guò)程定義偽指令(續(xù)),4.6.1上機(jī)步驟程序設(shè)計(jì)人員還需要對(duì)已編寫(xiě)好的程序進(jìn)行調(diào)試和測(cè)試,使它能正確運(yùn)行。,4.6匯編語(yǔ)言上機(jī)調(diào)試,2.匯編匯編就是用宏匯編程序MASM.EXE把匯編語(yǔ)言源程序翻譯(匯編)成機(jī)器語(yǔ)言的目標(biāo)程序。宏匯編程序主要有以下功能:檢查源程序中語(yǔ)法錯(cuò)誤,給出錯(cuò)誤信息;展開(kāi)宏指令;生目標(biāo)程序(.OBJ),列表文件(.LST)和交叉引用文件(.CRF)。,4.6匯編語(yǔ)言上機(jī)調(diào)試(續(xù)),1.編輯調(diào)用編輯程序EDIT.EXE,WS.EXE等,用鍵盤(pán)敲入源程序,退出編輯系統(tǒng)時(shí),保存編輯完成的文件,且擴(kuò)展名為.ASM。,接著屏幕上顯示:宏匯編程序詢(xún)問(wèn)匯編產(chǎn)生的目標(biāo)程序文件(目標(biāo)程序文件是一個(gè)純二進(jìn)制代碼文件,不能直接在屏幕上顯示觀察)的文件名是否為方括號(hào)中的默認(rèn)值(即目標(biāo)程序與源程序同名)。若是,直接按一回車(chē)鍵,否則需自己輸入另一文件名。在回答完這一詢(xún)問(wèn)后,宏匯編程序接著依次詢(xún)問(wèn)產(chǎn)生列表文件(列表文件.LST是一個(gè)很有用的文件,文件中包含了源程序中各語(yǔ)句及其對(duì)應(yīng)的目標(biāo)代碼。給出了源程序中各語(yǔ)句所屬段內(nèi)的偏移量,并且把源程序中所用的標(biāo)號(hào)、變量和符號(hào),列出它們的名字、類(lèi)型和值,便于查閱)和交叉引用文件(交叉引用文件中給出了源程序中定義的符號(hào)如標(biāo)號(hào)、變量等以及程序中引用這些符號(hào)的情況,且是按字母順序排列的。若要查看這個(gè)符號(hào)表,必須使用CREF軟件,它根據(jù).CRF文件建立一個(gè)擴(kuò)展名為.REF的文件。然后再顯示.REF文件的內(nèi)容就可以看到這個(gè)符號(hào)表)的文件名,屏幕上顯示:,4.6匯編語(yǔ)言上機(jī)調(diào)試(續(xù)),這兩個(gè)文件是否建立由操作人員確定:若要建立其中一個(gè)或兩個(gè),操作人員便可輸入所需建立的文件名,否則直接送入回車(chē)鍵。待完成上述人機(jī)對(duì)話后,宏匯編程序便對(duì)源程序進(jìn)行掃描,檢查源程序中各語(yǔ)句是否有語(yǔ)法錯(cuò)誤,同時(shí)把各語(yǔ)句匯編成對(duì)應(yīng)的機(jī)器目標(biāo)代碼。在匯編過(guò)程中,若發(fā)現(xiàn)源程序有語(yǔ)法錯(cuò)誤,便隨時(shí)給出出錯(cuò)信息。屏幕上顯示:,4.6匯編語(yǔ)言上機(jī)調(diào)試(續(xù)),如果警告錯(cuò)誤和嚴(yán)重錯(cuò)誤總數(shù)都等于零,那么這次源程序的匯編獲得通過(guò),可以進(jìn)行連接。否則,返回編輯程序,修改源程序,然后再次進(jìn)行匯編,直到源程序匯編正確無(wú)誤。如果匯編時(shí),無(wú)須產(chǎn)生列表文件和交叉引用文件,則在啟動(dòng)宏匯編程序時(shí)可用分號(hào)結(jié)尾,比如:C:MASMTEST;如果需要后面的列表文件和交叉引用文件,且它們的文件名與源文件名相同,這時(shí)啟動(dòng)宏匯編程序時(shí),可用逗號(hào)指明,比如:C:MASMTEST,;,4.6匯編語(yǔ)言上機(jī)調(diào)試(續(xù)),3.連接源程序經(jīng)過(guò)匯編后產(chǎn)生的目標(biāo)程序,必須經(jīng)過(guò)連接程序LINK.EXE連接后才能運(yùn)行。,連接程序把一個(gè)或多個(gè)獨(dú)立的目標(biāo)程序模塊連接裝配成一個(gè)可重定位的可執(zhí)行文件(擴(kuò)展名為.EXE)。連接程序LINK除產(chǎn)生一個(gè)可執(zhí)行文件外,還可產(chǎn)生一個(gè)內(nèi)存映象文件(擴(kuò)展名為.MAP)。LINK連接的一定是擴(kuò)展名為.OBJ的目標(biāo)程序。在操作系統(tǒng)狀態(tài)下,直接啟動(dòng)連接程序LINK.EXE。例如:C:LINKTEST接著屏幕上顯示:,4.6匯編語(yǔ)言上機(jī)調(diào)試(續(xù)),連接程序詢(xún)問(wèn)連接時(shí)產(chǎn)生的可執(zhí)行文件名是否用方括號(hào)中的默認(rèn)值(即可執(zhí)行文件與目標(biāo)程序文件同名)。若是,可直接按一回車(chē)鍵,否則需要重新輸入一文件名。接著依次詢(xún)問(wèn),屏幕上顯示:,其中MAP文件(MAP文件列出各段的起點(diǎn),終點(diǎn)及長(zhǎng)度。)是否建立,由操作人員確定。若要,則輸入一文件名,否則直接送一回車(chē)鍵。后一個(gè)是詢(xún)問(wèn)在連接時(shí)是否要用庫(kù)文件。對(duì)于來(lái)自宏匯編語(yǔ)言程序的目標(biāo)程序文件,通常是直接送一回車(chē)鍵。與啟動(dòng)宏匯編程序一樣,可以在啟動(dòng)連接程序時(shí),用分號(hào)結(jié)束后續(xù)詢(xún)問(wèn)。如:C:LINKTEST;若要產(chǎn)生MAP文件,且使用目標(biāo)程序文件名,可用一逗號(hào)表示。如:C:LINKTEST,;,4.6匯編語(yǔ)言上機(jī)調(diào)試(續(xù)),若需要連接多模塊的目標(biāo)程序時(shí),可用“+”把它們連接起來(lái)。例如連接三個(gè)目標(biāo)程序文件P1.OBJ、P2.OBJ、P3.OBJ,其操作如下:C:LINKP1+P2+P3;這樣產(chǎn)生的一個(gè)可執(zhí)行文件是約定取用第一個(gè)目標(biāo)程序文件名,當(dāng)然操作人員也可重新用另外的文件名。,4.6匯編語(yǔ)言上機(jī)調(diào)試(續(xù)),4.調(diào)試運(yùn)行在建立好可執(zhí)行文件后,就可以直接從DOS執(zhí)行程序,如下所示:C:TEST.EXEC:程序運(yùn)行結(jié)束后返回DOS。如果用戶(hù)程序已直接把結(jié)果在終端上顯示出來(lái),那么程序已經(jīng)運(yùn)行結(jié)束,結(jié)果也已經(jīng)得到了。,1.DEBUG程序的調(diào)用在DOS的提示符下,可鍵入命令:C:DEBUGD:PATHFILENAME.EXTPARM1PARM2其中,文件名是被調(diào)試文件的名字。如用戶(hù)鍵入文件,則DEBUG將指定的文件裝入存儲(chǔ)器中,用戶(hù)可對(duì)其進(jìn)行調(diào)試。如果未鍵入文件名,則用戶(hù)可以用當(dāng)前存儲(chǔ)器的內(nèi)容工作,或者用DEBUG命令N和L把需要的文件裝入存儲(chǔ)器后再進(jìn)行調(diào)試。命令中的D指定指定驅(qū)動(dòng)器PATH為路徑,PARM1和PARM2則為運(yùn)行被調(diào)試文件時(shí)所需要的命令參數(shù)。,4.6.2DEBUG主要命令DEBUG是為匯編語(yǔ)言設(shè)計(jì)的一種高度工具,它通過(guò)單步、設(shè)置斷點(diǎn)等方式為匯編語(yǔ)言程序員提供了非常有效的調(diào)試手段。,4.6匯編語(yǔ)言上機(jī)調(diào)試(續(xù)),2.DEBUG的主要命令(1)顯示存儲(chǔ)單元的命令D(DUMP),格式為:_Daddress或_Drange例如,D命令的使用情況如下:,4.6匯編語(yǔ)言上機(jī)調(diào)試(續(xù)),(2)修改存儲(chǔ)單元內(nèi)容的命令有兩種。輸入命令E(ENTER),有兩種格式如下:第一種格式可以用給定的內(nèi)容表來(lái)替代指定范圍的存儲(chǔ)單元內(nèi)容。命令格式為:-Eaddresslist例如,-EDS:100F3XYZ8D第二種格式則是采用逐個(gè)單元相繼修改的方法。命令格式為:-Eaddress,4.6匯編語(yǔ)言上機(jī)調(diào)試(續(xù)),(3)檢查和修改寄存器內(nèi)容的命令R(register),它有三種格式如下:顯示CPU內(nèi)所有寄存器內(nèi)容和標(biāo)志位狀態(tài),其格式為:-R顯示和修改某個(gè)寄存器內(nèi)容,其格式為:-Rregistername顯示和修改標(biāo)志位狀態(tài),命令格式為:-RF,(4)運(yùn)行命令G,其格式為:-G=address1address2address3其中,地址1指定了運(yùn)行的起始地址,如不指定則從當(dāng)前的CS:IP開(kāi)始運(yùn)行。后面的地址均為斷點(diǎn)地址,當(dāng)指令執(zhí)行到斷點(diǎn)時(shí),就停止執(zhí)行并顯示當(dāng)前所有寄存器及標(biāo)志位的內(nèi)容,和下一條將要執(zhí)行的指令。,4.6匯編語(yǔ)言上機(jī)調(diào)試(續(xù)),(5)跟蹤命令T(Trace),有兩種格式:逐條指令跟蹤-T=address從指定地址起執(zhí)行一條指令后停下來(lái),顯示所有寄存器內(nèi)容及標(biāo)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論