計(jì)算機(jī)硬件程序設(shè)計(jì)1教學(xué)內(nèi)容_第1頁(yè)
計(jì)算機(jī)硬件程序設(shè)計(jì)1教學(xué)內(nèi)容_第2頁(yè)
計(jì)算機(jī)硬件程序設(shè)計(jì)1教學(xué)內(nèi)容_第3頁(yè)
計(jì)算機(jī)硬件程序設(shè)計(jì)1教學(xué)內(nèi)容_第4頁(yè)
計(jì)算機(jī)硬件程序設(shè)計(jì)1教學(xué)內(nèi)容_第5頁(yè)
已閱讀5頁(yè),還剩116頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、計(jì)算機(jī)硬件匯編程序設(shè)計(jì)1第第4 4章:程序設(shè)計(jì)語言概述章:程序設(shè)計(jì)語言概述3. 3. 匯編語言匯編語言面向機(jī)器面向機(jī)器1是一種以處理器指令系統(tǒng)為基礎(chǔ)的是一種以處理器指令系統(tǒng)為基礎(chǔ)的低級(jí)程序設(shè)計(jì)語言低級(jí)程序設(shè)計(jì)語言,它采用助記符表達(dá)指令操作碼,采用標(biāo)識(shí)符號(hào)表示指令它采用助記符表達(dá)指令操作碼,采用標(biāo)識(shí)符號(hào)表示指令操作數(shù)操作數(shù)1一個(gè)助記符表示一條機(jī)器指令,與計(jì)算機(jī)硬件密切關(guān)一個(gè)助記符表示一條機(jī)器指令,與計(jì)算機(jī)硬件密切關(guān)聯(lián)。所以熟悉計(jì)算機(jī)硬件是匯編語言程序員必須具備的聯(lián)。所以熟悉計(jì)算機(jī)硬件是匯編語言程序員必須具備的條件。條件。一條指令一條指令 匯編匯編 機(jī)器碼(機(jī)器碼(1n1n字節(jié))字節(jié))第第4 4章

2、:匯編語言的特點(diǎn)章:匯編語言的特點(diǎn)優(yōu)點(diǎn):優(yōu)點(diǎn): 效率高可以直接、有效地控制計(jì)算機(jī)硬件,效率高可以直接、有效地控制計(jì)算機(jī)硬件,因而容易創(chuàng)建代碼序列短小、運(yùn)行快速的可執(zhí)行程序因而容易創(chuàng)建代碼序列短小、運(yùn)行快速的可執(zhí)行程序 占用內(nèi)存少占用內(nèi)存少應(yīng)用:應(yīng)用:在有些應(yīng)用領(lǐng)域,匯編語言的作用是不容置疑和無在有些應(yīng)用領(lǐng)域,匯編語言的作用是不容置疑和無可替代的可替代的 與硬件關(guān)系緊密的程序與硬件關(guān)系緊密的程序 實(shí)時(shí)性要求很高的程序?qū)崟r(shí)性要求很高的程序缺點(diǎn):缺點(diǎn): 不直觀,開發(fā)時(shí)間長(zhǎng)不直觀,開發(fā)時(shí)間長(zhǎng) 容易出錯(cuò)容易出錯(cuò) 匯編語言程序不能直接運(yùn)行,必須要翻譯成目標(biāo)代碼程序。這個(gè)匯編語言程序不能直接運(yùn)行,必須要翻譯

3、成目標(biāo)代碼程序。這個(gè)翻譯的過程叫翻譯的過程叫匯編匯編。完成匯編任務(wù)的程序叫。完成匯編任務(wù)的程序叫匯編程序匯編程序。匯編程序的匯編程序的功能功能: 將匯編語言源程序翻譯成機(jī)器語言程序。將匯編語言源程序翻譯成機(jī)器語言程序。 根據(jù)用戶要求自動(dòng)分配存儲(chǔ)區(qū)域。根據(jù)用戶要求自動(dòng)分配存儲(chǔ)區(qū)域。 自動(dòng)把各種進(jìn)位制數(shù)自動(dòng)把各種進(jìn)位制數(shù)二進(jìn)制數(shù)。二進(jìn)制數(shù)。 字符字符ASCASC碼。碼。 自動(dòng)對(duì)源程序進(jìn)行檢查,給出錯(cuò)誤信息。自動(dòng)對(duì)源程序進(jìn)行檢查,給出錯(cuò)誤信息。 在在IBM PCIBM PC微機(jī)中,有兩個(gè)匯編程序:微機(jī)中,有兩個(gè)匯編程序: 基本匯編基本匯編ASMASM;宏匯編;宏匯編MASMMASM第第4 4章:匯編

4、語言程序章:匯編語言程序第第4 4章:重點(diǎn)內(nèi)容章:重點(diǎn)內(nèi)容1匯編語言源程序格式與開發(fā)匯編語言源程序格式與開發(fā)1常量、變量和標(biāo)號(hào)常量、變量和標(biāo)號(hào)1匯編語言程序設(shè)計(jì)方法匯編語言程序設(shè)計(jì)方法2 順序程序設(shè)計(jì)順序程序設(shè)計(jì)2 分支程序設(shè)計(jì)分支程序設(shè)計(jì)2 循環(huán)程序設(shè)計(jì)循環(huán)程序設(shè)計(jì)2 子程序設(shè)計(jì)子程序設(shè)計(jì)4.1 4.1 匯編語言程序的基本語法匯編語言程序的基本語法;Example1.asmStacksegmentdb 100 dup (?)StackendsSeg1segmentStringdb Hello, Assembly !,0dh,0ah,$Seg1endSeg2segmentassume cs:s

5、eg2,ds:seg1,ss:stackStart:mov ax,datamov ds,axmov dx,offset stringmov ah,9int 21hmov ax,4c00hint 21hSeg2endsend start4.1.1 4.1.1 匯編語言源程序的分段結(jié)構(gòu)匯編語言源程序的分段結(jié)構(gòu)一一. . 源程序的結(jié)構(gòu)特點(diǎn)源程序的結(jié)構(gòu)特點(diǎn)1. 1. 分段結(jié)構(gòu)分段結(jié)構(gòu) 程序由若干邏輯段組成,各邏輯段都有一個(gè)段名,由段程序由若干邏輯段組成,各邏輯段都有一個(gè)段名,由段定義語句(偽指令語句)定義和說明。定義語句(偽指令語句)定義和說明。 包括:包括: 代碼段代碼段CSCS必不可少必不可少 數(shù)

6、據(jù)段數(shù)據(jù)段DSDS建立工作區(qū),存放常量、變量、中間結(jié)果等。建立工作區(qū),存放常量、變量、中間結(jié)果等。 堆棧段堆棧段SSSS建立堆棧區(qū),用于中斷、過程調(diào)用、參數(shù)傳遞。建立堆棧區(qū),用于中斷、過程調(diào)用、參數(shù)傳遞。 附加段附加段ESES建立工作區(qū)。建立工作區(qū)。 4.1.14.1.1匯編語言源程序的分段結(jié)構(gòu)匯編語言源程序的分段結(jié)構(gòu)通常,通常,數(shù)據(jù)段放在代碼段前面數(shù)據(jù)段放在代碼段前面。 好處:好處: 事先定義程序中使用的變量事先定義程序中使用的變量 匯編過程中知道變量屬性匯編過程中知道變量屬性2. 2. 代碼段起始處,用代碼段起始處,用ASSUMEASSUME命令(偽指令)說明各個(gè)段命令(偽指令)說明各個(gè)段

