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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、15.45.4 匯編語言源程序掌握:掌握:n匯編語言與匯編程序的概念;匯編語言與匯編程序的概念;n匯編語言程序設計過程;匯編語言程序設計過程;n匯編語言源程序的結構框架;匯編語言源程序的結構框架;n常用偽指令及基本常用偽指令及基本DOS功能模塊的應用。功能模塊的應用。2一、一、80X86新增指令特點:n增加對增加對32位字長操作的指令;位字長操作的指令;n加強各類指令功能;加強各類指令功能;n增加了高級語言、控制保護、增加了高級語言、控制保護、Cache 管理管理等指令。等指令。3二、匯編語言及匯編程序n計算機語言:計算機語言:機器語言機器語言匯編語言匯編語言高級語言高級語言面向機器面向機器

2、的語言的語言機器語言機器語言匯編語言匯編語言高級語言高級語言4匯編語言及匯編程序n匯編語言源程序匯編語言源程序 用助記符編寫的程序用助記符編寫的程序源程序的編譯程序源程序的編譯程序匯編程序匯編程序匯編語言匯編語言源程序源程序機器語言機器語言目標程序目標程序5匯編語言程序設計與執(zhí)行過程n輸入匯編語言源程序輸入匯編語言源程序 源文件源文件 .ASMn匯編(編譯)匯編(編譯) 目標文件目標文件 .OBJn鏈接鏈接 可執(zhí)行文件可執(zhí)行文件 .EXEn調試調試 最終程序最終程序6匯編語言的程序結構n一個源程序必須用其編譯器能夠理解的語法進一個源程序必須用其編譯器能夠理解的語法進行編寫,這些語法是指語句和程

3、序結構必須遵行編寫,這些語法是指語句和程序結構必須遵循的規(guī)則。匯編語言也是如此。循的規(guī)則。匯編語言也是如此。n首先,通過以下可在首先,通過以下可在PC DOS環(huán)境下運行的匯環(huán)境下運行的匯編語言源程序實例,初步認識標準的匯編語言編語言源程序實例,初步認識標準的匯編語言源程序的框架結構,并通過它來了解匯編語言源程序的框架結構,并通過它來了解匯編語言的有關規(guī)定和格式。的有關規(guī)定和格式。7例:打印輸出字符串“THIS IS A SAMPLE PROGRAM”;SAMPLE PROGRAM DISPLAY MESSAGE;注釋行;注釋行STACK SEGMENT PARA STACK STACK;定義堆

4、棧段;定義堆棧段 DB 1024 DUP(0);在存儲器建立一個堆棧區(qū)在存儲器建立一個堆棧區(qū)STACK ENDS;段結束;段結束DATA SEGMENT ;定義數據段;定義數據段MESSAGE DBTHIS IS A SAMPLE PROGRAM;存放數據;存放數據 DB 0DH,0AH,$DATA ENDS;段結束;段結束CODE SEGMENT;代碼段開始;代碼段開始 ASSUME CS:CODE,DS:DATA,SS:STACK;將段名與段寄;將段名與段寄器聯(lián)系起來器聯(lián)系起來8START PROC FAR;將過程定義為遠過程;將過程定義為遠過程 PUSH DS MOV AX,0 PUSH

5、 AX MOV AX,DATA;建立數據段的可尋址性;建立數據段的可尋址性 MOV DS,AX;初始化;初始化DS LEA BX,MESSAGELOOP1: CMP BYTE PTRBX,$ JE LOOP2 MOV AH,5標準序,以便返回DOS操作系統(tǒng)9 MOV DL,BX INT 21H INC BX JMP LOOP1LOOP2: RETSTART ENDP;過程結束;過程結束CODE ENDS;代碼段結束;代碼段結束 END START;整個程序匯編結束;整個程序匯編結束10匯編源程序的特點n一、由若干邏輯段組成,各邏輯段都有一個段名,由一、由若干邏輯段組成,各邏輯段都有一個段名,由

6、段定義語句(偽指令)來定義和說明。通常只有代碼段定義語句(偽指令)來定義和說明。通常只有代碼段是必不可少的。數據段或附加段用來在內存中建立段是必不可少的。數據段或附加段用來在內存中建立一個適當容量的工作區(qū)用以存放常量和變量。堆棧段一個適當容量的工作區(qū)用以存放常量和變量。堆棧段則在內存中建立一個堆棧區(qū),以便中斷和子程序調用則在內存中建立一個堆棧區(qū),以便中斷和子程序調用及各模塊間傳遞參數時使用。及各模塊間傳遞參數時使用。n某些簡單的程序并不一定需要數據段和堆棧段,但對某些簡單的程序并不一定需要數據段和堆棧段,但對一些復雜的程序,堆棧段、數據段和代碼段都可以不一些復雜的程序,堆棧段、數據段和代碼段都

