




已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第4章MASM匯編語言基礎,4.1匯編語言語句種類及其格式4.2匯編語言數據4.3表達式與運算符4.4程序的段結構4.5其他常用偽指令4.6匯編語言上機調試,Intel8086/8088系列微機的匯編程序MASM,是美國Microsoft公司開發(fā)較早的宏匯編程序,它不僅具有ASM的全部功能(支持基本匯編語言),而且增加了指令、結構、記錄等高級宏匯編功能。語句(Statement)是匯編語言源程序的基本組成單位。一個匯編語言源程序有三種基本語句:指令語句、偽指令語句、宏指令語句。,第4章MASM匯編語言基礎,4.1匯編語言語句種類及其格式,每一條指令語句在匯編時都要產生一個可供機器執(zhí)行的目標代碼,這種語句也被稱為可執(zhí)行語句。指令語句的格式如圖4.1所示:圖4.1指令語句的格式,4.1匯編語言語句種類及其格式(續(xù)),4.1.1指令語句,一條指令語句有如下4個字段:1標號字段這是一個可選字段。標號必須以“:”作為結束符。一個標號是一條指令的符號地址,它代表該指令的第一個字節(jié)的地址。2指令助記符字段這是一條指令中不可缺少的主要成分。它表示這條語句要求CPU完成什么操作。,4.1.1指令語句(續(xù)),3操作數字段按照指令助記符字段要求,指令語句可以有一個操作數、兩個操作數或無操作數。4注釋字段這是一個可選字段,注釋字段必須以分號“;”為開始,它可以方便程序設計人員對程序或指令加以注釋,提高程序的的可讀性。,4.1.1指令語句(續(xù)),4.1.2偽指令語句,與指令語句不同的是,偽指令本身不產生與之對應的目標代碼。它是在匯編程序對匯編語言源程序匯編期間,由匯編程序處理的操作,它們可以完成如數據定義、分配存儲區(qū)、指示程序結束等功能。,4.1匯編語言語句種類及其格式(續(xù)),圖4.2偽指令語句的格式,一條偽指令語句也有如下4個字段:1符號名字段這是一個可選字段。符號名后面不得用冒號“:”,這是它與指令語句突出的一個區(qū)別。,4.1.2偽指令語句(續(xù)),4.1.2偽指令語句(續(xù)),2偽指令字段這是偽指令語句中不可省略的主要成分。它們是偽指令語句要求匯編程序完成的具體操作命令。,3操作數字段本字段是否需要,需要幾個,需要什么樣的操作數等都由偽指令字段中偽指令來確定。,4注釋字段這是一個任選字段,它必須以分號為開始,它的作用與指令語句的注釋字段相同。,4.2.1常量凡是出現在8086源程序中的固定值(即在匯編期間,它的值已經能夠完全確定,在程序運行期間,它的值也不會發(fā)生任何的變化),就稱為常量。,4.2匯編語言數據,通常匯編語言能識別的數據有:常量、變量和標號。,1十進制常量:09數字序列,可以用字母D結尾,也可沒有結尾字母;2二進制常量:以字母B結尾的0和1組成的數字序列;3八進制常量:以字母O或Q結尾的07數字序列;4十六進制常量:以字母H結尾的09和AF(或af)的數字字母序列。5字符串常量:用單引號或雙引號括起來的一個或多個字符,這些字符用它的ASCII碼值存儲在內存中。,4.2.1常量(續(xù)),變量就是用來表示程序中所用的內存操作數。,1定義格式:變量名類型助記符操作數,操作數,其中變量名字段是可有可無的,它用于指示內存操作數的地址(符號地址);操作數字段用于指示內存操作數,匯編程序將定義的內存操作數,按其類型分配內存,4.2.2變量,DQ偽指令用來定義四個字,其后的每個操作數都占有四個字;,4.2.2變量(續(xù)),常用的有以下幾種:,DB偽指令用來定義字節(jié),其后的每個操作數都占有一個字節(jié);,DW偽指令用來定義字,其后的每個操作數都占有一個字(低位字節(jié)存放在低地址,高位字節(jié)存放在高地址);,DD偽指令用來定義雙字,其后的每個操作數都占有兩個字;,(1)段屬性SEG它表示變量存放在哪一個邏輯段中。(2)偏移量屬性OFFSET表示變量在邏輯段中離段起始點的字節(jié)距離。(3)類型屬性TYPE表示變量占用存儲單元的字節(jié)數,它由類型助記符DB、DW、DD、DQ來規(guī)定。,4.2.2變量(續(xù)),2變量的三個屬性,它們通常有以下幾種情況:(1)數值表達式:表示內存操作數的初始值,其值應在其定義的類型范圍內。如:xxDB1,1yyDW216,1(2)表達式:不帶引號的?表示可預置任何內容。,3預置初值,4.2.2變量(續(xù)),對于DB偽指令,為字符串中每個字符分配一個字節(jié)單元。字符串必須是引號括起來的不超過255個字符。對于DW偽指令,可以給兩個字符組成的字符串分配兩個字節(jié)的存儲單元,而且這兩個字符的ASCII碼的存儲順序是前一個字符在高字節(jié),后一字符在低字節(jié)。每一個數據項只能是12個字符。,(3)字符串表達式,3預置初值(續(xù)),對于DD偽指令,僅可給兩個字符組成的字符串分配4個字節(jié)的單元,且這兩個ASCII碼是存儲在兩個低字節(jié)(存儲順序與DW偽指令相同)中,兩個高字節(jié)均存放00H。,(4)帶DUP表達式:DUP是定義重復數據操作符,在操作數部分的格式為:重復次數DUP(重復的內容),(3)字符串表達式(續(xù)),3預置初值(續(xù)),(1)在指令語句中,如果要對某存儲單元進行存取操作,就可直接引用它的變量名。(2)在偽指令語句中:定義變量時引用了另一個變量,則這個變量的內容均是被引用變量的邏輯地址。如用DW,則僅有偏移量,如用DD則前兩個字節(jié)存放偏移量,后兩個字節(jié)存放段地址;注意不能用DB引用變量名。,4.2.2變量(續(xù)),4變量的使用,2標號的三個屬性:(1)段屬性:表示這條指令的目標代碼在哪個邏輯段中;(2)偏移量屬性:表示這條指令目標代碼的首字節(jié)在段內離段起始點的字節(jié)距離;(3)距離屬性(或類型屬性),4.2.3標號(Label),1定義:標號是一條指令目標代碼的符號地址,它常作為轉移指令或調用指令的操作數。,4.3.1算術運算符算術運算符有(加)、(減)、(乘)、/(整除)、MOD(求余),參加運算的數和運算結果均是整數。,4.3.2邏輯運算符邏輯運算符有4個:AND(與)、OR(或)、NOT(非)和XOR(異或),參加運算的數和運算的結果均是整數,邏輯運算是按位進行的。,4.3表達式與運算符,這6個關系運算符分別是:GT(大于)、GE(大于等于)、LT(小于)、LE(小于等于)、EQ(等于)、和NE(不等于)。它們用于比較兩個表達式,表達式一定是常數或同段內的變量。若是常數,按無符號數比較;若是變量則比較它們的偏移量。比較的結果為以真,表示為全1;結果為假,表示為全0。,4.3表達式與運算符(續(xù)),4.3.3關系運算符,1SEG格式:SEG變量名或標號當運算符SEG加在一個變量名或標號前面時,匯編程序回送的運算結果是這個變量或標號所在的段的段基址;,4.3表達式與運算符(續(xù)),4.3.4數值返回運算符,數值返回運算符有5個,分別是:SEG、OFFSET、TYPE、LENGTH和SIZE。這種運算符的對象必須是存儲器操作數,即變量名或標號,通過運算后返回的是一個數值。,3TYPE格式:TYPE變量名或標號如果是變量,則匯編程序將回送該變量的以字節(jié)數表示的類型:DB為1,DW為2,DD為4,DQ為8。如果是標號,則匯編程序將回送代表該標號類型的數值:NEAR為1,FAR為2。,4.3.4數值返回運算符(續(xù)),2OFFSET格式:OFFSET變量名或標號當運算符OFFSET加在一個變量名或標號前面時,匯編程序回送的運算結果是這個變量或標號所在的段的偏移量;,5SIZE格式:SIZE變量名運算符SIZE加在變量的前面,匯編程序回送的值等于LENGTH和TYPE兩個運算符返回值的乘積。,4.3.4數值返回運算符(續(xù)),4LENGTH格式:LENGTH變量名如果變量是用重復數據操作符DUP說明的,匯編程序將回送外層DUP給定的值;如果變量沒有用DUP說明,則返回的值總是1。,這種運算符是對變量、標號或某存儲器的類型屬性進行修改指定,它主要有PTR、段跨越前綴、SHORT、HIGH和LOW等5種。,4.3.5屬性修改運算符,1PTR格式:類型PTR地址表達式其中,地址表達式是指要修改類型屬性的標號或存儲器操作數。如果它是標號,則與之對應的類型有:NEAR、FAR;如果它是存儲器操作數,則與之對應的類型有:BYTE、WORD、DWORD。,2段跨越前綴它是在存儲器操作數之前加上段寄存器名和冒號用于強行指定此存儲器操作數相對哪個段寄存器,共有4種:DS:、CS:、SS:和ES:,4.3.5屬性修改運算符(續(xù)),3SHORT用來修飾JMP指令中轉向地址的屬性,指出轉向地址是在下一條指令地址的128127字節(jié)范圍之內。,4HIGH/LOW格式:HIGH常數或地址表達式LOW常數或地址表達式這兩個運算符稱為字節(jié)分離操作符,它接收一個常數或地址表達式,HIGH取其高位字節(jié),LOW取其低位字節(jié)。其中地址表達式必須具有常量值,HIGH/LOW運算符用于分離出段地址或偏移量的高字節(jié)/低字節(jié)。,4.3.5屬性修改運算符(續(xù)),由高到低,從左往右地對優(yōu)先級別相同的運算符進行計算。表4.1算符的優(yōu)先級別關系表,4.3表達式與運算符(續(xù)),格式:段名SEGMENT段名ENDS一個完整的匯編源程序中可以定義多個段,但同時起作用的最多只有4個。每一個段都是由偽指令SEGMENT開始,由ENDS結束,SEGMENT和ENDS必須成對出現,并且在SEGMENT和ENDS的前面都必須有同一個段名;SEGMENT和ENDS語句之間可以的省略號部分,對于代碼段來說,主要是指令,也可以有偽指令;對于數據段、附加段和堆棧段來說,一般是存儲單元的定義、分配等偽操作。,4.4程序的段結構,4.4.1段定義偽指令,4.4.2段尋址偽指令定義段與段寄存器的關系,這可用ASSUME這個段尋址偽指令來實現,其格式如下:ASSUME段寄存器名:段名,段寄存器:段名,其中段寄存器名為CS、DS、ES、SS中的一個;段名則必須是由SEGMENT定義過的段名;段寄存器名和段名之間必須有冒號“:”。ASSUME偽操作的作用指示匯編程序指令中用到的標號、過程及變量所在的段。在代碼段中,可以隨時用ASSUME偽指令修改“段寄存器名:段名”的聯(lián)系。,4.4程序的段結構(續(xù)),2SS的裝入裝入的辦法有兩個:(1)在段定義偽指令的組合類型中選擇“STACK”參數,且在段尋址偽指令(ASSUME)中,把堆棧用的這一個段指派給段寄存器SS。(2)可用類似DS,ES的裝入辦法。,4.4.3段寄存器的裝入,4.4程序的段結構(續(xù)),1DS和ES的裝入在程序中,引用段名就是以立即數形式獲取該段的段基址,所以一個段的段基址要經過通用寄存器傳送給DS,ES。,用DS、ES的裝入的辦法,那么為裝入CS、IP的新值需要執(zhí)行幾條指令。對CS、IP的裝入通常是:按照END結束偽指令指定的地址裝入CS、IP。任何一個源程序都是以END偽指令來結束。格式:END起始地址起始地址可以是一個標號或表達式;END偽指令的作用是指示源程序到此結束和指定程序運行時的起始地址。,4.4.3段寄存器的裝入(續(xù)),3CS的裝入,1.等值語句格式:符號EQU表達式其中EQU是等值偽指令,把表達式的值或符號賦給EQU左邊的符號,表達式可以是:常量表達式,地址表達式,變量、標號或指令助記符,,4.5其它常用偽指令,4.5.1符號定義語句,等值語句僅在匯編源程序時,作為替代符號用,不產生任何的目標代碼,也不占有存儲單元。在同一源程序中,同一符號在EQU語句未解除之前不能用EQU偽指令重新定義。已經用EQU定義的符號,若以后不再用了就可以用PURGE語句來解除。PURGE語句的格式如下:PURGE符號1,符號2,符號n,注意事項:,4.5.1符號定義語句(續(xù)),2、等號語句格式:符號=表達式此語句的功能與EQU等值語句類似,其最大的特點是能對符號進行重定義。,4.5其它常用偽指令(續(xù)),4.5.2程序開始和結束偽指令1.開始偽指令NAME的格式:NAMEmodule_name匯編程序將以給出的module_name作為模塊的名字。如果程序中沒有NAME偽指令,則可使用TITLE偽指令,其格式:TITLEtext,2.程序結束偽指令表示源程序結束的偽指令的格式:END起始標號,4.5.2程序開始和結束偽指令(續(xù)),4.5.3定位偽指令(ORG)和當前位置計數器($)符號“$”代表當前位置計數器的現行值。定位偽指令的ORG的格式:ORG表達式它表示把表達式的值賦給當前位置計數器:ORG語句后的指令或數據以表達式給定的值作起始偏移量。,在程序設計中,通常把具有一定功能的程序段設計成一個子程序。過程定義偽指令格式如下:過程名PROC(NEAR/FAR)RET過程名ENDP,4.5.4過程定義偽指令,4.5其它常用偽指令(續(xù)),過程名不能省,且過程的開始PROC和結束ENDP應使用同一個過程名;它就是過程調用指令CALL的目標操作數。它類同于標號的的作用,同樣具有三個屬性。當沒有定義它的距離屬性,隱含為NEAR。任何一個過程,一定含有返回指令RET,它可以在過程中任何位置,不一定非要放在最后。若一個過程有多個出口,它可能有多個返回指令。但一個過程執(zhí)行的最后一條指令必定是RET。,4.5.4過程定義偽指令(續(xù)),4.6.1上機步驟程序設計人員還需要對已編寫好的程序進行調試和測試,使它能正確運行。,4.6匯編語言上機調試,2.匯編匯編就是用宏匯編程序MASM.EXE把匯編語言源程序翻譯(匯編)成機器語言的目標程序。宏匯編程序主要有以下功能:檢查源程序中語法錯誤,給出錯誤信息;展開宏指令;生目標程序(.OBJ),列表文件(.LST)和交叉引用文件(.CRF)。,4.6匯編語言上機調試(續(xù)),1.編輯調用編輯程序EDIT.EXE,WS.EXE等,用鍵盤敲入源程序,退出編輯系統(tǒng)時,保存編輯完成的文件,且擴展名為.ASM。,接著屏幕上顯示:宏匯編程序詢問匯編產生的目標程序文件(目標程序文件是一個純二進制代碼文件,不能直接在屏幕上顯示觀察)的文件名是否為方括號中的默認值(即目標程序與源程序同名)。若是,直接按一回車鍵,否則需自己輸入另一文件名。在回答完這一詢問后,宏匯編程序接著依次詢問產生列表文件(列表文件.LST是一個很有用的文件,文件中包含了源程序中各語句及其對應的目標代碼。給出了源程序中各語句所屬段內的偏移量,并且把源程序中所用的標號、變量和符號,列出它們的名字、類型和值,便于查閱)和交叉引用文件(交叉引用文件中給出了源程序中定義的符號如標號、變量等以及程序中引用這些符號的情況,且是按字母順序排列的。若要查看這個符號表,必須使用CREF軟件,它根據.CRF文件建立一個擴展名為.REF的文件。然后再顯示.REF文件的內容就可以看到這個符號表)的文件名,屏幕上顯示:,4.6匯編語言上機調試(續(xù)),這兩個文件是否建立由操作人員確定:若要建立其中一個或兩個,操作人員便可輸入所需建立的文件名,否則直接送入回車鍵。待完成上述人機對話后,宏匯編程序便對源程序進行掃描,檢查源程序中各語句是否有語法錯誤,同時把各語句匯編成對應的機器目標代碼。在匯編過程中,若發(fā)現源程序有語法錯誤,便隨時給出出錯信息。屏幕上顯示:,4.6匯編語言上機調試(續(xù)),如果警告錯誤和嚴重錯誤總數都等于零,那么這次源程序的匯編獲得通過,可以進行連接。否則,返回編輯程序,修改源程序,然后再次進行匯編,直到源程序匯編正確無誤。如果匯編時,無須產生列表文件和交叉引用文件,則在啟動宏匯編程序時可用分號結尾,比如:C:MASMTEST;如果需要后面的列表文件和交叉引用文件,且它們的文件名與源文件名相同,這時啟動宏匯編程序時,可用逗號指明,比如:C:MASMTEST,;,4.6匯編語言上機調試(續(xù)),3.連接源程序經過匯編后產生的目標程序,必須經過連接程序LINK.EXE連接后才能運行。,連接程序把一個或多個獨立的目標程序模塊連接裝配成一個可重定位的可執(zhí)行文件(擴展名為.EXE)。連接程序LINK除產生一個可執(zhí)行文件外,還可產生一個內存映象文件(擴展名為.MAP)。LINK連接的一定是擴展名為.OBJ的目標程序。在操作系統(tǒng)狀態(tài)下,直接啟動連接程序LINK.EXE。例如:C:LINKTEST接著屏幕上顯示:,4.6匯編語言上機調試(續(xù)),連接程序詢問連接時產生的可執(zhí)行文件名是否用方括號中的默認值(即可執(zhí)行文件與目標程序文件同名)。若是,可直接按一回車鍵,否則需要重新輸入一文件名。接著依次詢問,屏幕上顯示:,其中MAP文件(MAP文件列出各段的起點,終點及長度。)是否建立,由操作人員確定。若要,則輸入一文件名,否則直接送一回車鍵。后一個是詢問在連接時是否要用庫文件。對于來自宏匯編語言程序的目標程序文件,通常是直接送一回車鍵。與啟動宏匯編程序一樣,可以在啟動連接程序時,用分號結束后續(xù)詢問。如:C:LINKTEST;若要產生MAP文件,且使用目標程序文件名,可用一逗號表示。如:C:LINKTEST,;,4.6匯編語言上機調試(續(xù)),若需要連接多模塊的目標程序時,可用“+”把它們連接起來。例如連接三個目標程序文件P1.OBJ、P2.OBJ、P3.OBJ,其操作如下:C:LINKP1+P2+P3;這樣產生的一個可執(zhí)行文件是約定取用第一個目標程序文件名,當然操作人員也可重新用另外的文件名。,4.6匯編語言上機調試(續(xù)),4.調試運行在建立好可執(zhí)行文件后,就可以直接從DOS執(zhí)行程序,如下所示:C:TEST.EXEC:程序運行結束后返回DOS。如果用戶程序已直接把結果在終端上顯示出來,那么程序已經運行結束,結果也已經得到了。,1.DEBUG程序的調用在DOS的提示符下,可鍵入命令:C:DEBUGD:PATHFILENAME.EXTPARM1PARM2其中,文件名是被調試文件的名字。如用戶鍵入文件,則DEBUG將指定的文件裝入存儲器中,用戶可對其進行調試。如果未鍵入文件名,則用戶可以用當前存儲器的內容工作,或者用DEBUG命令N和L把需要的文件裝入存儲器后再進行調試。命令中的D指定指定驅動器PATH為路徑,PARM1和PARM2則為運行被調試文件時所需要的命令參數。,4.6.2DEBUG主要命令DEBUG是為匯編語言設計的一種高度工具,它通過單步、設置斷點等方式為匯編語言程序員提供了非常有效的調試手段。,4.6匯編語言上機調試(續(xù)),2.DEBUG的主要命令(1)顯示存儲單元的命令D(DUMP),格式為:_Daddress或_Drange例如,D命令的使用情況如下:,4.6匯編語言上機調試(續(xù)),(2)修改存儲單元內容的命令有兩種。輸入命令E(ENTER),有兩種格式如下:第一種格式可以用給定的內容表來替代指定范圍的存儲單元內容。命令格式為:-Eaddresslist例如,-EDS:100F3XYZ8D第二種格式則是采用逐個單元相繼修改的方法。命令格式為:-Eaddress,4.6匯編語言上機調試(續(xù)),(3)檢查和修改寄存器內容的命令R(register),它有三種格式如下:顯示CPU內所有寄存器內容和標志位狀態(tài),其格式為:-R顯示和修改某個寄存器內容,其格式為:-Rregistername顯示和修改標志位狀態(tài),命令格式為:-RF,(4)運行命令G,其格式為:-G=address1address2address3其中,地址1指定了運行的起始地址,如不指定則從當前的CS:IP開始運行。后面的地址均為斷點地址,當指令執(zhí)行到斷點時,就停止執(zhí)行并顯示當前所有寄存器及標志位的內容,和下一條將要執(zhí)行的指令。,4.6匯編語言上機調試(續(xù)),(5)跟蹤命令T(Trace),有兩種格式:逐條指令跟蹤-T=address從指定地址起執(zhí)行一條指令后停下來,顯示所有寄存器內容及標
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DB6105-T 242-2025 奶山羊養(yǎng)殖場糞污處理技術規(guī)范
- 備煤車間崗位安全操作技術規(guī)程
- 暴風雨天氣應急預案集錦(4篇)
- 兒童疫苗接種與免疫措施
- 八年級上冊語文第6單元導學案
- 《跨境電商實務》課件 1.2 跨境電商的模式
- 小程序線下研討活動方案
- 工會戶外秋游活動方案
- 小學語文班級活動方案
- 小鹿跳跳活動方案
- 2023年廣東初中學業(yè)水平考試生物試卷真題(含答案)
- 監(jiān)理工作匯報-課件
- MIL-STD-1916抽樣標準簡介課件
- CSC-2000(V2) 變電站自動化監(jiān)控系統(tǒng)運行手冊
- 鋼卷尺檢定證書
- 放到單位檔案的個人自傳
- 《湯姆˙索亞歷險記》整本書導讀課教學設計9篇
- 混凝土試件養(yǎng)護出入臺賬
- 鍋爐電梯井外彩鋼板封閉工程施工方案
- 中國科學院生態(tài)環(huán)境研究中心-環(huán)境工程A-927歷年真題2010-2015
- SCR脫硝反應器尺寸修改后
評論
0/150
提交評論