7、寄存器與邏輯段的關(guān)系。寄存器與邏輯段的關(guān)系。各段各段REG (REG (除除CS)CS)的初值由用戶的初值由用戶設(shè)置。各段相對(duì)位置任意,以設(shè)置。各段相對(duì)位置任意,以END(END(* * *) )結(jié)尾。結(jié)尾。3. 3. 語句行:語句行:語句是匯編語言程序的基本組成單位。每個(gè)語句是匯編語言程序的基本組成單位。每個(gè)邏輯段由若干行匯編語句組成,邏輯段由若干行匯編語句組成,每行一個(gè)語句每行一個(gè)語句,且,且128VAR2VAR1VAR2,則匯編成:,則匯編成: MOV AXMOV AX,0FFFFH0FFFFH 如如VAR1VAR2VAR1VAR2,則匯編成:,則匯編成: MOV AXMOV AX,00

8、00H0000H例例2 2:要實(shí)現(xiàn)要實(shí)現(xiàn) AX= 5 AX= 5 如果如果CHOICE20CHOICE=20CHOICE=20MOV AXMOV AX,(CHOICE LT 20)AND 5)OR(CHOICE GE 20)AND 6)(CHOICE LT 20)AND 5)OR(CHOICE GE 20)AND 6)(3 3)運(yùn)算符和操作符的優(yōu)先權(quán)等級(jí))運(yùn)算符和操作符的優(yōu)先權(quán)等級(jí) 見見P158 P158 表表4.24.2 關(guān)系運(yùn)算符關(guān)系運(yùn)算符4.2 4.2 匯編語言的偽指令語句匯編語言的偽指令語句幫助匯編,只在源程序中,目標(biāo)程序中是其匯幫助匯編,只在源程序中,目標(biāo)程序中是其匯編結(jié)果。編結(jié)果。

9、分類:分類:u段定義語句(程序分段)段定義語句(程序分段)u符號(hào)定義語句符號(hào)定義語句u數(shù)據(jù)定義語句數(shù)據(jù)定義語句u過程定義語句過程定義語句u程序結(jié)束語句程序結(jié)束語句4.2.2 4.2.2 段定義段定義程序分段程序分段18086/80888086/8088的存貯器是分段的,所以必須按段的存貯器是分段的,所以必須按段來組織和利用存貯器。來組織和利用存貯器。1主要命令有:主要命令有:2 SEGMENT ENDS PUBLICSEGMENT ENDS PUBLIC2 ASSUME ORG STACKASSUME ORG STACK2 EXTRN PAGA TITLE COMMONEXTRN PAGA T

10、ITLE COMMON1. 1. 段定義段定義格式:格式: 段名段名 SEGMENT SEGMENT 定位類型定位類型 組合類型組合類型類別名類別名 . . . . (段體)(段體) . . 段名段名 ENDSENDS功能:功能:將源程序分為若干邏輯段,分別裝入相應(yīng)的將源程序分為若干邏輯段,分別裝入相應(yīng)的存儲(chǔ)器段中。指出段名、屬性、開始存儲(chǔ)器段中。指出段名、屬性、開始/ /結(jié)束位置。結(jié)束位置。1. 1. 段定義段定義1段名段名2該段的名字,可以是任何合法的標(biāo)識(shí)符該段的名字,可以是任何合法的標(biāo)識(shí)符2該段分配的存儲(chǔ)器起始地址該段分配的存儲(chǔ)器起始地址2不可省略不可省略1段體段體2段內(nèi)的語句序列,包括

11、指令語句和偽指令語句段內(nèi)的語句序列,包括指令語句和偽指令語句1SEGMENT/ENDSSEGMENT/ENDS必須成對(duì)出現(xiàn),段名必必須成對(duì)出現(xiàn),段名必須一致須一致1. 1. 段定義段定義1定位類型定位類型指定該段段基址的邊界條件。指定該段段基址的邊界條件。2PAGE(PAGE(頁(yè)頁(yè)) ) 段起始地址為段起始地址為256256的倍數(shù)。的倍數(shù)。一頁(yè)一頁(yè)256256個(gè)字節(jié)個(gè)字節(jié)地址表示為地址表示為 XXX00H XXX00H 如如 02400H02400H,07A00H07A00H2PARA(PARA(節(jié)節(jié)) ) 段起始地址為段起始地址為1616的倍數(shù)。的倍數(shù)。一節(jié)一節(jié)1616個(gè)字節(jié)個(gè)字節(jié)表示為表示

12、為XXXX0H XXXX0H 如如 024D0H024D0H,07A20H07A20H通常系統(tǒng)通常系統(tǒng)默認(rèn)默認(rèn)的定位類型為的定位類型為PARAPARA 。2WORD(WORD(字字) )段起始地址為偶數(shù)。段起始地址為偶數(shù)。如如 02152H, 0A156H02152H, 0A156H適合于數(shù)據(jù)項(xiàng)類型為字的數(shù)據(jù)段適合于數(shù)據(jù)項(xiàng)類型為字的數(shù)據(jù)段2BYTE(BYTE(字節(jié)字節(jié)) )段起始地址任意。段起始地址任意。1. 1. 段定義段定義1組合類型:組合類型:用來在多模塊鏈接時(shí)告訴鏈接程序,本段用來在多模塊鏈接時(shí)告訴鏈接程序,本段與其它段的組合關(guān)系。與其它段的組合關(guān)系。2NONENONE:默認(rèn):默認(rèn)2P

13、UBLICPUBLIC:本段與具有相同段名的其他段連接在一起,:本段與具有相同段名的其他段連接在一起,形成一個(gè)邏輯段,公用一個(gè)段地址。形成一個(gè)邏輯段,公用一個(gè)段地址。2STACKSTACK:為堆棧段,鏈接時(shí),自動(dòng)初始化:為堆棧段,鏈接時(shí),自動(dòng)初始化SSSS和和SPSP。SSSS:首地址:首地址SPSP:堆棧底部:堆棧底部+1+1的單元的單元例:堆棧段的總空間為例:堆棧段的總空間為40H40H,則棧底為,則棧底為3FH3FH,SP=40HSP=40H。2注意:注意:用戶程序中至少有個(gè)段用用戶程序中至少有個(gè)段用STACKSTACK說明,否則說明,否則連接時(shí)警告,用戶必須在程序中對(duì)連接時(shí)警告,用戶必

14、須在程序中對(duì)SSSS和和SPSP初始化。初始化。1. 1. 段定義段定義1類別名類別名2必須用單引號(hào)括起來。必須用單引號(hào)括起來。2LINKLINK程序把類別名相同的所有段存放在連續(xù)的存儲(chǔ)程序把類別名相同的所有段存放在連續(xù)的存儲(chǔ)區(qū)內(nèi),但仍為不同段(區(qū)內(nèi),但仍為不同段(PUBLIC COMMON PUBLIC COMMON 除外)。除外)。2典型的類別名如:典型的類別名如:DATADATA、STACKSTACK、CODECODE1. 1. 段定義段定義例:例:STACKSTACKSEGMENT PARA STACK STACKSEGMENT PARA STACK STACK; 堆棧名堆棧名 定位定