7、可以不止一個。止一個。n通常把數據段放在代碼段前面。通常把數據段放在代碼段前面。11匯編源程序的特點(續(xù))n二、在代碼段的起始處,用二、在代碼段的起始處,用ASSUME命令說明命令說明各個段寄存器與邏輯段的關系。并由用戶自己各個段寄存器與邏輯段的關系。并由用戶自己設置各段寄存器(除代碼段外)初值設置各段寄存器(除代碼段外)初值 ,以建,以建立這些邏輯段的可尋址性。立這些邏輯段的可尋址性。n三、每個邏輯段由若干行匯編語句組成,每行三、每個邏輯段由若干行匯編語句組成,每行只有一條語句且不能超過只有一條語句且不能超過128個字符,但一條個字符,但一條語句允許有后續(xù)行,最后均以加車作結束。整語句允許有

8、后續(xù)行,最后均以加車作結束。整個源程序必須以個源程序必須以END語句來結束,它通知匯編語句來結束,它通知匯編程序停止匯編。程序停止匯編。END后面的標號后面的標號START表示表示該程序執(zhí)行時的起始地址。該程序執(zhí)行時的起始地址。12匯編源程序的特點(續(xù))n四、每一條匯編語句最多由四、每一條匯編語句最多由4個字段組成,它個字段組成,它們均按照一定的規(guī)則分別寫在一條語句的們均按照一定的規(guī)則分別寫在一條語句的4個個區(qū)域,各區(qū)域之間用空格或區(qū)域,各區(qū)域之間用空格或TAB鍵隔開。鍵隔開。n五、每個源程序在代碼段中都必須含有返回到五、每個源程序在代碼段中都必須含有返回到DOS操作系統(tǒng)的指令語句,以保證程序

9、執(zhí)行完操作系統(tǒng)的指令語句,以保證程序執(zhí)行完畢后能自動回到畢后能自動回到DOS狀態(tài),以便繼續(xù)向計算機狀態(tài),以便繼續(xù)向計算機鍵入命令。鍵入命令。13源程序與PC DOS的接口n為保證用戶程序執(zhí)行完后自動返回為保證用戶程序執(zhí)行完后自動返回DOS,應采,應采取兩項措施:一是將用程序中的主程序定義為取兩項措施:一是將用程序中的主程序定義為FAR過程,其最后一條指令為過程,其最后一條指令為RET;二是在主;二是在主程序的開始處將程序的開始處將PSP所在段的段地址所在段的段地址DS(或(或ES)保存進棧,然后再將一個全)保存進棧,然后再將一個全0的字(的字(PSP的段內偏移地址)壓入堆棧。的段內偏移地址)壓

10、入堆棧。nPUSH DSnMOV AX,0nPUSH AX14源程序與PC DOS的接口(續(xù))n還有一種返回還有一種返回DOS的非標準方法:不定義主程的非標準方法:不定義主程序為序為FAR過程并去掉標準序部分,只在代碼段過程并去掉標準序部分,只在代碼段結束之前(即結束之前(即CODE ENDS之前)增加兩句:之前)增加兩句:nMOV AH,4CHnINT 21H15匯編語言的語句格式n語句是匯編語言源程序的基本組成單位,源程語句是匯編語言源程序的基本組成單位,源程序是一個語句序列。語句序列中的每個語句規(guī)序是一個語句序列。語句序列中的每個語句規(guī)定了一個基本操作要求,而語句序列則完成某定了一個基本

11、操作要求,而語句序列則完成某個特定的操作任務。個特定的操作任務。16語句的種類n在在80X86/Pentium匯編語言中,有三種基本匯編語言中,有三種基本語句:指令語句、偽指令語句和宏指令語句。語句:指令語句、偽指令語句和宏指令語句。n指令語句:指令語句: 對應于對應于CPU指令系統(tǒng)中的一條指令,為可執(zhí)行指令系統(tǒng)中的一條指令,為可執(zhí)行語句。匯編程序將為之產生一對應的機器目標語句。匯編程序將為之產生一對應的機器目標代碼。代碼。如:指令語句如:指令語句MOV DS,AX ;機器代碼為機器代碼為8EH和和D8H17語句的種類(續(xù))n偽指令語句偽指令語句nCPU不執(zhí)行的語句,只是匯編時給匯編程序提不執(zhí)

