8匯編語(yǔ)言的程序結(jié)構(gòu)與語(yǔ)句格式_第1頁(yè)
8匯編語(yǔ)言的程序結(jié)構(gòu)與語(yǔ)句格式_第2頁(yè)
8匯編語(yǔ)言的程序結(jié)構(gòu)與語(yǔ)句格式_第3頁(yè)
8匯編語(yǔ)言的程序結(jié)構(gòu)與語(yǔ)句格式_第4頁(yè)
8匯編語(yǔ)言的程序結(jié)構(gòu)與語(yǔ)句格式_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、(一)匯編語(yǔ)言源程序的框架結(jié)構(gòu)一、匯編語(yǔ)言源程序的結(jié)構(gòu)特點(diǎn) 80X86/Pentium匯編語(yǔ)言源程序具有如下結(jié)構(gòu)特點(diǎn)。 (1) 80X86/Pentium匯編語(yǔ)言源程序是由若干個(gè)邏輯段所組成的,各個(gè)邏輯段的段名和其他屬性由段定義語(yǔ)句來(lái)定義和說(shuō)明。 所謂邏輯段是指程序員使用段定義語(yǔ)句定義的段區(qū)。邏輯段與內(nèi)存中的實(shí)際物理段區(qū)并不是一一對(duì)應(yīng)的,一個(gè)物理段可能是由一個(gè)邏輯段所構(gòu)成的,也可能是由幾個(gè)邏輯段組合而成的。 80X86/Pentium系列微處理器都采用存儲(chǔ)器分段管理模式,因此其匯編語(yǔ)言源程序邏輯段代碼和數(shù)據(jù)的。1 (2)匯編語(yǔ)言源程序中的邏輯段分為代碼邏輯段、數(shù)據(jù)邏輯段和堆棧邏輯段三種類型。

2、代碼邏輯段 指示匯編程序在內(nèi)存中開辟一個(gè)段區(qū),用以存放該邏輯段內(nèi)所有匯編指令的機(jī)器代碼。 數(shù)據(jù)邏輯段 指示匯編程序在內(nèi)存中開辟一個(gè)段區(qū),用以存放該邏輯段所定義的所有變量以及工作緩沖區(qū)。 堆棧邏輯段 指示匯編程序在內(nèi)存中開辟一個(gè)段區(qū),用以存放堆棧,以支持系統(tǒng)進(jìn)行堆棧操作(PUSH/POP操作)、過(guò)程調(diào)用、中斷處理以及在各模塊之間傳遞參數(shù)等等。2 (3)對(duì)于8086/8088和工作在實(shí)地址模式下的80X86/Pentium系列微處理器,每個(gè)物理段的最大長(zhǎng)度均為64KB,段內(nèi)偏移地址的地址范圍為:0000H FFFFH。 當(dāng)工作在保護(hù)模式時(shí),80286允許每個(gè)物理段的最大長(zhǎng)度為16MB;80386、

3、80486和Pentium系列微處理器允許每個(gè)物理段的最大長(zhǎng)度為4GB。 (4)在代碼邏輯段的開始處,必須使用ASSUME偽指令來(lái)說(shuō)明各個(gè)邏輯段與各個(gè)段寄存器之間的對(duì)應(yīng)關(guān)系。但是段寄存器與邏輯段之間的真正聯(lián)系還必須要求程序員通過(guò)設(shè)置各個(gè)段寄存器(CS除外)的初值來(lái)建立,只有這樣才能真正建立起這些邏輯段的可尋址性。3 (5)8086/8088/80286只有4個(gè)段寄存器:CS、DS、ES和SS,在任意時(shí)刻,CPU只能通過(guò)這4個(gè)段寄存器來(lái)訪問(wèn)它們所指向的4個(gè)物理段。 然而匯編語(yǔ)言源程序可能包含的邏輯段未必只有4個(gè),在鏈接組合后,這些邏輯段所構(gòu)成的物理段也可能多于4個(gè),因此用戶程序只能在不同時(shí)刻,將