15、位 組合方式組合方式 類別類別DBDB100 DUP(?)100 DUP(?) STACK STACKENDSENDS或或DB 100 DUP(STACK)DB 100 DUP(STACK)2. ASSUME2. ASSUME:段尋址:段尋址( (段寄存器說明段寄存器說明) )1說明段寄存器和段名之間的對(duì)應(yīng)關(guān)系說明段寄存器和段名之間的對(duì)應(yīng)關(guān)系1格式:格式: ASSUME ASSUME 段寄存器:段名段寄存器:段名 ,段寄存器:段名,段寄存器:段名,2 段寄存器:段寄存器:CS,DS,SS,ESCS,DS,SS,ES中的一個(gè)中的一個(gè)2 段名:段名:SEGMENT/ENDSSEGMENT/ENDS

16、中定義的名字。中定義的名字。2 兩者間必須用兩者間必須用“:”分隔分隔1功能功能:通知匯編程序,段名所指定的段是由哪:通知匯編程序,段名所指定的段是由哪個(gè)段寄存器尋址,即為個(gè)段寄存器尋址,即為“段段”指定約定的段寄存指定約定的段寄存器。器。2. ASSUME2. ASSUME:段尋址:段尋址( (段寄存器說明段寄存器說明) )1例:例:ASSUME CS:CSEG,DS:DSEG,SS:SSEG,ES:ESEG1注意:注意:2在一個(gè)代碼段中,若沒有另外的在一個(gè)代碼段中,若沒有另外的ASSUMEASSUME重新設(shè)置,重新設(shè)置,原有的原有的ASSUMEASSUME設(shè)置一直有效。設(shè)置一直有效。例:例

17、:ASSUMEES:NOTHING;刪除;刪除ES的設(shè)置的設(shè)置ASSUMENOTHING;刪除全部設(shè)置;刪除全部設(shè)置2不一定要設(shè)置全部的段寄存器不一定要設(shè)置全部的段寄存器2必須寫在代碼段中,放在代碼段定義語句之后必須寫在代碼段中,放在代碼段定義語句之后2 并沒有真正給段寄存器賦值并沒有真正給段寄存器賦值2. ASSUME2. ASSUME:段尋址:段尋址( (段寄存器說明段寄存器說明) )1段寄存器段寄存器(CS(CS除外除外) )的裝入是采用程序方法:的裝入是采用程序方法:2DSDS和和ESES的裝入:的裝入:可通過給寄存器賦初值方式可通過給寄存器賦初值方式例:例:MOVMOV AXAX,D

18、ATADATAMOVMOV DSDS,AXAX 2SSSS、SPSP的裝入:有兩種方法的裝入:有兩種方法a. a. 在在SEGMENTSEGMENT語句中,選用組合類型語句中,選用組合類型STACKSTACK,并在,并在ASSUMEASSUME語語句中,用句中,用SSSS:STACKSTACK。 例:例: SSEG SEGMENT PARA SSEG SEGMENT PARA STACKSTACK DB 40HDUP DB 40HDUP(?)(?) SSEG ENDSSSEG ENDS CSEG SEGMENT CSEG SEGMENT ASSUME CS ASSUME CS:CSEGCSEG

19、,SSSS:SSEGSSEGb. b. 在在SEGMENT SEGMENT 語句中,組合類型未選用語句中,組合類型未選用STACKSTACK參數(shù),可采用參數(shù),可采用類似于類似于DSDS和和ESES的裝入方法的裝入方法。 2. ASSUME2. ASSUME:段尋址:段尋址( (段寄存器說明段寄存器說明) )2CSCS和和IPIP的裝入:的裝入:通常是按照結(jié)束偽指令指定的地址通常是按照結(jié)束偽指令指定的地址來完成。來完成。 程序結(jié)束偽指令的格式:程序結(jié)束偽指令的格式: END END 標(biāo)號(hào)標(biāo)號(hào) 例:例:END STARTEND START 標(biāo)號(hào):標(biāo)號(hào):程序運(yùn)行的起始語句的指令標(biāo)號(hào),程序運(yùn)行的起始語

20、句的指令標(biāo)號(hào),有且一般要有,有且一般要有,匯編連接時(shí),該標(biāo)號(hào)代表的地址(段地址,偏移量)被匯編連接時(shí),該標(biāo)號(hào)代表的地址(段地址,偏移量)被裝入裝入CS:IPCS:IP。 若無,則若無,則CSCS:IPIP指向指向.EXE.EXE文件的第一個(gè)字節(jié)。文件的第一個(gè)字節(jié)。 3. ORG 3. ORG 變量的定位變量的定位( (指定地址指定地址) )1匯編程序按照指令的先后順序一個(gè)接著一個(gè)分匯編程序按照指令的先后順序一個(gè)接著一個(gè)分配存儲(chǔ)空間,按照段定義偽指令規(guī)定的邊界定位配存儲(chǔ)空間,按照段定義偽指令規(guī)定的邊界定位屬性確定每個(gè)邏輯段的起始位置(包括偏移地址)屬性確定每個(gè)邏輯段的起始位置(包括偏移地址)1定

21、位偽指令定位偽指令ORGORG控制數(shù)據(jù)或代碼所在的偏移地控制數(shù)據(jù)或代碼所在的偏移地址址ORG ORG 參數(shù)參數(shù)1強(qiáng)行指定地址計(jì)數(shù)器的當(dāng)前值,以改變段內(nèi)在強(qiáng)行指定地址計(jì)數(shù)器的當(dāng)前值,以改變段內(nèi)在它以后的代碼或數(shù)據(jù)塊存放的偏移地址。它以后的代碼或數(shù)據(jù)塊存放的偏移地址。1匯編程序?yàn)樵摱闻鋫湟粋€(gè)初值為匯編程序?yàn)樵摱闻鋫湟粋€(gè)初值為0 0的位置計(jì)數(shù)器。的位置計(jì)數(shù)器。3. ORG 3. ORG 變量的定位變量的定位( (指定地址指定地址) )1格式:格式:ORG ORG 表達(dá)式表達(dá)式或或ORG $+ORG $+表達(dá)式表達(dá)式 1功能:功能:以表達(dá)式的值作為起始地址以表達(dá)式的值作為起始地址 $當(dāng)前位置計(jì)數(shù)器的值

22、當(dāng)前位置計(jì)數(shù)器的值 其中:表達(dá)式可計(jì)算得出其中:表達(dá)式可計(jì)算得出1616位地址位地址ORG 100hORG 100h;從從100H100H處安排數(shù)據(jù)或程序處安排數(shù)據(jù)或程序ORG $+10ORG $+10;偏移地址加偏移地址加1010,即跳過,即跳過1010個(gè)字節(jié)空間個(gè)字節(jié)空間3. ORG 3. ORG 變量的定位變量的定位( (指定地址指定地址) )例例1 1:ORGORG 1000H1000HMOVMOV ALAL,BLBL例例2 2:CSEGCSEGSEGMENTSEGMENTORGORG 2 2;目標(biāo)代碼從;目標(biāo)代碼從2 2開始產(chǎn)生開始產(chǎn)生ORGORG $ $3 3;跳過三個(gè)字節(jié)后生成目