12、行的語句,只是匯編時給匯編程序提供匯編信息,如定義符號、分配存儲單元、將供匯編信息,如定義符號、分配存儲單元、將程序分段等。它本身不產生目標代碼,所以是程序分段等。它本身不產生目標代碼,所以是指示性語句。指示性語句。n如偽指令語句如偽指令語句SEGMENT/ENDS;18語句的種類(續(xù))n宏指令語句宏指令語句n是以某個宏名字定義的一段指令序列。匯編時,是以某個宏名字定義的一段指令序列。匯編時,凡有宏指令語句的地方都將用相應的指令序列凡有宏指令語句的地方都將用相應的指令序列的目標代碼插入。的目標代碼插入。19匯編語言的語句格式n指令性語句指令性語句 由由CPU執(zhí)行的指令執(zhí)行的指令n語句格式:語句

13、格式:標號:標號: 前綴前綴 助記符助記符 操作數操作數,操作數操作數 ;注釋;注釋指令的符號地址,指令的符號地址,標號后要有冒號標號后要有冒號操作碼操作碼注釋前加分號注釋前加分號20匯編語言的語句格式n指示性語句指示性語句 : CPU不執(zhí)行的指令,不生成目標代碼;不執(zhí)行的指令,不生成目標代碼; 由匯編程序執(zhí)行,用于分配內存空間、定義變量、指由匯編程序執(zhí)行,用于分配內存空間、定義變量、指示程序開始和結束等。示程序開始和結束等。n指令格式:指令格式:名字名字 偽指令助記符偽指令助記符 操作數操作數 ,操作數,操作數, ;注釋;注釋變量的符號地址變量的符號地址其后不加冒號其后不加冒號指示性語句中至

14、少有一個操作數指示性語句中至少有一個操作數21匯編語言的語句格式(續(xù))n其中,方括號中的內容為可選部分,操作數部分或是其中,方括號中的內容為可選部分,操作數部分或是0、1操作數,或是由逗號隔開的多個操作數。操作數,或是由逗號隔開的多個操作數。n(1)標號和名字:標號和名字分別是給指令單元和偽)標號和名字:標號和名字分別是給指令單元和偽指令起的符號名稱,用符號匯編語言規(guī)定的標識符來表指令起的符號名稱,用符號匯編語言規(guī)定的標識符來表示。標號后面必須有冒號,名字后面沒有。示。標號后面必須有冒號,名字后面沒有。n標號和名字的選擇有一些限制。首先,它們必須符號匯標號和名字的選擇有一些限制。首先,它們必須

15、符號匯編語言的標識符定義,即以字母開頭,由字母(編語言的標識符定義,即以字母開頭,由字母(AZ或或az,匯編程序不區(qū)分大小寫)、數字及部分特殊字符,匯編程序不區(qū)分大小寫)、數字及部分特殊字符(?、(?、$和下劃線和下劃線_等)組成的字符串表示,字符串等)組成的字符串表示,字符串長度不能超過長度不能超過31個。此外,標識符不能是匯編言中有特個。此外,標識符不能是匯編言中有特定意義的保留字。定意義的保留字。22匯編語言的語句格式(續(xù))n(2)助記符和定義符)助記符和定義符n助記符和定義符分別用于規(guī)定指令語句的操作性質和助記符和定義符分別用于規(guī)定指令語句的操作性質和偽指令語句的偽操作功能,這部分是語

16、句中唯一不可偽指令語句的偽操作功能,這部分是語句中唯一不可缺省的。缺省的。n(3)操作數)操作數n指令語句中的操作數提供該指令的操作對象,并說明指令語句中的操作數提供該指令的操作對象,并說明要處理的數據存放在什么位置以及如何訪問它。要處理的數據存放在什么位置以及如何訪問它。n(4)注釋)注釋n注釋由分號注釋由分號“;”開始,用來對語句的功能加以說明,開始,用來對語句的功能加以說明,它們構成了源程序的編程文檔,使程序更容易被理解它們構成了源程序的編程文檔,使程序更容易被理解和閱讀。和閱讀。23操作數n常量常量 數值或字符、字符串數值或字符、字符串n寄存器寄存器n存儲器單元存儲器單元n變量或標號變

17、量或標號n表達式表達式 可包括各種運算符可包括各種運算符24常量n在匯編時已經確定其值且程序運行期間不變化在匯編時已經確定其值且程序運行期間不變化的量為常量,如語句中的立即數或端口地址等。的量為常量,如語句中的立即數或端口地址等。n這些常量的形式各不相同,常用的有二、十、這些常量的形式各不相同,常用的有二、十、八或十六進制的整型數值常量、字符串常量和八或十六進制的整型數值常量、字符串常量和已賦值的常標識符。已賦值的常標識符。n 在匯編語言源程序中,常用十六進制來表示在匯編語言源程序中,常用十六進制來表示數據和地址。數據和地址。25變量n代表內存中的數據區(qū),程序中視為存儲器操代表內存中的數據區(qū),

