![8匯編語言的程序結構與語句格式_第1頁](http://file4.renrendoc.com/view/b023d1c0fc8809b413167d517832a4be/b023d1c0fc8809b413167d517832a4be1.gif)
![8匯編語言的程序結構與語句格式_第2頁](http://file4.renrendoc.com/view/b023d1c0fc8809b413167d517832a4be/b023d1c0fc8809b413167d517832a4be2.gif)
![8匯編語言的程序結構與語句格式_第3頁](http://file4.renrendoc.com/view/b023d1c0fc8809b413167d517832a4be/b023d1c0fc8809b413167d517832a4be3.gif)
![8匯編語言的程序結構與語句格式_第4頁](http://file4.renrendoc.com/view/b023d1c0fc8809b413167d517832a4be/b023d1c0fc8809b413167d517832a4be4.gif)
![8匯編語言的程序結構與語句格式_第5頁](http://file4.renrendoc.com/view/b023d1c0fc8809b413167d517832a4be/b023d1c0fc8809b413167d517832a4be5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、(一)匯編語言源程序的框架結構一、匯編語言源程序的結構特點 80X86/Pentium匯編語言源程序具有如下結構特點。 (1) 80X86/Pentium匯編語言源程序是由若干個邏輯段所組成的,各個邏輯段的段名和其他屬性由段定義語句來定義和說明。 所謂邏輯段是指程序員使用段定義語句定義的段區(qū)。邏輯段與內存中的實際物理段區(qū)并不是一一對應的,一個物理段可能是由一個邏輯段所構成的,也可能是由幾個邏輯段組合而成的。 80X86/Pentium系列微處理器都采用存儲器分段管理模式,因此其匯編語言源程序邏輯段代碼和數(shù)據(jù)的。1 (2)匯編語言源程序中的邏輯段分為代碼邏輯段、數(shù)據(jù)邏輯段和堆棧邏輯段三種類型。
2、代碼邏輯段 指示匯編程序在內存中開辟一個段區(qū),用以存放該邏輯段內所有匯編指令的機器代碼。 數(shù)據(jù)邏輯段 指示匯編程序在內存中開辟一個段區(qū),用以存放該邏輯段所定義的所有變量以及工作緩沖區(qū)。 堆棧邏輯段 指示匯編程序在內存中開辟一個段區(qū),用以存放堆棧,以支持系統(tǒng)進行堆棧操作(PUSH/POP操作)、過程調用、中斷處理以及在各模塊之間傳遞參數(shù)等等。2 (3)對于8086/8088和工作在實地址模式下的80X86/Pentium系列微處理器,每個物理段的最大長度均為64KB,段內偏移地址的地址范圍為:0000H FFFFH。 當工作在保護模式時,80286允許每個物理段的最大長度為16MB;80386、
3、80486和Pentium系列微處理器允許每個物理段的最大長度為4GB。 (4)在代碼邏輯段的開始處,必須使用ASSUME偽指令來說明各個邏輯段與各個段寄存器之間的對應關系。但是段寄存器與邏輯段之間的真正聯(lián)系還必須要求程序員通過設置各個段寄存器(CS除外)的初值來建立,只有這樣才能真正建立起這些邏輯段的可尋址性。3 (5)8086/8088/80286只有4個段寄存器:CS、DS、ES和SS,在任意時刻,CPU只能通過這4個段寄存器來訪問它們所指向的4個物理段。 然而匯編語言源程序可能包含的邏輯段未必只有4個,在鏈接組合后,這些邏輯段所構成的物理段也可能多于4個,因此用戶程序只能在不同時刻,將
4、段寄存器設置為不同的初值,使之在不同時刻分別指向不同的物理段。 當用戶程序運行起來后,一個段寄存器可以在不同時刻分別指向內存中的幾個物理段,因此一個段寄存器可以對應于源程序中的幾個邏輯段。 80X86/Pentium系列微處理器有6個段寄存器,分別為:代碼段CS、堆棧段SS、數(shù)據(jù)段DS、附加數(shù)據(jù)段ES、FS和GS。4 (6)每個邏輯段由若干行匯編語句組成,每行只能有一條匯編語句。 (7)整個匯編語言源程序必須以END語句來結束。 該語句通知匯編程序停止匯編。END后面的標號START通知匯編程序,將用戶程序設置為從標號START處開始執(zhí)行,即指定操作系統(tǒng)的入口點。 (8)當用戶程序執(zhí)行完畢后,
5、為保證系統(tǒng)流程能自動返回到DOS操作系統(tǒng),每個匯編語言源程序都必須在代碼段中包含返回到DOS操作系統(tǒng)的指令序列。5;打印輸出字符串“THIS IS A SAMPLE PROGRAM”STACKSEGMENT PARA STACK STACKDB 1024 DUP(0)STACKENDSDATASEGMENT MESSAGEDB THIS IS A SAMPLE PROGRAM DB 0DH,0AH,$DATAENDS6CODESEGMENTASSUME CS:CODE, DS:DATA, SS:STACKSTART: MOVAX, DATA ;建立DATA數(shù)據(jù)段的可尋址性MOVDS, AXLE
6、ABX, MESSAGELOOP1:CMPBYTE PTR BX, $JELOOP2MOVAH, 5 ;功能號為05H的DOS系統(tǒng)功能調用,MOVDL, BX ;其作用是在顯示器上輸出字符(DL)INT21HINCBXJMPLOOP1LOOP2:MOVAH, 4CH ;功能號為4cH的DOS系統(tǒng)功能調用,INT21H ;其作用是返回DOSCODEENDSEND START7二、源程序與PC DOS的接口 任何程序都是在操作系統(tǒng)的環(huán)境下運行的,用戶程序啟動后,CPU的執(zhí)行流程,即CPU控制,將從操作系統(tǒng)轉移到用戶程序。因此在編寫用戶程序時,程序員必須了解用戶程序與操作系統(tǒng)的接口。 本課程講解的匯
7、編語言源程序將在PC DOS環(huán)境下運行,因此必須了解匯編語言與PC DOS系統(tǒng)的接口。8 在DOS狀態(tài)下,當執(zhí)行一條外部命令或執(zhí)行一個用戶程序時,DOS系統(tǒng)將依次完成以下工作。 (1)建立并填充程序段前綴區(qū)PSP 首先,在可用內存最低地址區(qū)的小段邊界上,為用戶程序建立一張表,稱為程序段前綴區(qū)PSP ,其長度為256個字節(jié)。 其次,將有關用戶程序的相關信息填充到程序段前綴區(qū)PSP中。其中, 在PSP的第一個字節(jié)處(偏移地址0000H)存放一條INT 20H軟中斷指令。 INT 20H的中斷服務程序由PC DOS提供,其功能是使系統(tǒng)返回到DOS管理狀態(tài)。因此程序員可以這樣來組織用戶程序:當CPU執(zhí)
8、行完用戶程序后,能夠跳轉到PSP開始處,去執(zhí)行INT 20H指令。9 (2)定位用戶程序并初始化各寄存器 首先,將整個用戶程序定位于PSP正下方,緊跟在PSP后面。 其次,設置各寄存器的初值如下。 DS和ES:指向PSP的第一個字節(jié),即PSP段區(qū)的段地址。 SS和SP:SS被設置為堆棧段的段基址,SP指向堆棧的棧底(取決于堆棧的長度)。 CS 和IP:CS被設置為用戶程序代碼段的段基址,IP被設置為代碼段中第一條被執(zhí)行指令的段內偏移地址。10 (3)執(zhí)行用戶程序 從(CS):(IP)位置開始,執(zhí)行用戶程序。 DOS系統(tǒng)加載用戶程序文件.exe之后,在執(zhí)行該程序之前,各個寄存器和內存的狀態(tài)如下圖
9、所示。11SS00FFH0000H程序段前綴區(qū)PSPINT 20H 指令低字節(jié)INT 20H 指令高字節(jié)PSP最后一個字節(jié)堆棧區(qū)第一個字節(jié)(用戶程序第一個字節(jié))堆棧區(qū)最后一個字節(jié)數(shù)據(jù)段區(qū)第一個字節(jié)數(shù)據(jù)段區(qū)最后一個字節(jié)SP棧底用戶程序第一條指令用戶程序第一條被執(zhí)行的指令用戶程序最后一條指令IPCS用戶堆棧段區(qū)用戶數(shù)據(jù)段區(qū)用戶代碼段區(qū)用戶程序區(qū)DS、ES可用內存最低地址區(qū)的小段邊界12 通過以上討論可知,為保證CPU在執(zhí)行完用戶程序后能自動返回到DOS,在用戶程序中,程序員可以采取以下兩項措施。 (1)將用戶程序的主程序定義為FAR過程,該過程就是用戶程序的入口點,其最后一條指令為RET。 (2)
10、在主程序的開始處,將PSP段區(qū)的段基址DS/ES和數(shù)值0000H,即INT 20H指令的全地址,分別壓入堆棧保存,見以下三條指令。PUSHDS;保護PSP段基址MOVAX,0PUSHAX;保護INT 20H指令的段內偏移地址 執(zhí)行這三條指令后,堆棧中就保存了程序段前綴區(qū)中的INT 20H指令的全地址。 當CPU執(zhí)行到主程序的最后一條指令RET時,由于該過程被定義為FAR,RET指令將從堆棧中分別彈出偏移量0和PSP段基址給IP和CS,于是CPU隨后將要執(zhí)行的下一條指令就是INT 20H。執(zhí)行這條指令后,程序控制就返回到DOS。 以上這三條指令保證了程序控制能正確返回DOS,常稱為標準序。13采
11、取以上兩項措施后,匯編語言源程序的基本結構如下例所示。;打印輸出字符串“THIS IS A SAMPLE PROGRAM”STACKSEGMENT PARA STACK STACKDB 1024 DUP(0)STACKENDSDATASEGMENT MESSAGEDB THIS IS A SAMPLE PROGRAM. DB 0DH,0AH,$DATAENDS14CODESEGMENTASSUME CS:CODE, DS:DATA, SS:STACKSTARTPROCFARPUSHDS ;返回DOS操作系統(tǒng)的標準序MOVAX, 0PUSHAXMOVAX, DATA ;建立DATA數(shù)據(jù)段的可尋址
12、性MOVDS, AXLEABX, MESSAGELOOP1:CMPBYTE PTR BX, $JELOOP2MOVAH, 5 ;功能號為05H的DOS系統(tǒng)功能調用,MOVDL, BX ;其作用是在顯示器上輸出字符(DL)INT21HINCBXJMPLOOP1LOOP2:RETSTARTENDPCODEENDSEND START15 說明: (1)CPU開始執(zhí)行用戶程序時,DS和ES所指向的是PSP段,沒有指向用戶程序的數(shù)據(jù)段。因此在標準序后,應該重新設置DS或ES,使它們指向用戶程序的數(shù)據(jù)段。 MOV AX, DATA ;建立DATA數(shù)據(jù)段的可尋址性 MOV DS, AX (2)返回DOS的非
13、標準方法 不用定義主程序為FAR過程,去掉標準序部分,只需要在代碼段結束之前增加以下兩句。 MOV AH,4CH INT 21H程序執(zhí)行完畢后,系統(tǒng)同樣可以正常返回到DOS狀態(tài),如下例所示。16;打印輸出字符串“THIS IS A SAMPLE PROGRAM”STACKSEGMENT PARA STACK STACKDB 1024 DUP(0)STACKENDSDATASEGMENTMESSAGEDB THIS IS A SAMPLE PROGRAM. DB 0DH,0AH,$DATAENDSCODESEGMENTASSUME CS:CODE, DS:DATA, SS:STACKSTART:
14、 MOVAX, DATA;建立DATA數(shù)據(jù)段的可尋址性MOVDS, AXLEABX, MESSAGELOOP1:CMPBYTE PTR BX, $JELOOP2MOVAH, 5;功能號為05H的DOS系統(tǒng)功能調用,其作用是在顯示器MOVDL, BX;上輸出字符(DL)INT21HINCBXJMPLOOP1LOOP2:MOVAH, 4CH;功能號為4cH的DOS系統(tǒng)功能調用,其作用是返回DOSINT21HCODEENDSEND START17(二)匯編語言的語句 語句是匯編語言源程序的基本組成單位,匯編語言源程序本身就是一個語句序列。一條語句規(guī)定了一個基本操作要求,而一個語句序列則完成一個特定的
15、任務。一、語句的種類 80X86/Pentium匯編語言擁有以下三種類型的語句。 指令性語句 由一條CPU指令所構成的語句,指示匯編程序把該語句翻譯成對應的機器目標代碼。 指令性語句所指定的操作是由CPU在執(zhí)行程序時來完成的。例:MOV DS,AX;機器目標代碼為:8EH D8H18 偽指令語句 為匯編程序提供匯編信息,并指示匯編程序執(zhí)行有關操作的語句。 在匯編過程中,匯編程序將根據(jù)偽指令語句所指示的操作和提供的匯編信息,執(zhí)行相應的操作,例如定義符號、分配存儲單元、程序分段等等。 因此偽指令語句所指定的操作是在匯編過程中,由匯編程序來完成的,偽指令語句并不產(chǎn)生機器目標代碼。例1: SEGMEN
16、T/ENDS 該語句將源程序的分段信息(段名、段屬性等)提供給匯編程序,并指示匯編程序進行有關分段操作。19例2: MESSAGE DB THIS IS A SAMPLE PROGRAM 該語句定義了一個字節(jié)類型數(shù)組變量MESSAGE及其初始值。 匯編時,匯編程序首先定義一個名為MESSAGE的字節(jié)類型數(shù)組變量,并為其分配一個數(shù)據(jù)塊,然后把字符串常量THIS IS A SAMPLE PROGRAM存放到該數(shù)據(jù)塊中。 宏指令語句 由宏指令組成的語句。20二、語句的格式 指令性語句和偽指令語句的格式是類似的,均由4個字段組成。 指令性語句: 標號: 前綴 指令助記符 操作數(shù),操作數(shù), ;注釋 偽指
17、令語句: 名字 偽指令定義符 操作數(shù),操作數(shù), ;注釋 標號 表示CPU指令所在存儲單元的地址,它是一種符號地址。在程序中,標號常常作為控制轉移類指令的轉移目標地址。 名字 偽指令語句所定義的常量名、變量名、過程名、段名和宏指令名等。21 標號和名字的命名方法必須符合匯編語言標識符的定義規(guī)則如下。 以字母開頭,由字母(az或AZ,不區(qū)分大小寫)、數(shù)字(09)和部分字符(?、$ 和 下劃線_)組成,字符串長度不超過31個。 不能是匯編語言的保留字,例如:AX,AH,AL等。 指令助記符和偽指令定義符 指令助記符表示指令性語句的操作性質;偽指令定義符表示偽指令語句的偽操作功能,該字段是語句中唯一不
18、可缺省的。 指令助記符前面可以根據(jù)需要加前綴。在80X86/Pentium指令系統(tǒng)中,允許與指令助記符一起出現(xiàn)的前綴有重復前綴REP、REPE、REPNE等等。 操作數(shù) 指令性語句的操作數(shù)部分提供該指令的操作對象。該部分說明要處理的數(shù)據(jù)存放在什么位置以及如何訪問它。 偽指令語句操作數(shù)部分的格式和含義,隨偽操作命令的不同而不同。 注釋 注釋由分號“;”開始,用來對一條語句或一段程序進行說明。匯編程序并不處理該部分。22三、語句中的操作數(shù) 操作數(shù)分為以下4類。 1)常量操作數(shù) 在匯編時其值已經(jīng)確定,且在整個程序運行期間不變化的量稱為常量。常見的常量形式有以下幾種。 整型數(shù)值常量 整型數(shù)值常量就是一
19、個整型數(shù)值,我們可以使用各種進位計數(shù)制形式來表示它。 在一個整型數(shù)值的后面分別加上字母B、D、Q和H,就表示該數(shù)分別為二進制、十進制、八進制和十六進制整型數(shù)值常量。 十進制數(shù)后面的D可以省略,十六進制數(shù)的第一個數(shù)字必須是09。例如: 十進制數(shù)9可分別表示為以下五種形式: 1001B、9D、9、11Q、09H 十六進制數(shù)ABH也可表示為以下五種形式: 10101011B、171D、171、253Q、0ABH23 字符串常量 就是用單引號括起來的一個或多個字符。 字符串常量的數(shù)值就是相應字符的ASCII碼序列。例如: ABCDE = 41H 42H 43H 44H 45H 12345 = 31H
20、32H 33H 34H 35H 5= 35H 因此,字符串常量與整型數(shù)值常量之間可以交替使用。 符號常量 符號常量是指使用偽指令EQU或 = 定義的常量標識符。例如: PORTEQU80H TEMP =0242)寄存器操作數(shù)程序可見的寄存器名,例如 AX,BX,CX,DX 等等3)標號、過程名和變量 標號存放CPU指令的內存存儲區(qū)的首字節(jié)單元的符號地址。 過程名存放過程代碼的內存存儲區(qū)的首字節(jié)單元的符號地址。在匯編語言程序中,標號和過程名都是代碼段內的符號地址。25DATA12000H 變量在匯編時其值不確定,在程序運行期間其值不斷變化的量稱為變量。在匯編語言中,每一個變量都被分配一個存儲單元
21、,變量的值被存放在該存儲單元中;變量的地址就是該存儲單元的地址。為便于在程序中訪問一個變量,我們常常為該變量起一個名字,稱為變量名,在匯編程序中,變量常常以變量名的形式出現(xiàn)。我們知道,CPU只能通過存儲單元的地址來訪問存儲單元的內容,因此CPU也只能通過變量的地址來訪問變量的內容。因此變量名本質上就是分配給該變量的存儲單元的符號地址,該地址可以在數(shù)據(jù)段、堆棧段或者代碼段中。78H56H變量名: DATA1變量DATA1的值 :12345678H變量DATA1的地址:(DS:2000H)MOV AX,DATA1;(AX)=5678H26 標號、過程名和變量的屬性標號是存放CPU指令的存儲單元的符
22、號地址,過程名是存放過程代碼的存儲區(qū)首字節(jié)單元的符號地址,變量名則是存放變量內容的存儲單元的符號地址??梢姡瑯颂?、過程名和變量名都與存儲器地址相關聯(lián),因此它們都具有以下三種屬性。段屬性標號、過程名和變量名所標識的存儲單元的段基址。偏移量屬性標號、過程名和變量名所標識的存儲單元的段內偏移地址。27類型屬性變量的類型是指存放變量內容的存儲單元的字節(jié)大小,共有以下六種。BYTE:字節(jié)WORD:字DWORD:雙字QWORD:四字FWORD:六字節(jié)TWORD:十字節(jié)標號和過程名的類型是指標號和過程名被引用的方式,共有以下兩種。NEAR類型:標號或過程名在本段內被引用。FAR類型 :標號或過程名被其他段所
23、引用。284)表達式操作數(shù)所謂表達式是指由常量、寄存器名、標號或變量名與運算符相組合的序列。在匯編期間,匯編程序將按照一定的優(yōu)先規(guī)則對表達式進行處理,最后將得到一個數(shù)值、一個地址值、或相應尋址方式的機器代碼。 根據(jù)最后處理結果的類型,表達式分為兩種類型:數(shù)值表達式和地址表達式。29數(shù)值表達式最后處理結果為數(shù)值的表達式。數(shù)值表達式通常是由常量操作數(shù)與算術運算符、邏輯運算符或關系運算符連接而成。例如: MOV AX,10 * 20STRINGDB A+ 20H匯編時,匯編程序將對數(shù)值表達式進行處理,最后得到一個數(shù)值,該數(shù)值可作為指令中的立即操作數(shù)或某存儲單元的初值。30地址表達式最后處理結果為地址
24、值或相應尋址方式的機器代碼的表達式,通常由常量、變量名、標號或寄存器名與運算符連接而成。地址表達式主要用來表示指令性語句中的操作數(shù)地址或轉移目標地址。例如:JMP 2000H:0100HMOVAX,STRING + 1JMP NEXTMOVAX,BXMOVAX,ES: SI + 4 當?shù)刂繁磉_式的值表示存儲器地址時,該表達式也具有段屬性、偏移量屬性和類型屬性。31 運算符 MASM宏匯編有六種運算符:算術運算符、邏輯運算符、移位運算符、關系運算符、分析運算符和合成運算符。 算術運算符 加 +、減 -、乘 *、除 /、求余MOD。 算術運算符可用于數(shù)值表達式中,運算結果是一個數(shù)值,例如:xdb(19+(20-10*2)/(2*3+1)ydb(19+(20-10*2)mod(2*3+1) 算術運算符也可用于地址表達式中,但表達式的運算結果必須要有明確的物理意義才有效。例如:兩個地址的相加、相乘和相除都是無意義的。32 算術運算符應用于地址表達式的常見形式如下: 標號或變量 數(shù)值表達式 這個地址表達式的運算結果仍然為一個標號或變量,其類型屬性和段基址屬性都不變,但其偏移量產(chǎn)生一個位移。 例如: 設有數(shù)組ARRAY定義如下。 ARRAR DW 1,2,3,4,5,6,7 則地址表達式(ARRAR +
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 腎內分泌科護理工作總結
- 2025年全球及中國醫(yī)用全自動凝血分析儀行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025年全球及中國企業(yè)級機械硬盤和固態(tài)硬盤行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025-2030全球3D晶體管行業(yè)調研及趨勢分析報告
- 2025-2030全球立式不銹鋼離心泵行業(yè)調研及趨勢分析報告
- 2025-2030全球汽車電池試驗箱行業(yè)調研及趨勢分析報告
- 2025年全球及中國游戲人工智能NPC行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025-2030全球自動藥敏分析儀行業(yè)調研及趨勢分析報告
- 2025年全球及中國無線藍牙肉類溫度計行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025年全球及中國固定橋式坐標測量機行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025-2030年中國清真食品行業(yè)運行狀況及投資發(fā)展前景預測報告
- 廣東省茂名市電白區(qū)2024-2025學年七年級上學期期末質量監(jiān)測生物學試卷(含答案)
- 《教育強國建設規(guī)劃綱要(2024-2035年)》全文
- 山東省濱州市2024-2025學年高二上學期期末地理試題( 含答案)
- 2025年河南洛陽市孟津區(qū)引進研究生學歷人才50人歷年高頻重點提升(共500題)附帶答案詳解
- 2025年度軍人軍事秘密保護保密協(xié)議與信息安全風險評估合同3篇
- 數(shù)字化轉型中的職業(yè)能力重構
- 運用PDCA降低住院患者跌倒-墜床發(fā)生率
- 2025屆高中數(shù)學一輪復習專練:橢圓(含解析)
- 立春氣象與生活影響模板
- 中國服裝零售行業(yè)發(fā)展環(huán)境、市場運行格局及前景研究報告-智研咨詢(2025版)
評論
0/150
提交評論