23、標(biāo)代碼;跳過三個(gè)字節(jié)后生成目標(biāo)代碼CSEGCSEGENDSENDS說明:說明:程序中可含有若干程序中可含有若干ORGORG偽指令。偽指令。4. 4. 匯編結(jié)束偽指令匯編結(jié)束偽指令1END END 標(biāo)號(hào)標(biāo)號(hào)4.2.3 4.2.3 符號(hào)定義符號(hào)定義( (賦值賦值) )1. 1. 等值等值 EQUEQU 格式:格式:符號(hào)名符號(hào)名 EQU EQU 表達(dá)式表達(dá)式 表達(dá)式表達(dá)式可以是:數(shù)值,地址,新的類型屬性,可以是:數(shù)值,地址,新的類型屬性,其它符號(hào)名。其它符號(hào)名。 例:例:PORT1PORT1EQUEQU312312PORT2PORT2EQUEQUPORT1+1PORT1+14.2.3 4.2.3 符

24、號(hào)定義符號(hào)定義( (賦值賦值) )注意:注意:EQUEQU語句不能重復(fù)定義語句不能重復(fù)定義 X EQU 7 EQU 7 X EQU X+5 EQU X+5 是錯(cuò)誤的是錯(cuò)誤的 使用使用EQUEQU偽指令時(shí),必須先賦值,后使用偽指令時(shí),必須先賦值,后使用 例:例:LPN EQU LP1LPN EQU LP112H12H ; LP1 LP1 應(yīng)該在此句前加以定義。應(yīng)該在此句前加以定義。只作為符號(hào)定義用,不產(chǎn)生任何目標(biāo)代碼只作為符號(hào)定義用,不產(chǎn)生任何目標(biāo)代碼 , ,不占用存儲(chǔ)不占用存儲(chǔ)單元。單元。4.2.3 4.2.3 符號(hào)定義符號(hào)定義( (賦值賦值) )2. 2. 符號(hào)符號(hào) 格式:格式:符號(hào)名表達(dá)式

25、符號(hào)名表達(dá)式; ;功能和功能和EQUEQU類似類似 X = 7X = 7;等效于:;等效于:X equ 7X equ 7 X = X+5 X = X+5;“X EQU X+5”X EQU X+5”是錯(cuò)誤的是錯(cuò)誤的區(qū)別:區(qū)別:定義的符號(hào)可以重新定義。定義的符號(hào)可以重新定義。注意:注意:EQUEQU:不能重新定義:不能重新定義 :可以重新定義:可以重新定義4.2.3 4.2.3 數(shù)據(jù)定義數(shù)據(jù)定義變量定義變量定義功能:功能: 指定變量的類型和名稱,并為變量分配存儲(chǔ)單元。指定變量的類型和名稱,并為變量分配存儲(chǔ)單元。 存儲(chǔ)單元初始化。存儲(chǔ)單元初始化。 內(nèi)存單元:內(nèi)存單元: 分配分配 初始化初始化1. 1

26、. 數(shù)據(jù)定義語句的格式數(shù)據(jù)定義語句的格式 變量名變量名 DB/DW/DDDB/DW/DD 操作數(shù)操作數(shù), ,操作數(shù)操作數(shù) , ,操作數(shù)操作數(shù) 變量的定義變量的定義 1變量名變量名為用戶自定義標(biāo)識(shí)符,表示表首元素的邏輯地為用戶自定義標(biāo)識(shí)符,表示表首元素的邏輯地址,常稱為符號(hào)地址。變量名也可以沒有址,常稱為符號(hào)地址。變量名也可以沒有1含義:含義:由此由此“符號(hào)地址符號(hào)地址”單元起,以字節(jié)(或字,雙單元起,以字節(jié)(或字,雙字)的形式依次存放操作數(shù)。字)的形式依次存放操作數(shù)。 DBDB字節(jié),占一個(gè)字節(jié)單元字節(jié),占一個(gè)字節(jié)單元 DWDW字,字, 占一個(gè)字單元,即兩個(gè)字節(jié)單元,占一個(gè)字單元,即兩個(gè)字節(jié)單元

27、, 低位在低地址,高位在高地址低位在低地址,高位在高地址 DDDD雙字,占兩個(gè)字單元,即四個(gè)字節(jié)單元,雙字,占兩個(gè)字單元,即四個(gè)字節(jié)單元, 低位字在低地址,高位字在高地址低位字在低地址,高位字在高地址2. 2. 數(shù)據(jù)定義語句的具體形式和功能數(shù)據(jù)定義語句的具體形式和功能(1)1)為單元定義初值為單元定義初值( (數(shù)值表達(dá)式數(shù)值表達(dá)式) ) 變量名作為該存儲(chǔ)單元的名稱。變量名作為該存儲(chǔ)單元的名稱。 例:例: TAB1TAB1DBDB01H, -101H, -1 TAB2 TAB2DWDW3456H, 78H3456H, 78H TAB3 TAB3DDDD0F9FAFBFCH, 90F9FAFBFC

28、H, 9注意:注意: 操作數(shù)順序操作數(shù)順序 高低字節(jié)位置高低字節(jié)位置(2)(2)預(yù)留單元,其內(nèi)容不初始化預(yù)留單元,其內(nèi)容不初始化( (?表達(dá)式?表達(dá)式) )形式:形式:符號(hào)名符號(hào)名DB ?DB ? ( (變量變量) )DWDWDDDD 功能:功能:匯編程序仍然分配存儲(chǔ)單元,但不預(yù)留確定的值。匯編程序仍然分配存儲(chǔ)單元,但不預(yù)留確定的值。常用來存放程序的中間結(jié)果和最終結(jié)果。常用來存放程序的中間結(jié)果和最終結(jié)果。 例:例: TEMPTEMPDB DB ? ?; ;分配一個(gè)字節(jié)單元分配一個(gè)字節(jié)單元RESULTRESULTDWDW?, ?, ?; ;分配兩個(gè)字單元分配兩個(gè)字單元形式:形式:符號(hào)名符號(hào)名DB