18、程序中視為存儲器操作數作數n變量的三種屬性:變量的三種屬性: 段段 值值 變量所在段的段地址變量所在段的段地址 偏移量偏移量 變量單元地址與段首地址之變量單元地址與段首地址之 間的位移量。間的位移量。 類類 型型 字節(jié)型(字節(jié)型(BYTEBYTE)、字型)、字型(WORD)(WORD)、雙字型雙字型(DWORD)(DWORD)、四字和十字節(jié)、四字和十字節(jié)5 5種種26表達式操作數n表達式操作數由各種操作數、運算符和操作符表達式操作數由各種操作數、運算符和操作符組成。組成。n匯編語言中的兩類表達式:匯編語言中的兩類表達式:n數值表達式:由數值常量、字符串常量或符號數值表達式:由數值常量、字符串常

19、量或符號常量等與算術、邏輯或關系運算符連接而成。常量等與算術、邏輯或關系運算符連接而成。n地址表達式:由常量、變量、標號、寄存器的地址表達式:由常量、變量、標號、寄存器的內容以及一些運算符組成。其值表示存儲器地內容以及一些運算符組成。其值表示存儲器地址,一般都是段內的偏移地址。地址表達式主址,一般都是段內的偏移地址。地址表達式主要用來表示指令語句中的操作數。要用來表示指令語句中的操作數。27三、基本偽指令n數據定義偽指令數據定義偽指令n符號定義偽指令符號定義偽指令n段定義偽指令段定義偽指令n設定段寄存器偽指令設定段寄存器偽指令n結束偽指令結束偽指令n* *過程定義偽指令過程定義偽指令n*宏命令

20、偽指令宏命令偽指令28數據定義偽指令n數據定義語句用于定義變量。它指定變量的類型和名數據定義語句用于定義變量。它指定變量的類型和名稱,并為變量分配存儲單元。稱,并為變量分配存儲單元。n格式:格式: 變量名變量名 偽指令助記符偽指令助記符 操作數,操作數, ;注釋;注釋其中,變量名是可選的;操作數是賦給變量的初值,多其中,變量名是可選的;操作數是賦給變量的初值,多個相同類型的變量可在一條語句中定義。個相同類型的變量可在一條語句中定義。經過定義的變量名有三個屬性:數據類型、偏移量(可經過定義的變量名有三個屬性:數據類型、偏移量(可用用OFFSET獲得)和段基址(可用獲得)和段基址(可用SEG獲得)

21、。若某獲得)。若某個變量所表示的是一個數組,則其類型屬性為變量的個變量所表示的是一個數組,則其類型屬性為變量的單個元素所占用的字節(jié)數。單個元素所占用的字節(jié)數。29數據定義偽指令偽指令助記符偽指令助記符nDB 定義的變量為字節(jié)型定義的變量為字節(jié)型nDW 定義的變量為字類型(雙字節(jié))定義的變量為字類型(雙字節(jié))nDD 定義的變量為雙字型(定義的變量為雙字型(4字節(jié))字節(jié))nDQ 定義的變量為定義的變量為4字型(字型(8字節(jié))字節(jié))nDT 定義的變量為定義的變量為10字節(jié)型字節(jié)型30數據定義偽指令nDATA1 DB 11H,22H,33H,44HnDATA2 DW 11H,22H,3344HnDAT

22、A3 DD 11H*2,22H,33445566H考慮以上變量在內考慮以上變量在內存中的存放形式存中的存放形式31數據定義偽指令n偽指令的性質決定所定義變量的屬性;偽指令的性質決定所定義變量的屬性;n定義字符串必須用定義字符串必須用DB偽指令偽指令n例:例: DATA1 DB ABCD,66HABCD41H42H43H44H66H32數據定義語句的具體形式和功能n(1)為數據項分配存儲單元,用變量名作為)為數據項分配存儲單元,用變量名作為該存儲單元的名稱。該存儲單元的名稱。n例:例:X DB 25H;定義變量;定義變量X為字節(jié)為字節(jié)n Y DW 4124H;定義變量定義變量Y為字為字n匯編時匯

23、編程序會把匯編時匯編程序會把25H、4142H這些初值這些初值分別放入名為分別放入名為X、Y的存儲單元中的存儲單元中33數據定義語句的具體形式和功能n(2)預留若干字節(jié)(字、雙字)存儲單元但)預留若干字節(jié)(字、雙字)存儲單元但并不賦以具體的初值,以存放程序的運行結果。并不賦以具體的初值,以存放程序的運行結果。這時操作數部分可使用問號這時操作數部分可使用問號“?”。n例:例:A DB ? ;為變量;為變量A分配一個字節(jié)單元分配一個字節(jié)單元n B DB ? ;為變量為變量B分配一個字單元分配一個字單元34數據定義語句的具體形式和功能n(3)引入若干個用逗號分隔的操作數來定義)引入若干個用逗號分隔的