4、段寄存器設(shè)置為不同的初值,使之在不同時(shí)刻分別指向不同的物理段。 當(dāng)用戶程序運(yùn)行起來(lái)后,一個(gè)段寄存器可以在不同時(shí)刻分別指向內(nèi)存中的幾個(gè)物理段,因此一個(gè)段寄存器可以對(duì)應(yīng)于源程序中的幾個(gè)邏輯段。 80X86/Pentium系列微處理器有6個(gè)段寄存器,分別為:代碼段CS、堆棧段SS、數(shù)據(jù)段DS、附加數(shù)據(jù)段ES、FS和GS。4 (6)每個(gè)邏輯段由若干行匯編語(yǔ)句組成,每行只能有一條匯編語(yǔ)句。 (7)整個(gè)匯編語(yǔ)言源程序必須以END語(yǔ)句來(lái)結(jié)束。 該語(yǔ)句通知匯編程序停止匯編。END后面的標(biāo)號(hào)START通知匯編程序,將用戶程序設(shè)置為從標(biāo)號(hào)START處開始執(zhí)行,即指定操作系統(tǒng)的入口點(diǎn)。 (8)當(dāng)用戶程序執(zhí)行完畢后,

5、為保證系統(tǒng)流程能自動(dòng)返回到DOS操作系統(tǒng),每個(gè)匯編語(yǔ)言源程序都必須在代碼段中包含返回到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 ;功能號(hào)為05H的DOS系統(tǒng)功能調(diào)用,MOVDL, BX ;其作用是在顯示器上輸出字符(DL)INT21HINCBXJMPLOOP1LOOP2:MOVAH, 4CH ;功能號(hào)為4cH的DOS系統(tǒng)功能調(diào)用,INT21H ;其作用是返回DOSCODEENDSEND START7二、源程序與PC DOS的接口 任何程序都是在操作系統(tǒng)的環(huán)境下運(yùn)行的,用戶程序啟動(dòng)后,CPU的執(zhí)行流程,即CPU控制,將從操作系統(tǒng)轉(zhuǎn)移到用戶程序。因此在編寫用戶程序時(shí),程序員必須了解用戶程序與操作系統(tǒng)的接口。 本課程講解的匯

7、編語(yǔ)言源程序?qū)⒃赑C DOS環(huán)境下運(yùn)行,因此必須了解匯編語(yǔ)言與PC DOS系統(tǒng)的接口。8 在DOS狀態(tài)下,當(dāng)執(zhí)行一條外部命令或執(zhí)行一個(gè)用戶程序時(shí),DOS系統(tǒng)將依次完成以下工作。 (1)建立并填充程序段前綴區(qū)PSP 首先,在可用內(nèi)存最低地址區(qū)的小段邊界上,為用戶程序建立一張表,稱為程序段前綴區(qū)PSP ,其長(zhǎng)度為256個(gè)字節(jié)。 其次,將有關(guān)用戶程序的相關(guān)信息填充到程序段前綴區(qū)PSP中。其中, 在PSP的第一個(gè)字節(jié)處(偏移地址0000H)存放一條INT 20H軟中斷指令。 INT 20H的中斷服務(wù)程序由PC DOS提供,其功能是使系統(tǒng)返回到DOS管理狀態(tài)。因此程序員可以這樣來(lái)組織用戶程序:當(dāng)CPU執(zhí)

8、行完用戶程序后,能夠跳轉(zhuǎn)到PSP開始處,去執(zhí)行INT 20H指令。9 (2)定位用戶程序并初始化各寄存器 首先,將整個(gè)用戶程序定位于PSP正下方,緊跟在PSP后面。 其次,設(shè)置各寄存器的初值如下。 DS和ES:指向PSP的第一個(gè)字節(jié),即PSP段區(qū)的段地址。 SS和SP:SS被設(shè)置為堆棧段的段基址,SP指向堆棧的棧底(取決于堆棧的長(zhǎng)度)。 CS 和IP:CS被設(shè)置為用戶程序代碼段的段基址,IP被設(shè)置為代碼段中第一條被執(zhí)行指令的段內(nèi)偏移地址。10 (3)執(zhí)行用戶程序 從(CS):(IP)位置開始,執(zhí)行用戶程序。 DOS系統(tǒng)加載用戶程序文件.exe之后,在執(zhí)行該程序之前,各個(gè)寄存器和內(nèi)存的狀態(tài)如下圖