29、/DW/DDDB/DW/DDn nDUP DUP (變量)(變量)n n:重復(fù)次數(shù)重復(fù)次數(shù) DUPDUP:重復(fù)數(shù)據(jù)定義操作符重復(fù)數(shù)據(jù)定義操作符 :重復(fù)內(nèi)容重復(fù)內(nèi)容 注意:注意:DUPDUP操作符可重疊使用操作符可重疊使用 例:例:X1X1DBDB5 DUP(0) 5 DUP(0) X1 DB 0,0,0,0,0 X1 DB 0,0,0,0,0TAB1TAB1DBDB10H DUP(?)10H DUP(?); ;預(yù)留預(yù)留10H10H個(gè)字節(jié)單元個(gè)字節(jié)單元TAB2TAB2DBDB2 DUP(2 DUP(3)2 DUP(2 DUP(3) TAB2 DB 3,3,3,3(3)“(3)“操作數(shù)操作數(shù)”為重

30、復(fù)項(xiàng)時(shí)為重復(fù)項(xiàng)時(shí)( (帶帶DUPDUP的表達(dá)式的表達(dá)式) )功能:功能:為串中的每個(gè)字符分配一個(gè)字節(jié)存儲(chǔ)單元。為串中的每個(gè)字符分配一個(gè)字節(jié)存儲(chǔ)單元。故字符串的定義必須用故字符串的定義必須用DBDB命令。命令。 說明:說明: 字符串用單引號(hào)括起來,字符串用單引號(hào)括起來, 256256個(gè)字符個(gè)字符 在內(nèi)存中,字符以在內(nèi)存中,字符以ASCIIASCII碼表示碼表示 存放順序:存放順序:自左向右按地址遞增順序存放自左向右按地址遞增順序存放 僅僅DBDB可定義可定義ASCIIASCII串串 (4)“(4)“操作數(shù)操作數(shù)”為為ASCIIASCII碼時(shí)碼時(shí)( (字符串字符串) )(4) “(4) “操作數(shù)操

31、作數(shù)”為為ASCIIASCII碼時(shí)碼時(shí)( (字符串字符串) )DW:可以給兩個(gè)字符組成的字符串分配兩個(gè)字節(jié)存儲(chǔ)單元,前一個(gè)字符為高字節(jié),存放在高地址,后一個(gè)字符為低字節(jié),存放在低地址。例如:ST1DB12 ST2DW12ST131H32HST232H31H(4) “(4) “操作數(shù)操作數(shù)”為為ASCIIASCII碼時(shí)碼時(shí)( (字符串字符串) )1注意:注意:2除用除用DW定義的字符串,單引號(hào)中定義的字符串,單引號(hào)中ASCII字符的個(gè)數(shù)字符的個(gè)數(shù)不能超過不能超過2個(gè),若只有個(gè),若只有1個(gè),如:個(gè),如: DW C DW 0043H 功能:功能:存放標(biāo)號(hào)或變量的段內(nèi)偏移量或全地址。存放標(biāo)號(hào)或變量的段

32、內(nèi)偏移量或全地址。 當(dāng)使用當(dāng)使用DW定義對(duì)象的偏移地址定義對(duì)象的偏移地址 當(dāng)使用當(dāng)使用DD定義對(duì)象的偏址與段址定義對(duì)象的偏址與段址例如:例如: X1 DW CYCLE ;CYCLE偏址偏址X1 X2 DD CYCLE ;CYCLE偏址偏址X2 ;CYCLE偏址偏址X2+2CYCLE: MOV AX, 3(5)(5)操作數(shù)為標(biāo)號(hào)或符號(hào)地址時(shí)操作數(shù)為標(biāo)號(hào)或符號(hào)地址時(shí)例:例:SUMSUMDBDB1,2,31,2,3 MOVMOVAL, SUM AL, SUM MOVMOVAX, SUM AX, SUM MOVMOVSUMSUM5, 35, 3(7)(7)連續(xù)存放(定義一個(gè)表)連續(xù)存放(定義一個(gè)表)

33、例:例:POWER_2 DB 1,2,4,8,16POWER_2 DB 1,2,4,8,16(6)(6)明確了用該變量表示的單元的類型明確了用該變量表示的單元的類型數(shù)據(jù)定義與符號(hào)定義數(shù)據(jù)定義與符號(hào)定義區(qū)別: EQU定義立即數(shù),不分配內(nèi)存 DB/DW/DD等定義內(nèi)存操作數(shù),分配內(nèi)存例: X1DB3X2EQU 5X3DB7,8MOVAL, X1MOVBL, Y1MOVAL, X1BXMOVBL, Y1BXX103HX207H08H3. 3. 分析符和合成符分析符和合成符1(1)(1)分析符分析符2數(shù)值返回操作符數(shù)值返回操作符2把把變量變量/ /標(biāo)號(hào)標(biāo)號(hào)分解成它們的各個(gè)組成部分或取其某一分解成它們的

34、各個(gè)組成部分或取其某一項(xiàng)屬性值項(xiàng)屬性值2變量的屬性:段址變量的屬性:段址/ /偏址偏址/ /類型類型2標(biāo)號(hào)的屬性:段址標(biāo)號(hào)的屬性:段址/ /偏址偏址/ /類型類型1說明說明2分析符只能對(duì)分析符只能對(duì)變量變量/ /標(biāo)號(hào)標(biāo)號(hào)進(jìn)行運(yùn)算。進(jìn)行運(yùn)算。2分析運(yùn)算符總是加在運(yùn)算對(duì)象之前,分析運(yùn)算符總是加在運(yùn)算對(duì)象之前,返回返回結(jié)果是一結(jié)果是一個(gè)個(gè)數(shù)值數(shù)值。(1)(1)分析符分析符1語法格式語法格式分析符分析符變量變量;返回一個(gè)數(shù)值;返回一個(gè)數(shù)值分析符分析符標(biāo)號(hào)標(biāo)號(hào);返回一個(gè)數(shù)值;返回一個(gè)數(shù)值1幾個(gè)重要的分析符幾個(gè)重要的分析符2SEG;取對(duì)象段址;取對(duì)象段址2OFFSET;取對(duì)象偏址;取對(duì)象偏址2TYPE;對(duì)

35、象類型,以數(shù)值表示;對(duì)象類型,以數(shù)值表示2LENGTH;DUP定義的數(shù)據(jù)的個(gè)數(shù)定義的數(shù)據(jù)的個(gè)數(shù)2SIZE;DUP定義的數(shù)據(jù)的字節(jié)數(shù)定義的數(shù)據(jù)的字節(jié)數(shù) SEG SEG取段址取段址 例:例:MOV AX , SEG OPERMOV AX , SEG OPER OFFSET OFFSET 取偏移地址取偏移地址 例:例:MOV BX, OFFSET OPERMOV BX, OFFSET OPER = LEA BX , OPER = LEA BX , OPER (1) (1) 分析符分析符(1) (1) 分析符分析符1TYPE返回類型值返回類型值2當(dāng)對(duì)象是變量時(shí),返回表示當(dāng)對(duì)象是變量時(shí),返回表示B/W/

36、D類型的數(shù)值類型的數(shù)值字節(jié)字節(jié)(BYTE):1字字 (WORD):2雙字雙字(DWORD):42當(dāng)對(duì)象是變量時(shí),返回表示當(dāng)對(duì)象是變量時(shí),返回表示FAR/NEAR類型的數(shù)值類型的數(shù)值遠(yuǎn)屬性遠(yuǎn)屬性(FAR):2近屬性近屬性(NEAR):11例如:若例如:若AB是是DB定義的變量,執(zhí)行定義的變量,執(zhí)行MOV AX ,TYPE AB;則則(AX)=0001H1字節(jié)、字和雙字的類型值,分別是所占有的字節(jié)數(shù),字節(jié)、字和雙字的類型值,分別是所占有的字節(jié)數(shù),而標(biāo)號(hào)的類型值,沒有實(shí)際的物理意義。而標(biāo)號(hào)的類型值,沒有實(shí)際的物理意義。(1)(1)分析符分析符1LENGTH 取數(shù)據(jù)個(gè)數(shù)取數(shù)據(jù)個(gè)數(shù)1SIZE取字節(jié)數(shù)取字

37、節(jié)數(shù)1一般:一般: SIZE X = (LENGTH X) *(TYPE X)1僅對(duì)僅對(duì)DUP定義的內(nèi)存操作數(shù)有效,并返回相應(yīng)定義的內(nèi)存操作數(shù)有效,并返回相應(yīng)的數(shù)據(jù)的個(gè)數(shù)或者數(shù)據(jù)所占存儲(chǔ)單元的字節(jié)數(shù)。的數(shù)據(jù)的個(gè)數(shù)或者數(shù)據(jù)所占存儲(chǔ)單元的字節(jié)數(shù)。1如果數(shù)據(jù)不是由如果數(shù)據(jù)不是由DUP定義,定義,LENGTH/SIZE操操作符返回值總是作符返回值總是1。例:例: BUF1DB100 DUP(0) BUF2DW 200 DUP(0) LENGTH BUF1 = 100 LENGTH BUF2 = 200 SIZE BUF1 = 100 SIZE BUF2 = 200*2 = 400 例:例:strdba

38、bcdefg(1) (1) 分析符分析符size str = 1(1) (1) 分析符分析符1問題:如何確定不用問題:如何確定不用DUPDUP定義的數(shù)據(jù)的個(gè)數(shù)?定義的數(shù)據(jù)的個(gè)數(shù)?1數(shù)據(jù)區(qū)末地址數(shù)據(jù)區(qū)末地址/ /首地址的差值包含了數(shù)據(jù)個(gè)數(shù)的首地址的差值包含了數(shù)據(jù)個(gè)數(shù)的信息信息2 首地址?首地址?2 末地址?末地址?1解決方法:解決方法:2 $-$-首地址首地址1例如:例如:BUFBUF DBDB3,5,73,5,7L1L1EQUEQU$ -BUF$ -BUF;L1=3L1=3例例1 1:ARRAYARRAYDBDB10H,24H,5AH,0C7H,98H,ABCDE 10H,24H,5AH,0C

39、7H,98H,ABCDE COUNTCOUNT EQUEQU $ $ARRAYARRAYMAXMAXDBDB? ?$ $ARRAY=000AHARRAY=000AH0000H=000AH=10 0000H=000AH=10 即即 COUNT = 10COUNT = 10例例2 2:STAKSTAKDBDB100 DUP(?)100 DUP(?); ;預(yù)留預(yù)留100100個(gè)內(nèi)存單元個(gè)內(nèi)存單元TOPTOPEQUEQU $-STAK$-STAK; ;給給TOPTOP賦值為賦值為100100(1) (1) 分析符分析符例例3 3:COUNTCOUNTEQUEQU 2020BLOCKBLOCKDBDBR

40、ead after me! Read after me! NUMNUMEQUEQU $ $BLOCKBLOCK$ $字符串最后一個(gè)字符字符串最后一個(gè)字符!所在單元的下一個(gè)所在單元的下一個(gè)字節(jié)地址的偏移量字節(jié)地址的偏移量 例例4: 4: 已知已知VAR DW 1, 2, $+2, 5, 6VAR DW 1, 2, $+2, 5, 6 若匯編時(shí)若匯編時(shí)VARVAR分配的偏移地址是分配的偏移地址是0010H,0010H,則匯編后則匯編后0014H0014H單元的內(nèi)容是:?jiǎn)卧膬?nèi)容是: A) 6H B) 14H C) 5H D) 16HA) 6H B) 14H C) 5H D) 16H(1) (1)