24、操作數來定義一個表(數組)。一個表(數組)。n例:例:W_TABLE DW 1122H,3344H;定義一定義一個字表個字表n B_TABLE DB 1,2,4,8,16;定義一個字節(jié)定義一個字節(jié)表表n其中字變量其中字變量W_TABLE的內容為的內容為1122H,下一,下一個字單元的內容為個字單元的內容為3344H。35數據定義語句的具體形式和功能n(4)用)用DB偽指令在內存中定義一個字符串。字符串偽指令在內存中定義一個字符串。字符串中的每一個字符用它的中的每一個字符用它的ASCII碼值來表示,為一個字碼值來表示,為一個字節(jié),所以字符串的定義必須用節(jié),所以字符串的定義必須用DB命令。命令。n

25、例如:例如:MESSAGE DB HELLOn注意:當字符串的長度不超過兩個字符時,也可用注意:當字符串的長度不超過兩個字符時,也可用DW偽指令來定義。偽指令來定義。n例:例:STRING1 DB ABn STRING1 DW ABn STRING1 DW AB,CD36重復操作符n為一個數據區(qū)的各單元設置相同的初值為一個數據區(qū)的各單元設置相同的初值n格式:格式: 變量名變量名 偽指令助記符偽指令助記符 n DUP(初值,(初值,)n例:例: BW 20 DUP(0) DB 3 DUP(22H,11H,?),?)隨機數隨機數37分析操作符與合成操作符n作為存儲器操作數的標號或變量都有段、偏移作

26、為存儲器操作數的標號或變量都有段、偏移量和類型三種屬性。在程序設計中,有時需要量和類型三種屬性。在程序設計中,有時需要隨時查詢、調用或修改這些屬性,以滿足不同隨時查詢、調用或修改這些屬性,以滿足不同的訪問要求,這些操作由分析和合成操作符來的訪問要求,這些操作由分析和合成操作符來完成。完成。38分析操作符n分析操作符作用于存儲器操作數時返回它們的分析操作符作用于存儲器操作數時返回它們的屬性值。這些操作符是:屬性值。這些操作符是:SEG、OFFSET、TYPE、SIZE、LENGTH等。等。n分析操作符的使用格式:操作符分析操作符的使用格式:操作符 標號或變量標號或變量nSEG和和OFFSET操作

27、符操作符nSEG和和OFFSET分別用以返回標號或變量的段分別用以返回標號或變量的段地址和偏移地址。地址和偏移地址。39分析操作符nTYPE、LENGTH、SIZE操作符操作符nTYPE操作符返回一個數字值,表示存儲器操操作符返回一個數字值,表示存儲器操作數的類型。作數的類型。nLENGTH操作符返回變量用操作符返回變量用DUP重復定義的數重復定義的數據項總數。據項總數。nSIZE操作符則返回操作符則返回TYPE和和LENGTH的乘積,的乘積,表示為變量所分配的字節(jié)存儲單元總數。表示為變量所分配的字節(jié)存儲單元總數。n注意:注意: 要用要用LENGTH操作符返回的存儲區(qū)必操作符返回的存儲區(qū)必須用

28、須用DUP()來定義,否則返回來定義,否則返回1.40合成操作符nPTR操作符操作符nPTR用來臨時指定或修改存儲器操作數的類型用來臨時指定或修改存儲器操作數的類型屬性(保持原有的段屬性和偏移地址屬性),屬性(保持原有的段屬性和偏移地址屬性),如果這些變量或標號已有定義,則原定義的類如果這些變量或標號已有定義,則原定義的類型型 屬性不變。屬性不變。n使用格式:類型使用格式:類型 PTR 標號或變量標號或變量n其中,類型可以是其中,類型可以是BYTE、WORD、DWORD、NEAR或或FAR,它們僅在當前所在的指令中有,它們僅在當前所在的指令中有效。效。41合成操作符(續(xù))nLABEL操作符操作

29、符nLABEL操作符為當前存儲單元定義個指定類型操作符為當前存儲單元定義個指定類型的標號或變量。它常用于定義一個數據塊或標的標號或變量。它常用于定義一個數據塊或標號,使它們具有多重名字或屬性。號,使它們具有多重名字或屬性。n使用格式:標號或變量名使用格式:標號或變量名 LABLE 類型類型n例:例:WBYTE LABEL WORD42合成操作符(續(xù))nTHIS操作符操作符nTHIS操作符與操作符與EQU配合使用,具有配合使用,具有LABEL操操作符的同樣作用。作符的同樣作用。n使用格式:標號或變量名使用格式:標號或變量名 EQU THIS 類型類型n例:例:BWORD EQU THIS BYT