9、所示。11SS00FFH0000H程序段前綴區(qū)PSPINT 20H 指令低字節(jié)INT 20H 指令高字節(jié)PSP最后一個(gè)字節(jié)堆棧區(qū)第一個(gè)字節(jié)(用戶程序第一個(gè)字節(jié))堆棧區(qū)最后一個(gè)字節(jié)數(shù)據(jù)段區(qū)第一個(gè)字節(jié)數(shù)據(jù)段區(qū)最后一個(gè)字節(jié)SP棧底用戶程序第一條指令用戶程序第一條被執(zhí)行的指令用戶程序最后一條指令I(lǐng)PCS用戶堆棧段區(qū)用戶數(shù)據(jù)段區(qū)用戶代碼段區(qū)用戶程序區(qū)DS、ES可用內(nèi)存最低地址區(qū)的小段邊界12 通過(guò)以上討論可知,為保證CPU在執(zhí)行完用戶程序后能自動(dòng)返回到DOS,在用戶程序中,程序員可以采取以下兩項(xiàng)措施。 (1)將用戶程序的主程序定義為FAR過(guò)程,該過(guò)程就是用戶程序的入口點(diǎn),其最后一條指令為RET。 (2)

10、在主程序的開始處,將PSP段區(qū)的段基址DS/ES和數(shù)值0000H,即INT 20H指令的全地址,分別壓入堆棧保存,見(jiàn)以下三條指令。PUSHDS;保護(hù)PSP段基址MOVAX,0PUSHAX;保護(hù)INT 20H指令的段內(nèi)偏移地址 執(zhí)行這三條指令后,堆棧中就保存了程序段前綴區(qū)中的INT 20H指令的全地址。 當(dāng)CPU執(zhí)行到主程序的最后一條指令RET時(shí),由于該過(guò)程被定義為FAR,RET指令將從堆棧中分別彈出偏移量0和PSP段基址給IP和CS,于是CPU隨后將要執(zhí)行的下一條指令就是INT 20H。執(zhí)行這條指令后,程序控制就返回到DOS。 以上這三條指令保證了程序控制能正確返回DOS,常稱為標(biāo)準(zhǔn)序。13采

11、取以上兩項(xiàng)措施后,匯編語(yǔ)言源程序的基本結(jié)構(gòu)如下例所示。;打印輸出字符串“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)的標(biāo)準(zhǔn)序MOVAX, 0PUSHAXMOVAX, DATA ;建立DATA數(shù)據(jù)段的可尋址

12、性MOVDS, AXLEABX, MESSAGELOOP1:CMPBYTE PTR BX, $JELOOP2MOVAH, 5 ;功能號(hào)為05H的DOS系統(tǒng)功能調(diào)用,MOVDL, BX ;其作用是在顯示器上輸出字符(DL)INT21HINCBXJMPLOOP1LOOP2:RETSTARTENDPCODEENDSEND START15 說(shuō)明: (1)CPU開始執(zhí)行用戶程序時(shí),DS和ES所指向的是PSP段,沒(méi)有指向用戶程序的數(shù)據(jù)段。因此在標(biāo)準(zhǔn)序后,應(yīng)該重新設(shè)置DS或ES,使它們指向用戶程序的數(shù)據(jù)段。 MOV AX, DATA ;建立DATA數(shù)據(jù)段的可尋址性 MOV DS, AX (2)返回DOS的非

13、標(biāo)準(zhǔn)方法 不用定義主程序?yàn)镕AR過(guò)程,去掉標(biāo)準(zhǔn)序部分,只需要在代碼段結(jié)束之前增加以下兩句。 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;功能號(hào)為05H的DOS系統(tǒng)功能調(diào)用,其作用是在顯示器MOVDL, BX;上輸出字符(DL)INT21HINCBXJMPLOOP1LOOP2:MOVAH, 4CH;功能號(hào)為4cH的DOS系統(tǒng)功能調(diào)用,其作用是返回DOSINT21HCODEENDSEND START17(二)匯編語(yǔ)言的語(yǔ)句 語(yǔ)句是匯編語(yǔ)言源程序的基本組成單位,匯編語(yǔ)言源程序本身就是一個(gè)語(yǔ)句序列。一條語(yǔ)句規(guī)定了一個(gè)基本操作要求,而一個(gè)語(yǔ)句序列則完成一個(gè)特定的