41、分析符分析符強(qiáng)制修改強(qiáng)制修改 變量變量 類型,而不改變其它屬性類型,而不改變其它屬性 標(biāo)號(hào)標(biāo)號(hào) PTR 操作符操作符 格式:格式:類型類型 PTR 變量變量 標(biāo)號(hào)標(biāo)號(hào) 強(qiáng)制的新類型強(qiáng)制的新類型類型:類型:BYTE/WORD/DWORDNEAR/FAR功能:功能:使使PTR右邊的操作對(duì)象具有右邊的操作對(duì)象具有PTR左邊的類型。左邊的類型。(2) (2) 合成符合成符 例例1 1:BUF1 DB 1, 2BUF1 DB 1, 2 BUF2 EQU BUF2 EQU WORD PTRWORD PTR BUF1 BUF1 MOV AL, BUF1 ;AL=01H MOV AL, BUF1 ;AL=01

42、H MOV AX, WORD PTR BUF1 ;AX=0201H MOV AX, WORD PTR BUF1 ;AX=0201H MOV AX, BUF2 ;AX=0201H MOV AX, BUF2 ;AX=0201H(2) (2) 合成符合成符 例例2 2:F1 DW 1234HF1 DW 1234H F2 DB 23H, 56H, 18H F2 DB 23H, 56H, 18H MOV AL , MOV AL , BYTE PTRBYTE PTR F1 ;AL=34H F1 ;AL=34H MOV AX , MOV AX , WORD PTRWORD PTR F2 ;AX=5623H

43、F2 ;AX=5623H 當(dāng)傳送指令的操作數(shù)位數(shù)不一致時(shí),可以用當(dāng)傳送指令的操作數(shù)位數(shù)不一致時(shí),可以用PTRPTR運(yùn)算符運(yùn)算符改變變量屬性,使兩個(gè)操作數(shù)一致。改變變量屬性,使兩個(gè)操作數(shù)一致。(2) (2) 合成符合成符 操作符操作符PTRPTR的應(yīng)用的應(yīng)用: 1 1)重新定義變量類型)重新定義變量類型 如:例如:例1 1、例、例2 2 2 2)指定內(nèi)存操作數(shù)的類型)指定內(nèi)存操作數(shù)的類型 例:例:INC BX INC BX 非法!非法! 合法:合法:INC BYTE PTR BXINC BYTE PTR BX INC WORD PTR BX INC WORD PTR BX(2) (2) 合成符合

44、成符 3) 3) 用用EQUEQU和和PTRPTR定義一個(gè)新變量定義一個(gè)新變量 BUF1 DW 1234H, 5678HBUF1 DW 1234H, 5678H BUF2 EQU BYTE PTR BUF1 BUF2 EQU BYTE PTR BUF1 4 4)可確定指令是段內(nèi)轉(zhuǎn)移還是段間轉(zhuǎn)移)可確定指令是段內(nèi)轉(zhuǎn)移還是段間轉(zhuǎn)移 JMP NEAR PTRJMP NEAR PTR JMP FAR PTR JMP FAR PTR (2) (2) 合成符合成符 補(bǔ):補(bǔ): SHORT SHORT 操作符操作符 通知匯編器,轉(zhuǎn)移目標(biāo)在通知匯編器,轉(zhuǎn)移目標(biāo)在( (128128127)127)之間。之間。 例

45、:例: JMP SHORT F1JMP SHORT F1 JMPJMP指令原為三字節(jié)指令,加指令原為三字節(jié)指令,加SHORTSHORT后,匯編成后,匯編成兩字節(jié)指令。兩字節(jié)指令。(2) (2) 合成符合成符(2) (2) 合成符合成符1(3)LABEL(3)LABEL操作符操作符2為當(dāng)前即將定義的存儲(chǔ)單元定義一個(gè)指定類型的標(biāo)號(hào)為當(dāng)前即將定義的存儲(chǔ)單元定義一個(gè)指定類型的標(biāo)號(hào)或變量或變量2與變量連用:新的變量名、新的變量屬性與變量連用:新的變量名、新的變量屬性例:例:P168P1682與標(biāo)號(hào)連用:新的標(biāo)號(hào)、新的范圍與標(biāo)號(hào)連用:新的標(biāo)號(hào)、新的范圍1THISTHIS操作符操作符2與與LABELLABE