30、E43符號定義偽指令n格式:格式: 符號名符號名 EQUEQU表達式表達式n操作:操作: 用符號名取代后邊的表達式,不可重新定義,即在用符號名取代后邊的表達式,不可重新定義,即在同一源程序中,用同一源程序中,用EQUEQU定義過的符號名不能再賦予不同定義過的符號名不能再賦予不同的值。的值。n例:例: CONSTANT EQUCONSTANT EQU 100100;常量賦予符號名;常量賦予符號名 VAR EQU 30H+99HVAR EQU 30H+99HEQU說明的表達式不占用內存空間說明的表達式不占用內存空間44符號定義偽指令n 等號語句等號語句n格式:符號表達式格式:符號表達式n此語句的功

31、能與此語句的功能與EQU類似,唯一區(qū)別是能對符類似,唯一區(qū)別是能對符號進行再定義。號進行再定義。n例:例:EMP=60n EMP=EMP+1n EMP=123*445段定義偽指令n說明邏輯段的起始和結束;說明邏輯段的起始和結束;n說明不同程序模塊中同類邏輯段之間的說明不同程序模塊中同類邏輯段之間的聯(lián)系形態(tài)聯(lián)系形態(tài)46段定義偽指令段名段名 SEGMENT 定位類型定位類型 組合類型組合類型 類別類別 段名段名 ENDS說明邏輯說明邏輯段的起點段的起點說明不同模塊說明不同模塊中同名段的組中同名段的組和連接方式和連接方式47段定義偽指令SEGMENT/ENDSn格式:格式:n段名段名 SEGMENT

32、定義類型定義類型組合類型組合類型類別名類別名n (段體)(段體)n段名段名 ENDSn功能:指出段名及段的各種屬性,并表示段的開始和功能:指出段名及段的各種屬性,并表示段的開始和結束位置。結束位置。n段名是用戶定義的標識符,是識別段的標志,用來指段名是用戶定義的標識符,是識別段的標志,用來指示匯編程序為該段分配的存儲器起始位置,包含段地示匯編程序為該段分配的存儲器起始位置,包含段地址和段內偏移量兩個屬性。址和段內偏移量兩個屬性。48定義類型n匯編程序對源程序匯編后生成的目標代碼文件匯編程序對源程序匯編后生成的目標代碼文件(.OBJ),其中的段地址和偏移量都未最后確),其中的段地址和偏移量都未最

33、后確定,還需要用鏈接程序(定,還需要用鏈接程序(LINK)把各個模塊)把各個模塊連接起來。定位類型參數用于告訴連接起來。定位類型參數用于告訴LINK程序,程序,鏈接時本段首地址的邊界定位方式。定位有四鏈接時本段首地址的邊界定位方式。定位有四種類型:種類型:nPARA(節(jié)):表示段的起始地址必須為(節(jié)):表示段的起始地址必須為16的的倍數(倍數(XXXX0H),若語句中沒有給出定位類),若語句中沒有給出定位類型,則默認為型,則默認為PARA。49定義類型nPAGE(頁):表示段的起始地址必須為(頁):表示段的起始地址必須為256的倍數(的倍數(XXX00H),也就是頁的起點上。),也就是頁的起點

34、上。nWORD(字)(字):表示段的起始地址必須為偶數,表示段的起始地址必須為偶數,它最適合于安排類型為字的數據段。它最適合于安排類型為字的數據段。nBYTE(字節(jié)):表示該段可以從任意地址開(字節(jié)):表示該段可以從任意地址開始。始。50組合類型n一個匯編語言源程序往往有許多模塊組成,而一個匯編語言源程序往往有許多模塊組成,而每一個模塊常常又有自己的數據段、代碼段和每一個模塊常常又有自己的數據段、代碼段和堆棧段。組合類型用于告訴堆棧段。組合類型用于告訴LINK程序,多個程序,多個模塊鏈接時本段與其他模塊中同名段的組合鏈模塊鏈接時本段與其他模塊中同名段的組合鏈接關系。組合類型共有六種。接關系。組