15、任務(wù)。一、語(yǔ)句的種類 80X86/Pentium匯編語(yǔ)言擁有以下三種類型的語(yǔ)句。 指令性語(yǔ)句 由一條CPU指令所構(gòu)成的語(yǔ)句,指示匯編程序把該語(yǔ)句翻譯成對(duì)應(yīng)的機(jī)器目標(biāo)代碼。 指令性語(yǔ)句所指定的操作是由CPU在執(zhí)行程序時(shí)來(lái)完成的。例:MOV DS,AX;機(jī)器目標(biāo)代碼為:8EH D8H18 偽指令語(yǔ)句 為匯編程序提供匯編信息,并指示匯編程序執(zhí)行有關(guān)操作的語(yǔ)句。 在匯編過(guò)程中,匯編程序?qū)⒏鶕?jù)偽指令語(yǔ)句所指示的操作和提供的匯編信息,執(zhí)行相應(yīng)的操作,例如定義符號(hào)、分配存儲(chǔ)單元、程序分段等等。 因此偽指令語(yǔ)句所指定的操作是在匯編過(guò)程中,由匯編程序來(lái)完成的,偽指令語(yǔ)句并不產(chǎn)生機(jī)器目標(biāo)代碼。例1: SEGMEN

16、T/ENDS 該語(yǔ)句將源程序的分段信息(段名、段屬性等)提供給匯編程序,并指示匯編程序進(jìn)行有關(guān)分段操作。19例2: MESSAGE DB THIS IS A SAMPLE PROGRAM 該語(yǔ)句定義了一個(gè)字節(jié)類型數(shù)組變量MESSAGE及其初始值。 匯編時(shí),匯編程序首先定義一個(gè)名為MESSAGE的字節(jié)類型數(shù)組變量,并為其分配一個(gè)數(shù)據(jù)塊,然后把字符串常量THIS IS A SAMPLE PROGRAM存放到該數(shù)據(jù)塊中。 宏指令語(yǔ)句 由宏指令組成的語(yǔ)句。20二、語(yǔ)句的格式 指令性語(yǔ)句和偽指令語(yǔ)句的格式是類似的,均由4個(gè)字段組成。 指令性語(yǔ)句: 標(biāo)號(hào): 前綴 指令助記符 操作數(shù),操作數(shù), ;注釋 偽指

17、令語(yǔ)句: 名字 偽指令定義符 操作數(shù),操作數(shù), ;注釋 標(biāo)號(hào) 表示CPU指令所在存儲(chǔ)單元的地址,它是一種符號(hào)地址。在程序中,標(biāo)號(hào)常常作為控制轉(zhuǎn)移類指令的轉(zhuǎn)移目標(biāo)地址。 名字 偽指令語(yǔ)句所定義的常量名、變量名、過(guò)程名、段名和宏指令名等。21 標(biāo)號(hào)和名字的命名方法必須符合匯編語(yǔ)言標(biāo)識(shí)符的定義規(guī)則如下。 以字母開頭,由字母(az或AZ,不區(qū)分大小寫)、數(shù)字(09)和部分字符(?、$ 和 下劃線_)組成,字符串長(zhǎng)度不超過(guò)31個(gè)。 不能是匯編語(yǔ)言的保留字,例如:AX,AH,AL等。 指令助記符和偽指令定義符 指令助記符表示指令性語(yǔ)句的操作性質(zhì);偽指令定義符表示偽指令語(yǔ)句的偽操作功能,該字段是語(yǔ)句中唯一不

18、可缺省的。 指令助記符前面可以根據(jù)需要加前綴。在80X86/Pentium指令系統(tǒng)中,允許與指令助記符一起出現(xiàn)的前綴有重復(fù)前綴REP、REPE、REPNE等等。 操作數(shù) 指令性語(yǔ)句的操作數(shù)部分提供該指令的操作對(duì)象。該部分說(shuō)明要處理的數(shù)據(jù)存放在什么位置以及如何訪問(wèn)它。 偽指令語(yǔ)句操作數(shù)部分的格式和含義,隨偽操作命令的不同而不同。 注釋 注釋由分號(hào)“;”開始,用來(lái)對(duì)一條語(yǔ)句或一段程序進(jìn)行說(shuō)明。匯編程序并不處理該部分。22三、語(yǔ)句中的操作數(shù) 操作數(shù)分為以下4類。 1)常量操作數(shù) 在匯編時(shí)其值已經(jīng)確定,且在整個(gè)程序運(yùn)行期間不變化的量稱為常量。常見(jiàn)的常量形式有以下幾種。 整型數(shù)值常量 整型數(shù)值常量就是一