46、L類似類似FIRSTFIRSTEQUEQUTHISTHIS BYTEBYTE;SECONDSECOND DWDW5678H5678H;FIRSTFIRST與與SECONDSECOND具有具有;相同的地址,屬性不同;相同的地址,屬性不同地址操作符地址操作符1地址操作符取得名字或標(biāo)號(hào)的段地址和偏移地址 將括起的表達(dá)式作為存儲(chǔ)器地址指針將括起的表達(dá)式作為存儲(chǔ)器地址指針 $當(dāng)前偏移地址當(dāng)前偏移地址 :段前綴,采用指定的段地址寄存器段前綴,采用指定的段地址寄存器OFFSET 名字名字/標(biāo)號(hào)標(biāo)號(hào) 返回名字或標(biāo)號(hào)的偏移地址返回名字或標(biāo)號(hào)的偏移地址SEG 名字名字/標(biāo)號(hào)標(biāo)號(hào)返回名字或標(biāo)號(hào)的段地址返回名字或標(biāo)號(hào)

47、的段地址4. 4. 變量的應(yīng)用變量的應(yīng)用1變量變量具有存儲(chǔ)單元的邏輯地址具有存儲(chǔ)單元的邏輯地址1程序代碼中程序代碼中2通過變量名引用其指向的首個(gè)數(shù)據(jù)通過變量名引用其指向的首個(gè)數(shù)據(jù)2通過變量名加減位移量存取以首個(gè)數(shù)據(jù)為基地址的前通過變量名加減位移量存取以首個(gè)數(shù)據(jù)為基地址的前后數(shù)據(jù)后數(shù)據(jù) 例題例題4.2 4.2 變量的定義變量的定義;數(shù)據(jù)段;數(shù)據(jù)段bvar1bvar1dbdb0110 0100b,64h,d0110 0100b,64h,d;字節(jié)變量:不同進(jìn)制表達(dá)同一個(gè)數(shù)值,內(nèi)存中有;字節(jié)變量:不同進(jìn)制表達(dá)同一個(gè)數(shù)值,內(nèi)存中有4 4個(gè)個(gè)64H64Hminint = 5minint = 5;符號(hào)常量:

48、;符號(hào)常量:minintminint數(shù)值為數(shù)值為5 5,不占內(nèi)存空間,不占內(nèi)存空間bvar2bvar2db -1,minint,minint+5db -1,minint,minint+5;內(nèi)存中數(shù)值依次為;內(nèi)存中數(shù)值依次為FFH,5,0AHFFH,5,0AHdb ?,2 dup(20h)db ?,2 dup(20h);預(yù)留一個(gè)字節(jié)空間,重復(fù)定義了;預(yù)留一個(gè)字節(jié)空間,重復(fù)定義了2 2個(gè)數(shù)值個(gè)數(shù)值20H20Hwvar1wvar1dw 2010h,4dw 2010h,4* *4 4;字變量:兩個(gè)數(shù)據(jù)是;字變量:兩個(gè)數(shù)據(jù)是2010H2010H、0010H0010H,共占,共占4 4個(gè)字節(jié)個(gè)字節(jié)wvar

49、2wvar2dw ?dw ?;wvar2wvar2是沒有初值的字變量是沒有初值的字變量例題例題4.2 4.2 變量的定義變量的定義dvardvar dd 12347777h,87651111h,?dd 12347777h,87651111h,?;雙字變量:;雙字變量:2 2個(gè)雙字?jǐn)?shù)據(jù),一個(gè)雙字空間個(gè)雙字?jǐn)?shù)據(jù),一個(gè)雙字空間abcabcdb a,b,c,?db a,b,c,?;定義字符,實(shí)際是字節(jié)變量;定義字符,實(shí)際是字節(jié)變量maxintmaxintequ 0ahequ 0ah;符號(hào)常量:;符號(hào)常量:maxintmaxint1010stringstringdb ABCDEFGHIJdb ABCDE

50、FGHIJ;定義字符串:使用字節(jié)定義;定義字符串:使用字節(jié)定義DBDB偽指令偽指令crlfscrlfs db 13,10,$db 13,10,$;回車符;回車符0DH0DH、換行符、換行符0AH0AH和字符和字符$24H24Harray1array1dw maxint dup(0)dw maxint dup(0);1010個(gè)初值為個(gè)初值為0 0的字量,可以認(rèn)為是數(shù)組的字量,可以認(rèn)為是數(shù)組arrayarraydb 2 dup(2,3,2 dup(4)db 2 dup(2,3,2 dup(4);6 6個(gè)字節(jié)內(nèi)容依次為:個(gè)字節(jié)內(nèi)容依次為:02 03 04 04 02 03 04 0402 03 04

51、 04 02 03 04 04例題例題4.2 4.2 變量的應(yīng)用變量的應(yīng)用;代碼段;代碼段mov dl,bvar1mov dl,bvar1;DLDL100100dec bvar2+1dec bvar2+1;bvar2+1bvar2+14 4mov abc3,dlmov abc3,dl;abcabcabcdabcdmov ax,word ptr dvar0mov ax,word ptr dvar0;取雙字到;取雙字到DX.AXDX.AXmov dx,word ptr dvar2mov dx,word ptr dvar2add ax,word ptr dvar4add ax,word ptr dv

52、ar4;加雙字到;加雙字到DX.AXDX.AXadc dx,word ptr dvar6adc dx,word ptr dvar6mov word ptr dvar8,axmov word ptr dvar8,ax;保存雙字的求和結(jié)果;保存雙字的求和結(jié)果mov word ptr dvar10,dxmov word ptr dvar10,dx例題例題4.2 4.2 變量的應(yīng)用變量的應(yīng)用mov cx,maxintmov cx,maxint;CXCX1010mov bx,0mov bx,0;BXBX0 0again:again:add stringbx,3add stringbx,3;strings

53、tring每個(gè)數(shù)值加每個(gè)數(shù)值加3 3inc bxinc bxloop againloop again;循環(huán);循環(huán)lea dx,abclea dx,abc;從;從abcabc開始開始mov ah,9mov ah,9;09H09H號(hào)號(hào)DOSDOS功能調(diào)用功能調(diào)用int 21hint 21h;顯示結(jié)果:;顯示結(jié)果:abcdDEFGHIJKLMabcdDEFGHIJKLM4.2.4 4.2.4 過程定義過程定義1過程是程序的一部分,它們可以被程序調(diào)用。過程是程序的一部分,它們可以被程序調(diào)用。1格式:格式:過程名過程名PROC NEAR/FAR RET 過程體過程體 RET過程名過程名ENDP過程定義過

54、程定義1說明說明: : 2 PROC PROC與與ENDPENDP必須成對(duì)出現(xiàn)。必須成對(duì)出現(xiàn)。2 過程名是該過程的名字,被過程名是該過程的名字,被CALLCALL調(diào)用時(shí)作調(diào)用時(shí)作為標(biāo)號(hào)使用,代表該過程存放的起始地址。為標(biāo)號(hào)使用,代表該過程存放的起始地址。2 過程屬性:過程屬性:NEAR NEAR 或或FARFAR,默認(rèn),默認(rèn) NEARNEAR。過程定義過程定義1說明說明: :2 過程中必須包含過程中必須包含RETRET;可以多于一條可以多于一條。2 類型屬性:類型屬性:NEARNEAR:段內(nèi),段內(nèi), 三字節(jié)三字節(jié)FARFAR:段間,段間, 五字節(jié)五字節(jié)返回的目標(biāo)代碼均為一字節(jié),但操作碼不同。返

55、回的目標(biāo)代碼均為一字節(jié),但操作碼不同。2 過程可以嵌套定義,嵌套調(diào)用。過程可以嵌套定義,嵌套調(diào)用。2 主程序和子程序都可以作為一個(gè)過程。主程序和子程序都可以作為一個(gè)過程。4.2.4 宏宏(Macro)匯編匯編1宏是具有宏名的一段匯編語句序列宏是具有宏名的一段匯編語句序列1宏需要先定義,然后在程序中進(jìn)行宏調(diào)用宏需要先定義,然后在程序中進(jìn)行宏調(diào)用1由于形式上類似其他指令,所以常稱其為宏指由于形式上類似其他指令,所以常稱其為宏指令令1宏指令實(shí)際上是一段代碼序列的縮寫;在匯編宏指令實(shí)際上是一段代碼序列的縮寫;在匯編時(shí),匯編程序用對(duì)應(yīng)的代碼序列替代宏指令時(shí),匯編程序用對(duì)應(yīng)的代碼序列替代宏指令1因?yàn)槭窃趨R

56、編過程中實(shí)現(xiàn)的宏展開,所以常稱因?yàn)槭窃趨R編過程中實(shí)現(xiàn)的宏展開,所以常稱為宏匯編為宏匯編1. 1. 宏定義宏定義1宏定義宏定義由一對(duì)宏匯編偽指令由一對(duì)宏匯編偽指令MACROMACRO和和ENDMENDM來來完成,格式如下:完成,格式如下:宏名宏名MACRO MACRO 形參表形參表 ;宏定義體;宏定義體ENDMENDM2其中宏名是符合語法的標(biāo)識(shí)符,同一源程序中該名字其中宏名是符合語法的標(biāo)識(shí)符,同一源程序中該名字定義唯一。定義唯一。宏定義體宏定義體中不僅可以是硬指令序列,還可中不僅可以是硬指令序列,還可以是偽指令語句序列。以是偽指令語句序列。2可選的形參表給出了宏定義中用到的形式參數(shù),每個(gè)可選的形