35、合類型共有六種。nNONE:本段與其他同名段無組合關系,并有自本段與其他同名段無組合關系,并有自己的段起始地址。若語句中沒有指明組合類型,己的段起始地址。若語句中沒有指明組合類型,則默認為則默認為NONE。51組合類型nPUBLIC:在滿足定位類型的前提下,:在滿足定位類型的前提下,LINK程序將其程序將其與其他模塊中說明為與其他模塊中說明為PUBLIC的同名段鄰接在一起,的同名段鄰接在一起,共用一個段地址。共用一個段地址。nSTACK:與:與PUBLIC同樣處理,只是鏈接后的段作為同樣處理,只是鏈接后的段作為堆棧段。堆棧段。nCOMMON:各模塊中由:各模塊中由COMMON方式說明的同名段方

36、式說明的同名段得疊履蓋,有著相同的起始地址。段的長度鄧決于最得疊履蓋,有著相同的起始地址。段的長度鄧決于最長的長的COMMON段的長度。段的內容為所鏈接的最后段的長度。段的內容為所鏈接的最后一個模塊中一個模塊中COMMON段的內容以及沒有覆蓋到的前段的內容以及沒有覆蓋到的前面的面的COMMON段的內容。段的內容。52段寄存器說明偽指令ASSUMEn格式:格式:ASSUME 段寄存器:段名段寄存器:段名,段寄存器:段名,段寄存器:段名,nASSUME偽指令一般出現在代碼段中偽指令一般出現在代碼段中SEGMENT偽指令的偽指令的后面,它設定特定的段寄存器指向特定的段,說明源程序后面,它設定特定的段

37、寄存器指向特定的段,說明源程序中定義的段應由哪個段寄存器去尋址。中定義的段應由哪個段寄存器去尋址。n但是,但是,ASSUME并未真正將段地址裝入相應的段寄存器,并未真正將段地址裝入相應的段寄存器,段寄存器(段寄存器(CS除外)的初值設定還要由程序中的除外)的初值設定還要由程序中的MOV指令指令來完成。來完成。53指定地址偽指令ORG格式格式1:ORG 表達式表達式格式格式2:ORG $+表達式表達式功能:功能:ORG偽指令用來強行指定地址計數器的當偽指令用來強行指定地址計數器的當前值,以改變段內在它以后的代碼或數據塊存前值,以改變段內在它以后的代碼或數據塊存放的偏移地址。放的偏移地址。格式格式

38、1直接將表達式的值送入地址計數器。格式直接將表達式的值送入地址計數器。格式2將匯編將匯編ORG語句前地址計數器的現值語句前地址計數器的現值$加上加上表達式后送入地址計數器。表達式后送入地址計數器。54例nDATA SEGMENTn ORG 10H;在數據段在數據段10H偏移地址處偏移地址處開始存放開始存放20H,30Hn X DB 20H,30Hn ORG $+5n Y DB 40H,50H55段定義偽指令例DATA SEGMENT MEM1 DB 11H,22HMEM2 DW 1234HDATA ENDS56結束偽指令n表示源程序結束表示源程序結束n格式:格式: END 標號標號57一個完整

39、源程序結構例DSEG SEGMENTDATA1 DB 1,2,DATA2 DW 1234HDSEG ENDSESEG SEGMENT DB 20 DUP(?)(?)ESEG ENDSSSEG SEGMENT DB 200 DUP(?)(?)SSEG ENDS58一個完整源程序結構例CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG, ES:ESEG,SS:SSEG START:MOV AX,DSEG MOV DS,AX MOV AX,ESEG MOV ES,AX MOV AX,SSEG MOV SS,AX CSEG ENDS END START源程序源程序 代碼代碼59過程

40、定義偽指令n用于定義一個過程體用于定義一個過程體n格式:格式: 過程名過程名 PROC NEAR / FAR RET 過程名過程名 ENDP過程入口的符號地址過程入口的符號地址60宏命令偽指令n宏命令宏命令源程序中由匯編程序識別的具有源程序中由匯編程序識別的具有 獨立功能的一段程序代碼獨立功能的一段程序代碼n格式:格式: 宏命令名宏命令名 MACRO ENDM宏體宏體61四、DOS功能模塊n用用 INT 21H 軟中斷指令,可調用包含多軟中斷指令,可調用包含多個子功能的功能包個子功能的功能包;n各子功能采用功能號來區(qū)分;各子功能采用功能號來區(qū)分;n功能包括:功能包括:設備管理、設備管理、62D

41、OS功能子程序的基本方法nBIOS/DOS的每個功能子程序都對應著一個子程序文的每個功能子程序都對應著一個子程序文件。使用這些子程序時,用戶不必過問其內部結構和件。使用這些子程序時,用戶不必過問其內部結構和細節(jié),也不必關心硬件細節(jié),也不必關心硬件I/O接口的特性,只要直接用接口的特性,只要直接用一條軟件中斷指令一條軟件中斷指令INT n即可(即可(n為中斷向量號),為中斷向量號),這稱為中斷調用。一般,對功能子程序的調用需要經這稱為中斷調用。一般,對功能子程序的調用需要經過三個步驟:過三個步驟:子程序入口參數關規(guī)定寄存器子程序入口參數關規(guī)定寄存器子程序編號送子程序編號送AH寄存器寄存器發(fā)軟件中