19、個(gè)整型數(shù)值,我們可以使用各種進(jìn)位計(jì)數(shù)制形式來(lái)表示它。 在一個(gè)整型數(shù)值的后面分別加上字母B、D、Q和H,就表示該數(shù)分別為二進(jìn)制、十進(jìn)制、八進(jìn)制和十六進(jìn)制整型數(shù)值常量。 十進(jìn)制數(shù)后面的D可以省略,十六進(jìn)制數(shù)的第一個(gè)數(shù)字必須是09。例如: 十進(jìn)制數(shù)9可分別表示為以下五種形式: 1001B、9D、9、11Q、09H 十六進(jìn)制數(shù)ABH也可表示為以下五種形式: 10101011B、171D、171、253Q、0ABH23 字符串常量 就是用單引號(hào)括起來(lái)的一個(gè)或多個(gè)字符。 字符串常量的數(shù)值就是相應(yīng)字符的ASCII碼序列。例如: ABCDE = 41H 42H 43H 44H 45H 12345 = 31H

20、32H 33H 34H 35H 5= 35H 因此,字符串常量與整型數(shù)值常量之間可以交替使用。 符號(hào)常量 符號(hào)常量是指使用偽指令EQU或 = 定義的常量標(biāo)識(shí)符。例如: PORTEQU80H TEMP =0242)寄存器操作數(shù)程序可見(jiàn)的寄存器名,例如 AX,BX,CX,DX 等等3)標(biāo)號(hào)、過(guò)程名和變量 標(biāo)號(hào)存放CPU指令的內(nèi)存存儲(chǔ)區(qū)的首字節(jié)單元的符號(hào)地址。 過(guò)程名存放過(guò)程代碼的內(nèi)存存儲(chǔ)區(qū)的首字節(jié)單元的符號(hào)地址。在匯編語(yǔ)言程序中,標(biāo)號(hào)和過(guò)程名都是代碼段內(nèi)的符號(hào)地址。25DATA12000H 變量在匯編時(shí)其值不確定,在程序運(yùn)行期間其值不斷變化的量稱為變量。在匯編語(yǔ)言中,每一個(gè)變量都被分配一個(gè)存儲(chǔ)單元

21、,變量的值被存放在該存儲(chǔ)單元中;變量的地址就是該存儲(chǔ)單元的地址。為便于在程序中訪問(wèn)一個(gè)變量,我們常常為該變量起一個(gè)名字,稱為變量名,在匯編程序中,變量常常以變量名的形式出現(xiàn)。我們知道,CPU只能通過(guò)存儲(chǔ)單元的地址來(lái)訪問(wèn)存儲(chǔ)單元的內(nèi)容,因此CPU也只能通過(guò)變量的地址來(lái)訪問(wèn)變量的內(nèi)容。因此變量名本質(zhì)上就是分配給該變量的存儲(chǔ)單元的符號(hào)地址,該地址可以在數(shù)據(jù)段、堆棧段或者代碼段中。78H56H變量名: DATA1變量DATA1的值 :12345678H變量DATA1的地址:(DS:2000H)MOV AX,DATA1;(AX)=5678H26 標(biāo)號(hào)、過(guò)程名和變量的屬性標(biāo)號(hào)是存放CPU指令的存儲(chǔ)單元的符