57、參表給出了宏定義中用到的形式參數(shù),每個(gè)形式參數(shù)之間用逗號(hào)分隔。形式參數(shù)之間用逗號(hào)分隔。2. 2. 宏調(diào)用宏調(diào)用1宏定義之后就可以使用它,即宏定義之后就可以使用它,即宏調(diào)用宏調(diào)用:宏名宏名 實(shí)參表實(shí)參表 1宏調(diào)用的格式同一般指令一樣:在使用宏調(diào)用的格式同一般指令一樣:在使用宏指令宏指令的位置的位置寫下宏名,后跟實(shí)體參數(shù);如果有多個(gè)參數(shù),應(yīng)按形參寫下宏名,后跟實(shí)體參數(shù);如果有多個(gè)參數(shù),應(yīng)按形參順序填入實(shí)參,也用逗號(hào)分隔順序填入實(shí)參,也用逗號(hào)分隔1在匯編時(shí),宏指令被匯編程序用對(duì)應(yīng)的代碼序列替代,在匯編時(shí),宏指令被匯編程序用對(duì)應(yīng)的代碼序列替代,這就是這就是宏展開宏展開1宏展開宏展開的具體過程是:當(dāng)匯編

58、程序掃描源程序遇到已的具體過程是:當(dāng)匯編程序掃描源程序遇到已有定義的宏調(diào)用時(shí),即用相應(yīng)的宏定義體完全替代源程有定義的宏調(diào)用時(shí),即用相應(yīng)的宏定義體完全替代源程序的宏指令,同時(shí)用位置匹配的實(shí)參對(duì)形參進(jìn)行取代序的宏指令,同時(shí)用位置匹配的實(shí)參對(duì)形參進(jìn)行取代4.2.5 結(jié)構(gòu)定義偽指令結(jié)構(gòu)定義偽指令1將不同類型的數(shù)據(jù)組合成一個(gè)有機(jī)整體,構(gòu)成將不同類型的數(shù)據(jù)組合成一個(gè)有機(jī)整體,構(gòu)成特定結(jié)構(gòu)的數(shù)據(jù)形式特定結(jié)構(gòu)的數(shù)據(jù)形式結(jié)構(gòu)結(jié)構(gòu) 1結(jié)構(gòu)定義的格式:結(jié)構(gòu)定義的格式:結(jié)構(gòu)名結(jié)構(gòu)名STRUCSTRUC ;結(jié)構(gòu)體,由數(shù)據(jù)定義語句構(gòu)成;結(jié)構(gòu)體,由數(shù)據(jù)定義語句構(gòu)成結(jié)構(gòu)名結(jié)構(gòu)名ENDSENDS 1定義結(jié)構(gòu)變量定義結(jié)構(gòu)變量1結(jié)

59、構(gòu)的引用結(jié)構(gòu)的引用2結(jié)構(gòu)變量名結(jié)構(gòu)變量名. .域名域名2 基址或變址寄存器基址或變址寄存器. .域名域名 4.2.7 4.2.7 模塊定義與通信模塊定義與通信1. 1. 模塊定義模塊定義 NAME/ENDNAME/END1格式:格式:NAME NAME 模塊名模塊名;為模塊命名,可以省略;為模塊命名,可以省略;語句;語句END END 標(biāo)號(hào)標(biāo)號(hào) ;結(jié)束模塊;結(jié)束模塊1說明:說明:2 模塊命名規(guī)則:模塊命名規(guī)則: TITLETITLE語句的前語句的前6 6個(gè)字符個(gè)字符源程序文件名源程序文件名2 主模塊,主模塊,ENDEND后必須跟標(biāo)號(hào)或主過程名后必須跟標(biāo)號(hào)或主過程名啟動(dòng)地址。啟動(dòng)地址。4.2.7

60、 4.2.7 模塊定義與通信模塊定義與通信2. 2. 模塊間通信模塊間通信1格式:格式:PUBLICPUBLIC名字名字 ,名字,名字 ;全局符號(hào)定義;全局符號(hào)定義EXTRNEXTRN名字:類型名字:類型 ,名字:類型,名字:類型 ;外部符號(hào)應(yīng)用;外部符號(hào)應(yīng)用1說明:說明:2 PUBICPUBIC定義的名字必須是本模塊中已定義的符號(hào)。定義的名字必須是本模塊中已定義的符號(hào)。2 EXTRNEXTRN中的名字,表示本模塊中引用,但在其它模塊中用中的名字,表示本模塊中引用,但在其它模塊中用PUBLICPUBLIC定義。定義。2 通常要配對(duì)使用。通常要配對(duì)使用。1注意:注意:幾個(gè)模塊調(diào)用的過程一般都是屬

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論