42、斷命令:發(fā)軟件中斷命令:INT n63n其中軟中斷命令其中軟中斷命令INT n中的中的n值因子程序不同值因子程序不同而可能不同,比如而可能不同,比如ROM BIOS的軟中斷類型號的軟中斷類型號有有n=51FH,DOS的軟中斷類型號有的軟中斷類型號有n20H,21H,232AH,2EH,2FH,33H和和67H等幾等幾種情況。種情況。n有的軟中斷命令只對應一個子程序,這時的功有的軟中斷命令只對應一個子程序,這時的功能調用無需上列步驟能調用無需上列步驟2;n有的軟中斷則對應很多子程序,這時的功能調有的軟中斷則對應很多子程序,這時的功能調用就必須指明子程序號。用就必須指明子程序號。64DOS功能模塊

43、調用格式n調用格式:調用格式: MOV AH,功能號,功能號 INT 21H65常用子功能n從鍵盤輸入單字符并顯示;從鍵盤輸入單字符并顯示;n從鍵盤輸入字符串并顯示;從鍵盤輸入字符串并顯示;n在屏幕上顯示單字符;在屏幕上顯示單字符;n在屏幕上顯示字符串。在屏幕上顯示字符串。66從鍵盤輸入單字符并顯示n01號功能調用等待從鍵盤輸入一個字符,調用號功能調用等待從鍵盤輸入一個字符,調用返回時該字符的返回時該字符的ASCII碼值送入碼值送入AL寄存器,同寄存器,同時將該字符顯示在屏幕上。時將該字符顯示在屏幕上。n入口參數:無入口參數:無n調用方法:調用方法: MOV AH,01 INT 21Hn輸入的

44、字符在輸入的字符在AL中中67單字符輸入例GET_KEY: MOVAH,1 INT21H CMPAL,Y JZ YES CMPAL,N JZ NO JNZGET_KEY YES: NO: 交互式應交互式應 答程序答程序68從鍵盤輸入字符串nAH 功能號功能號OAHnDS:DX 字符串在內存中的存放地址字符串在內存中的存放地址nINT 21Hn從鍵盤接收字后串后存入以從鍵盤接收字后串后存入以DS:DX為首地址的內存緩沖區(qū),同時為首地址的內存緩沖區(qū),同時顯示該字符串,輸入過程以回車鍵結束。顯示該字符串,輸入過程以回車鍵結束。n使用時,要求事先在數據段定義一個輸入緩沖區(qū),其中第一個字使用時,要求事先

45、在數據段定義一個輸入緩沖區(qū),其中第一個字節(jié)指出緩沖區(qū)能容納的字符個數,不能為節(jié)指出緩沖區(qū)能容納的字符個數,不能為0.第二個字節(jié)保留用以第二個字節(jié)保留用以存放實際輸入的字符個數。從第三個字節(jié)開始存放從鍵盤上接收存放實際輸入的字符個數。從第三個字節(jié)開始存放從鍵盤上接收的字符。的字符。69定義字符緩沖區(qū)n用戶自定義緩沖區(qū)格式:用戶自定義緩沖區(qū)格式:0DHN1N2整個緩沖區(qū)整個緩沖區(qū)最大鍵入字符數最大鍵入字符數實際鍵入字符數實際鍵入字符數70輸入字符串程序段nDAT1 DB 20,?,?,20 DUP(?)(?)nLEA DX,DAT1 MOV AH,0AH INT 21H71輸入緩沖區(qū)14H ?20個字節(jié)個字節(jié)定義后的輸入緩定義后的輸入緩沖區(qū)初始狀態(tài):沖區(qū)初始狀態(tài):72單字符顯示輸出nAH 功能號功能號O2H或或05HnDL 待輸出字符待輸出字符nINT 21Hn功能:將寄存器功能:將寄存器DL中的單個字符輸出到顯中的單個字符輸出到顯示器或打印機。示器或打印機。n02H為顯示器、為顯示器、05H為打印機為打印機73單字符顯示輸出例nMOVAH,02nMOVDL,41H;A的的ASCII值值nINT21H 執(zhí)行結果:屏幕顯示字符執(zhí)行結果:屏幕顯示字符 A74字符串輸出顯示n入口參數:入口參數:DS:DX指向內存中一個以指向內存中一個以$結尾的字符串(不包括結尾的字符串(

溫馨提示

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

評論

0/150

提交評論