22、號(hào)地址,過(guò)程名是存放過(guò)程代碼的存儲(chǔ)區(qū)首字節(jié)單元的符號(hào)地址,變量名則是存放變量?jī)?nèi)容的存儲(chǔ)單元的符號(hào)地址??梢?jiàn),標(biāo)號(hào)、過(guò)程名和變量名都與存儲(chǔ)器地址相關(guān)聯(lián),因此它們都具有以下三種屬性。段屬性標(biāo)號(hào)、過(guò)程名和變量名所標(biāo)識(shí)的存儲(chǔ)單元的段基址。偏移量屬性標(biāo)號(hào)、過(guò)程名和變量名所標(biāo)識(shí)的存儲(chǔ)單元的段內(nèi)偏移地址。27類型屬性變量的類型是指存放變量?jī)?nèi)容的存儲(chǔ)單元的字節(jié)大小,共有以下六種。BYTE:字節(jié)WORD:字DWORD:雙字QWORD:四字FWORD:六字節(jié)TWORD:十字節(jié)標(biāo)號(hào)和過(guò)程名的類型是指標(biāo)號(hào)和過(guò)程名被引用的方式,共有以下兩種。NEAR類型:標(biāo)號(hào)或過(guò)程名在本段內(nèi)被引用。FAR類型 :標(biāo)號(hào)或過(guò)程名被其他段所

23、引用。284)表達(dá)式操作數(shù)所謂表達(dá)式是指由常量、寄存器名、標(biāo)號(hào)或變量名與運(yùn)算符相組合的序列。在匯編期間,匯編程序?qū)凑找欢ǖ膬?yōu)先規(guī)則對(duì)表達(dá)式進(jìn)行處理,最后將得到一個(gè)數(shù)值、一個(gè)地址值、或相應(yīng)尋址方式的機(jī)器代碼。 根據(jù)最后處理結(jié)果的類型,表達(dá)式分為兩種類型:數(shù)值表達(dá)式和地址表達(dá)式。29數(shù)值表達(dá)式最后處理結(jié)果為數(shù)值的表達(dá)式。數(shù)值表達(dá)式通常是由常量操作數(shù)與算術(shù)運(yùn)算符、邏輯運(yùn)算符或關(guān)系運(yùn)算符連接而成。例如: MOV AX,10 * 20STRINGDB A+ 20H匯編時(shí),匯編程序?qū)?duì)數(shù)值表達(dá)式進(jìn)行處理,最后得到一個(gè)數(shù)值,該數(shù)值可作為指令中的立即操作數(shù)或某存儲(chǔ)單元的初值。30地址表達(dá)式最后處理結(jié)果為地址

24、值或相應(yīng)尋址方式的機(jī)器代碼的表達(dá)式,通常由常量、變量名、標(biāo)號(hào)或寄存器名與運(yùn)算符連接而成。地址表達(dá)式主要用來(lái)表示指令性語(yǔ)句中的操作數(shù)地址或轉(zhuǎn)移目標(biāo)地址。例如:JMP 2000H:0100HMOVAX,STRING + 1JMP NEXTMOVAX,BXMOVAX,ES: SI + 4 當(dāng)?shù)刂繁磉_(dá)式的值表示存儲(chǔ)器地址時(shí),該表達(dá)式也具有段屬性、偏移量屬性和類型屬性。31 運(yùn)算符 MASM宏匯編有六種運(yùn)算符:算術(shù)運(yùn)算符、邏輯運(yùn)算符、移位運(yùn)算符、關(guān)系運(yùn)算符、分析運(yùn)算符和合成運(yùn)算符。 算術(shù)運(yùn)算符 加 +、減 -、乘 *、除 /、求余MOD。 算術(shù)運(yùn)算符可用于數(shù)值表達(dá)式中,運(yùn)算結(jié)果是一個(gè)數(shù)值,例如:xdb(19+(20-10*2)/(2*3+1)ydb(19+(20-10*2)mod(2*3+1) 算術(shù)運(yùn)算符也可用于地址表達(dá)式中,但表達(dá)式的運(yùn)算結(jié)果必須要有明確的物理意義才有效。例如:兩個(gè)地址的相加、相乘和相除都是無(wú)意義的。32 算術(shù)運(yùn)算符應(yīng)用于地址表達(dá)式的常見(jiàn)形式如下: 標(biāo)號(hào)或變量 數(shù)值表達(dá)式 這個(gè)地址表達(dá)式的運(yùn)算結(jié)果仍然為一個(gè)標(biāo)號(hào)或變量,其類型屬性和段基址屬性都不變,但其偏移量產(chǎn)生一個(gè)位移。 例如: 設(shè)有數(shù)組ARRAY定義如下。 ARRAR DW 1,2,3,4,5,6,7 則地址表達(dá)式(ARRAR +

溫馨提示

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

評(píng)論

0/150

提交評(píng)論