版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第四章第四章 匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) 匯編語(yǔ)言是利用指令的助記符、符號(hào)地址、標(biāo)號(hào)來編寫的語(yǔ)言,它是機(jī)器語(yǔ)匯編語(yǔ)言是利用指令的助記符、符號(hào)地址、標(biāo)號(hào)來編寫的語(yǔ)言,它是機(jī)器語(yǔ)言的符號(hào)表示,是較低級(jí)的語(yǔ)言。利用匯編語(yǔ)言編寫的程序稱為源程序,指令系統(tǒng)言的符號(hào)表示,是較低級(jí)的語(yǔ)言。利用匯編語(yǔ)言編寫的程序稱為源程序,指令系統(tǒng)中的每條指令都是構(gòu)成源程序的基本語(yǔ)句。但機(jī)器不能識(shí)別源程序,要通過匯編程中的每條指令都是構(gòu)成源程序的基本語(yǔ)句。但機(jī)器不能識(shí)別源程序,要通過匯編程序翻譯成二進(jìn)制代碼的浮動(dòng)目標(biāo)程序,然后由連接程序?qū)⒛繕?biāo)文件與庫(kù)文件相連,序翻譯成二進(jìn)制代碼的浮動(dòng)目標(biāo)程序,然后由連接程序?qū)⒛繕?biāo)文件與
2、庫(kù)文件相連,最后得到可執(zhí)行的程序,才可在機(jī)器上直接運(yùn)行。最后得到可執(zhí)行的程序,才可在機(jī)器上直接運(yùn)行。 一個(gè)完整的匯編程序編寫格式要包括以下幾部分:段定義、段分配、設(shè)置段一個(gè)完整的匯編程序編寫格式要包括以下幾部分:段定義、段分配、設(shè)置段地址、返回地址、返回DOSDOS語(yǔ)句及程序結(jié)束,需要時(shí)加上過程調(diào)用。語(yǔ)句及程序結(jié)束,需要時(shí)加上過程調(diào)用。 (1)(1)匯編語(yǔ)言編寫的原程序是分段的,要定義代碼段、數(shù)據(jù)段、堆棧段,每段匯編語(yǔ)言編寫的原程序是分段的,要定義代碼段、數(shù)據(jù)段、堆棧段,每段由段定義偽指令由段定義偽指令SEGMENTSEGMENT開始,開始,ENDSENDS結(jié)束,并賦予段名區(qū)分不同段。段定義的
3、基本結(jié)束,并賦予段名區(qū)分不同段。段定義的基本格式如下:格式如下: 段名段名 SEGMENTSEGMENT 段名段名 ENDSENDS 原程序中至少有一個(gè)代碼段,此時(shí)數(shù)據(jù)可放在代碼段中;堆棧段如果不定義,原程序中至少有一個(gè)代碼段,此時(shí)數(shù)據(jù)可放在代碼段中;堆棧段如果不定義,由計(jì)算機(jī)自動(dòng)分配。段名可以自己定義,用字母和數(shù)字組成。計(jì)算機(jī)識(shí)別不同的段由計(jì)算機(jī)自動(dòng)分配。段名可以自己定義,用字母和數(shù)字組成。計(jì)算機(jī)識(shí)別不同的段由段分配偽指令由段分配偽指令A(yù)SSUMEASSUME來完成。段分配的格式為:來完成。段分配的格式為: ASSUME CS ASSUME CS:段名,:段名,DSDS:段名,:段名,SSS
4、S:段名,:段名,ESES:段名:段名 (2)(2)過程調(diào)用由偽指令過程調(diào)用由偽指令PROCENDPPROCENDP實(shí)現(xiàn),過程的調(diào)用格式如下實(shí)現(xiàn),過程的調(diào)用格式如下( (也可省略也可省略) ): 過程名過程名 PROC FAR(NEAR)PROC FAR(NEAR);FARFAR表示遠(yuǎn)調(diào)用,表示遠(yuǎn)調(diào)用,NEARNEAR表示近調(diào)用可缺省表示近調(diào)用可缺省 過程名過程名 ENDPENDP (3) (3)若程序已經(jīng)分別定義了數(shù)據(jù)段、堆棧段和附加段,主程序的開始要設(shè)若程序已經(jīng)分別定義了數(shù)據(jù)段、堆棧段和附加段,主程序的開始要設(shè)置這些段的地址。代碼段的地址不能人為設(shè)置,由計(jì)算機(jī)分配。堆棧段和數(shù)據(jù)置這些段的地
5、址。代碼段的地址不能人為設(shè)置,由計(jì)算機(jī)分配。堆棧段和數(shù)據(jù)段設(shè)置的具體語(yǔ)句為;段設(shè)置的具體語(yǔ)句為; MOV AXMOV AX,STACK STACK ;送堆棧段地址;送堆棧段地址 MOV SSMOV SS,AXAX MOV AX, DATA MOV AX, DATA ;送數(shù)據(jù)段地址;送數(shù)據(jù)段地址 MOV DSMOV DS,AXAX (4) (4)程序執(zhí)行完畢要返回程序執(zhí)行完畢要返回DOSDOS操作系統(tǒng),有兩種方式實(shí)現(xiàn)。一種是在程序的操作系統(tǒng),有兩種方式實(shí)現(xiàn)。一種是在程序的開始部分編寫如下語(yǔ)句:開始部分編寫如下語(yǔ)句: PUSH DSPUSH DS MOV AX,0 MOV AX,0 PUSH AX
6、 PUSH AX 將將DSDS的內(nèi)容及的內(nèi)容及0 0作為段地址和偏移地址入棧,在程序結(jié)束時(shí)返回作為段地址和偏移地址入棧,在程序結(jié)束時(shí)返回DOSDOS。以上。以上三句語(yǔ)句必須寫在堆棧段設(shè)置后面,否則堆棧段的設(shè)置使一些指令不起作用了。三句語(yǔ)句必須寫在堆棧段設(shè)置后面,否則堆棧段的設(shè)置使一些指令不起作用了。第二種方法是在程序結(jié)束前使用第二種方法是在程序結(jié)束前使用DOSDOS功能調(diào)用指令,如下所示:功能調(diào)用指令,如下所示: MOV AXMOV AX,4C00H 4C00H INT 21H INT 21H (5) (5)全部源程序用全部源程序用ENDEND語(yǔ)句結(jié)尾,語(yǔ)句結(jié)尾,ENDEND后面可以加上程序執(zhí)
7、行起始的名稱后面可以加上程序執(zhí)行起始的名稱STARTSTART,匯編程序遇見,匯編程序遇見ENDEND語(yǔ)句就結(jié)束。語(yǔ)句就結(jié)束。4.1 4.1 匯編語(yǔ)言程序格式匯編語(yǔ)言程序格式 80868086系統(tǒng)中常用的匯編程序是系統(tǒng)中常用的匯編程序是MASM6.XMASM6.X版本,版本,MASMMASM中可使用的語(yǔ)句分成兩類:中可使用的語(yǔ)句分成兩類:指令性語(yǔ)句和偽指令語(yǔ)句。指令性語(yǔ)句和偽指令語(yǔ)句。一、指令性語(yǔ)句一、指令性語(yǔ)句 指令性語(yǔ)句與機(jī)器指令相對(duì)應(yīng),匯編程序可將它翻譯成目標(biāo)代碼指令性語(yǔ)句與機(jī)器指令相對(duì)應(yīng),匯編程序可將它翻譯成目標(biāo)代碼( (機(jī)器指令機(jī)器指令代碼代碼) )。語(yǔ)句格式為:。語(yǔ)句格式為:標(biāo)號(hào):
8、指令助記符標(biāo)號(hào):指令助記符 操作數(shù),操作數(shù)操作數(shù),操作數(shù) ;注釋;注釋 標(biāo)號(hào)表示本指令語(yǔ)句的符號(hào)地址,標(biāo)號(hào)后面必須緊跟冒號(hào)標(biāo)號(hào)表示本指令語(yǔ)句的符號(hào)地址,標(biāo)號(hào)后面必須緊跟冒號(hào)“:”。 指令助記符是該語(yǔ)句的指令名稱的代表符號(hào),它指出指令的操作類型,匯編指令助記符是該語(yǔ)句的指令名稱的代表符號(hào),它指出指令的操作類型,匯編程序?qū)⑵浞g成機(jī)器指令。它是語(yǔ)句中的關(guān)鍵字,因此不可省略。程序?qū)⑵浞g成機(jī)器指令。它是語(yǔ)句中的關(guān)鍵字,因此不可省略。 操作數(shù)表示參加本指令運(yùn)算的數(shù)據(jù),根據(jù)指令要求可以有一個(gè)或多個(gè)操作數(shù),操作數(shù)表示參加本指令運(yùn)算的數(shù)據(jù),根據(jù)指令要求可以有一個(gè)或多個(gè)操作數(shù),有的指令不需要操作數(shù),多個(gè)操作數(shù)
9、之間用逗號(hào)有的指令不需要操作數(shù),多個(gè)操作數(shù)之間用逗號(hào)“,”隔開,操作數(shù)與指令助記隔開,操作數(shù)與指令助記符之間用空格隔開。操作數(shù)可以是常數(shù)、變量、標(biāo)號(hào)、寄存器名或表達(dá)式。符之間用空格隔開。操作數(shù)可以是常數(shù)、變量、標(biāo)號(hào)、寄存器名或表達(dá)式。二、偽指令語(yǔ)句二、偽指令語(yǔ)句 偽指令語(yǔ)句沒有對(duì)應(yīng)的機(jī)器指令,匯編程序匯編源程序時(shí)對(duì)偽指令進(jìn)行處理,偽指令語(yǔ)句沒有對(duì)應(yīng)的機(jī)器指令,匯編程序匯編源程序時(shí)對(duì)偽指令進(jìn)行處理,它可完成數(shù)據(jù)定義,存儲(chǔ)區(qū)分配,段定義,段分配,指示程序結(jié)束等功能。偽指它可完成數(shù)據(jù)定義,存儲(chǔ)區(qū)分配,段定義,段分配,指示程序結(jié)束等功能。偽指令語(yǔ)句的格式為:令語(yǔ)句的格式為: 名字名字 偽指令指示符偽指
10、令指示符 操作數(shù),操作數(shù)操作數(shù),操作數(shù) ;注釋;注釋 名字是給偽指令取的名稱,它用符號(hào)地址表示,名字后不允許帶冒號(hào)名字是給偽指令取的名稱,它用符號(hào)地址表示,名字后不允許帶冒號(hào)“:”,名字可以省略。偽指令中的名字通常是變量名、段名、過程名、符號(hào)名等。名字可以省略。偽指令中的名字通常是變量名、段名、過程名、符號(hào)名等。 偽指令指示符是匯編程序偽指令指示符是匯編程序MASMMASM規(guī)定的符號(hào),常用的有變量定義語(yǔ)句規(guī)定的符號(hào),常用的有變量定義語(yǔ)句(DB(DB、DW)DW),符號(hào)定義語(yǔ)句符號(hào)定義語(yǔ)句(EQU(EQU、) ),段定義語(yǔ)句,段定義語(yǔ)句(SEGMENT.ENDS)(SEGMENT.ENDS),段
11、分配語(yǔ)句,段分配語(yǔ)句(ASSUME)(ASSUME),結(jié)構(gòu)定義語(yǔ)句結(jié)構(gòu)定義語(yǔ)句(STURC.ENDS)(STURC.ENDS),過程定義語(yǔ)句,過程定義語(yǔ)句(PROR.ENDP)(PROR.ENDP)等類型,后面將詳?shù)阮愋?,后面將詳?xì)說明。細(xì)說明。 操作數(shù)是由偽指令具體要求的,有的偽指令不允許帶操作數(shù),有的偽指令要操作數(shù)是由偽指令具體要求的,有的偽指令不允許帶操作數(shù),有的偽指令要求帶多個(gè)操作數(shù),多個(gè)操作數(shù)之間必須用逗號(hào)分開。操作數(shù)可以是常數(shù)、變量、求帶多個(gè)操作數(shù),多個(gè)操作數(shù)之間必須用逗號(hào)分開。操作數(shù)可以是常數(shù)、變量、字符串、表達(dá)式等。字符串、表達(dá)式等。三、數(shù)據(jù)項(xiàng)三、數(shù)據(jù)項(xiàng) 匯編語(yǔ)言中使用的操作數(shù)
12、,可以是常數(shù),寄存器、存儲(chǔ)器、變量、標(biāo)號(hào)或匯編語(yǔ)言中使用的操作數(shù),可以是常數(shù),寄存器、存儲(chǔ)器、變量、標(biāo)號(hào)或表達(dá)式,其中常數(shù)、變量和標(biāo)號(hào)是三種基本數(shù)據(jù)項(xiàng)。表達(dá)式,其中常數(shù)、變量和標(biāo)號(hào)是三種基本數(shù)據(jù)項(xiàng)。1 1常數(shù)常數(shù) 常數(shù)必須是固定值,沒有屬性,是確定的數(shù)據(jù)。常數(shù)必須是固定值,沒有屬性,是確定的數(shù)據(jù)。2 2變量變量 變量通常指存放在存儲(chǔ)單元中的值,在程序運(yùn)行中是可以修改的。所有的變量通常指存放在存儲(chǔ)單元中的值,在程序運(yùn)行中是可以修改的。所有的變量都具有三個(gè)屬性。變量都具有三個(gè)屬性。 (1)(1)段值段值(SEGMENT)(SEGMENT)指變量所在段的段基址。指變量所在段的段基址。 (2)(2)段
13、內(nèi)偏移地址段內(nèi)偏移地址(OFFSET)(OFFSET):指變量地址與所在段首地址之間的地址偏移字:指變量地址與所在段首地址之間的地址偏移字節(jié)數(shù)。節(jié)數(shù)。 (3)(3)類型類型(TYPE)(TYPE):變量的類型屬性指變量中每個(gè)元素所包含的字節(jié)數(shù),類型有:變量的類型屬性指變量中每個(gè)元素所包含的字節(jié)數(shù),類型有:字節(jié)變量字節(jié)變量(BYTE)(BYTE)、宇變量、宇變量(WORD)(WORD)及雙字變量及雙字變量(DWORD)(DWORD)等。等。3 3標(biāo)號(hào)標(biāo)號(hào) 標(biāo)號(hào)是可執(zhí)行指令語(yǔ)句的地址的符號(hào)表示,它可作為轉(zhuǎn)移指令的目標(biāo)操作標(biāo)號(hào)是可執(zhí)行指令語(yǔ)句的地址的符號(hào)表示,它可作為轉(zhuǎn)移指令的目標(biāo)操作數(shù),以確定程序
14、轉(zhuǎn)向的目標(biāo)地址,它具有三個(gè)屬性。數(shù),以確定程序轉(zhuǎn)向的目標(biāo)地址,它具有三個(gè)屬性。 (1)(1)段值段值(SEGMENT)(SEGMENT):標(biāo)號(hào)所在段的段基址。:標(biāo)號(hào)所在段的段基址。 (2) (2)段內(nèi)偏移地址段內(nèi)偏移地址(OFFSET)(OFFSET):標(biāo)號(hào)地址與所在段的段首址之間的偏移地址字:標(biāo)號(hào)地址與所在段的段首址之間的偏移地址字節(jié)數(shù)。節(jié)數(shù)。 (3)(3)類型類型(TYPE)(TYPE):標(biāo)號(hào)的類型屬性指在轉(zhuǎn)移指令中標(biāo)號(hào)可轉(zhuǎn)移的距離,也稱:標(biāo)號(hào)的類型屬性指在轉(zhuǎn)移指令中標(biāo)號(hào)可轉(zhuǎn)移的距離,也稱距離屬性。類型距離屬性。類型NEARNEAR,表示此標(biāo)號(hào)為近標(biāo)號(hào),只能實(shí)現(xiàn)本代碼段內(nèi)轉(zhuǎn)移或調(diào)用,表示此
15、標(biāo)號(hào)為近標(biāo)號(hào),只能實(shí)現(xiàn)本代碼段內(nèi)轉(zhuǎn)移或調(diào)用,類型類型FARFAR,表示此標(biāo)號(hào)為遠(yuǎn)標(biāo)號(hào),可以作為其它代碼段中的目標(biāo)地址,實(shí)現(xiàn)段間,表示此標(biāo)號(hào)為遠(yuǎn)標(biāo)號(hào),可以作為其它代碼段中的目標(biāo)地址,實(shí)現(xiàn)段間轉(zhuǎn)移或調(diào)用。若標(biāo)號(hào)后面緊跟冒號(hào),表示隱含此標(biāo)號(hào)距離屬性為轉(zhuǎn)移或調(diào)用。若標(biāo)號(hào)后面緊跟冒號(hào),表示隱含此標(biāo)號(hào)距離屬性為NEARNEAR,也可用偽,也可用偽指令將此屬性改為指令將此屬性改為FARFAR。4.2 MASM4.2 MASM中的表達(dá)式中的表達(dá)式一、算術(shù)運(yùn)算符一、算術(shù)運(yùn)算符 加、減、乘、除、加、減、乘、除、MODMOD、SHLSHL、SHRSHR。運(yùn)算對(duì)象與運(yùn)算結(jié)果都是整數(shù)。運(yùn)算對(duì)象與運(yùn)算結(jié)果都是整數(shù)。二、邏
16、輯運(yùn)算符二、邏輯運(yùn)算符 邏輯運(yùn)算符包括邏輯運(yùn)算符包括AND(AND(與與) )、OR(OR(或或) )、NOT(NOT(非非) ),XOR(XOR(異或異或)4)4種,邏輯運(yùn)算符是種,邏輯運(yùn)算符是按位運(yùn)算的,只能對(duì)常數(shù)進(jìn)行運(yùn)算,得到結(jié)果也是常數(shù)。按位運(yùn)算的,只能對(duì)常數(shù)進(jìn)行運(yùn)算,得到結(jié)果也是常數(shù)。三、關(guān)系運(yùn)算符三、關(guān)系運(yùn)算符 關(guān)系運(yùn)算符包括關(guān)系運(yùn)算符包括EQ(EQ(相等相等) )、NE(NE(不等不等) )、LT(LT(小于小于) )、GT(GT(大于大于) )、LE(LE(小于或等小于或等于于) )、GE(GE(大于或等于大于或等于)6)6種。種。 關(guān)系運(yùn)算符的兩個(gè)操作數(shù)必須是數(shù)據(jù),或是同一段
17、內(nèi)的兩個(gè)存儲(chǔ)單元的地址。關(guān)系運(yùn)算符的兩個(gè)操作數(shù)必須是數(shù)據(jù),或是同一段內(nèi)的兩個(gè)存儲(chǔ)單元的地址。進(jìn)行關(guān)系運(yùn)算的比較操作后,結(jié)果是一個(gè)數(shù)值,若結(jié)果為真,輸出全是進(jìn)行關(guān)系運(yùn)算的比較操作后,結(jié)果是一個(gè)數(shù)值,若結(jié)果為真,輸出全是l l,即,即0FFH0FFH或或0FFFFH0FFFFH。若結(jié)果為假,輸出全是。若結(jié)果為假,輸出全是0 0。關(guān)系運(yùn)算符一般與邏輯運(yùn)算符組合起來。關(guān)系運(yùn)算符一般與邏輯運(yùn)算符組合起來使用。使用。 四、數(shù)值返回運(yùn)算符四、數(shù)值返回運(yùn)算符1 1OFFSETOFFSET格式:格式:OFFSETOFFSET變量或標(biāo)號(hào)變量或標(biāo)號(hào)OFFSETOFFSET返回標(biāo)號(hào)或變量的偏移地址值。返回標(biāo)號(hào)或變量的
18、偏移地址值。 2 2SEGSEG格式:格式:SEGSEG變量或標(biāo)號(hào)變量或標(biāo)號(hào)SEGSEG用來取變量或標(biāo)號(hào)的段基值。用來取變量或標(biāo)號(hào)的段基值。 3 3TYPETYPE格式:格式:TYPE TYPE 變量或標(biāo)號(hào)變量或標(biāo)號(hào)TYPETYPE加在變量前,返回變量的類型屬性,加在變量前,返回變量的類型屬性,TYPETYPE加在標(biāo)號(hào)前,返回標(biāo)號(hào)的距離屬性。加在標(biāo)號(hào)前,返回標(biāo)號(hào)的距離屬性。4 4LENGTHLENGTH格式:格式:LENGTH LENGTH 變量變量當(dāng)變量中使用當(dāng)變量中使用DUPDUP時(shí),時(shí),LENGTHLENGTH返回此變量所包含的單元數(shù),對(duì)其它變量則返回返回此變量所包含的單元數(shù),對(duì)其它變量
19、則返回1 1。 5.SIZE5.SIZE格式格式:SIZE:SIZE變量變量SIZESIZE運(yùn)算符加在變量前,返回該變量包含的總字節(jié)數(shù)。運(yùn)算符加在變量前,返回該變量包含的總字節(jié)數(shù)。SIZESIZELENGTHLENGTHTYPETYPE 五、修改屬性運(yùn)算符五、修改屬性運(yùn)算符1.1.段操作符段操作符 格式:段前綴:變量或地址表達(dá)式格式:段前綴:變量或地址表達(dá)式 段前綴有段寄存器段前綴有段寄存器CSCS、DSDS、ESES、SSSS后跟冒號(hào)后跟冒號(hào)“:”,用來表示某個(gè)變量或,用來表示某個(gè)變量或地址被修改到哪個(gè)段寄存器提供的段基址中。地址被修改到哪個(gè)段寄存器提供的段基址中。2 2PTRPTR 格式:
20、類型格式:類型/ /距離距離 PTR PTR 變量或標(biāo)號(hào)變量或標(biāo)號(hào) 其功能是將其功能是將PTRPTR左邊的類屬性賦給右邊的變量或標(biāo)號(hào)。左邊的類屬性賦給右邊的變量或標(biāo)號(hào)。PTRPTR本身并不分配存儲(chǔ)本身并不分配存儲(chǔ)單元,僅給已分配的存儲(chǔ)單元賦予新的屬性,以保證運(yùn)算時(shí)操作數(shù)類型的匹配,單元,僅給已分配的存儲(chǔ)單元賦予新的屬性,以保證運(yùn)算時(shí)操作數(shù)類型的匹配,常與類型常與類型BYTEBYTE、WORDWORD、NEARNEAR、FARFAR等連用。等連用。3 3THISTHIS 格式:變量格式:變量/ /標(biāo)號(hào)標(biāo)號(hào) EQU THIS EQU THIS 類型類型/ /距離距離 THIS THIS的功能是將的
21、功能是將EQU THISEQU THIS右邊的類型右邊的類型/ /距離屬性,賦給左邊的變量距離屬性,賦給左邊的變量/ /標(biāo)號(hào),該標(biāo)號(hào),該變量或標(biāo)號(hào)的段地址和偏移地址與下一個(gè)存儲(chǔ)單元的地址相同。變量或標(biāo)號(hào)的段地址和偏移地址與下一個(gè)存儲(chǔ)單元的地址相同。4 4SHORTSHORT 格式:格式:SHORTSHORT標(biāo)號(hào)標(biāo)號(hào) SHORTSHORT用來說明轉(zhuǎn)移類指令中轉(zhuǎn)向地址的屬性,指出轉(zhuǎn)向的目標(biāo)地址與本指令用來說明轉(zhuǎn)移類指令中轉(zhuǎn)向地址的屬性,指出轉(zhuǎn)向的目標(biāo)地址與本指令之間的距離在之間的距離在128128127127之間,即限制在短轉(zhuǎn)移范圍內(nèi)。之間,即限制在短轉(zhuǎn)移范圍內(nèi)。5 5HIGHHIGH和和LOWL
22、OW 格式:格式:H1GH/LOWH1GH/LOW變量或標(biāo)號(hào)變量或標(biāo)號(hào) HIGHHIGH和和LOWLOW稱為字節(jié)分離運(yùn)算符,對(duì)一個(gè)數(shù)或地址表達(dá)式,稱為字節(jié)分離運(yùn)算符,對(duì)一個(gè)數(shù)或地址表達(dá)式,HIGHHIGH從中分離出從中分離出高位字節(jié),高位字節(jié),LOWLOW分離出低位字節(jié)。分離出低位字節(jié)。 六、其它運(yùn)算符六、其它運(yùn)算符1 1圓括號(hào)圓括號(hào)( ) ( ) 圓括號(hào)用來改變運(yùn)算符的優(yōu)先級(jí)別,圓括號(hào)用來改變運(yùn)算符的優(yōu)先級(jí)別,( )( )中的運(yùn)算符具有最高優(yōu)先權(quán)。中的運(yùn)算符具有最高優(yōu)先權(quán)。2 2方括號(hào)方括號(hào) 方括號(hào)主要用來表示地址表達(dá)式或多重變量的下標(biāo)值。方括號(hào)主要用來表示地址表達(dá)式或多重變量的下標(biāo)值。3
23、3尖括號(hào)尖括號(hào),及圓點(diǎn),及圓點(diǎn)運(yùn)算符在結(jié)構(gòu)中專用,表示結(jié)構(gòu)中的變量在預(yù)置結(jié)構(gòu)付本時(shí)是否修改,修運(yùn)算符在結(jié)構(gòu)中專用,表示結(jié)構(gòu)中的變量在預(yù)置結(jié)構(gòu)付本時(shí)是否修改,修改成什么數(shù)值。改成什么數(shù)值。運(yùn)算符在結(jié)構(gòu)中專用,表示結(jié)構(gòu)付本名與變量名連接在一起,作為預(yù)置的結(jié)運(yùn)算符在結(jié)構(gòu)中專用,表示結(jié)構(gòu)付本名與變量名連接在一起,作為預(yù)置的結(jié)構(gòu)付本中的各個(gè)變量。構(gòu)付本中的各個(gè)變量。4 4MASKMASK和和WIDTHWIDTHMASKMASK與與WIDTHWIDTH運(yùn)算符在記錄中專用。運(yùn)算符在記錄中專用。WIDTHWIDTH為記錄名為記錄名/ /字段名,運(yùn)算后返回?cái)?shù)值表示指定記錄或字段的位的長(zhǎng)度。字段名,運(yùn)算后返回?cái)?shù)值
24、表示指定記錄或字段的位的長(zhǎng)度。MASKMASK為字段名,返回?cái)?shù)值為為字段名,返回?cái)?shù)值為8 8位位/16/16位二進(jìn)制數(shù),對(duì)應(yīng)指定字段的各位置位二進(jìn)制數(shù),對(duì)應(yīng)指定字段的各位置“1”1”,其它位置其它位置“0”0”。 七、優(yōu)先級(jí)七、優(yōu)先級(jí)4.3 4.3 偽指令語(yǔ)句偽指令語(yǔ)句一、數(shù)據(jù)定義語(yǔ)句一、數(shù)據(jù)定義語(yǔ)句格式格式1 1:變量名:變量名 助記符助記符 操作數(shù),操作數(shù)操作數(shù),操作數(shù) ;注釋;注釋格式格式2 2:變量名:變量名 助記符助記符 n DUP(n DUP(操作數(shù),操作數(shù)操作數(shù),操作數(shù)) ) ;注釋;注釋功能:將操作數(shù)存入變量名指定的存儲(chǔ)單元中,或者只分配存儲(chǔ)空間不存入數(shù)功能:將操作數(shù)存入變量名
25、指定的存儲(chǔ)單元中,或者只分配存儲(chǔ)空間不存入數(shù)據(jù)。據(jù)。 變量名變量名它用符號(hào)表示,可以省略,作用與指令語(yǔ)句中的標(biāo)號(hào)相同,但后面不它用符號(hào)表示,可以省略,作用與指令語(yǔ)句中的標(biāo)號(hào)相同,但后面不跟冒號(hào)。匯編程序匯編時(shí)將此變量的助記符后的第一個(gè)字節(jié)的偏移地址作為它的跟冒號(hào)。匯編程序匯編時(shí)將此變量的助記符后的第一個(gè)字節(jié)的偏移地址作為它的符號(hào)地址。符號(hào)地址。助記符助記符所用偽指令助記符主要有:所用偽指令助記符主要有: DBDB:用來定義字節(jié),表示每個(gè)操作數(shù)占用一個(gè)字節(jié)。:用來定義字節(jié),表示每個(gè)操作數(shù)占用一個(gè)字節(jié)。 DWDW;用來定義字,表示每個(gè)操作數(shù)占用一個(gè)字。;用來定義字,表示每個(gè)操作數(shù)占用一個(gè)字。 DD
26、DD:用來定義雙字,表示每個(gè)操作數(shù)占用兩個(gè)字。:用來定義雙字,表示每個(gè)操作數(shù)占用兩個(gè)字。 DQDQ:用來定義四個(gè)字,表示每個(gè)操作數(shù)占用四個(gè)字。:用來定義四個(gè)字,表示每個(gè)操作數(shù)占用四個(gè)字。 DTDT:用來定義十個(gè)字節(jié),表示每個(gè)操作數(shù)占用十個(gè)字節(jié)。:用來定義十個(gè)字節(jié),表示每個(gè)操作數(shù)占用十個(gè)字節(jié)。 二、表達(dá)式賦值語(yǔ)句二、表達(dá)式賦值語(yǔ)句表達(dá)式賦值語(yǔ)句有兩種,賦值語(yǔ)句表達(dá)式賦值語(yǔ)句有兩種,賦值語(yǔ)句EQUEQU和等號(hào)語(yǔ)句,它們均不占用內(nèi)存。和等號(hào)語(yǔ)句,它們均不占用內(nèi)存。1 1賦值語(yǔ)句賦值語(yǔ)句EQUEQU 格式:符號(hào)名格式:符號(hào)名 EQU EQU 表達(dá)式表達(dá)式 功能:用來給變量,標(biāo)號(hào),常數(shù),指令,表達(dá)式等定
27、義一個(gè)符號(hào)名,程序中功能:用來給變量,標(biāo)號(hào),常數(shù),指令,表達(dá)式等定義一個(gè)符號(hào)名,程序中用到用到EQUEQU左邊的變量、標(biāo)號(hào)時(shí)可用右邊的常數(shù)值或表達(dá)式代替,但一經(jīng)定義在同一左邊的變量、標(biāo)號(hào)時(shí)可用右邊的常數(shù)值或表達(dá)式代替,但一經(jīng)定義在同一個(gè)程序模塊中不能重新定義。個(gè)程序模塊中不能重新定義。2 2等號(hào)語(yǔ)句等號(hào)語(yǔ)句 等號(hào)語(yǔ)句等號(hào)語(yǔ)句“”與與EQUEQU語(yǔ)句具有相同功能,區(qū)別僅在于語(yǔ)句具有相同功能,區(qū)別僅在于EQUEQU中左邊的標(biāo)號(hào)不中左邊的標(biāo)號(hào)不允許重新定義,而用允許重新定義,而用“”定義的語(yǔ)句允許重復(fù)定義。定義的語(yǔ)句允許重復(fù)定義。三、段定義語(yǔ)句三、段定義語(yǔ)句1.1.段定義語(yǔ)句段定義語(yǔ)句SEGMENT
28、ENDSSEGMENTENDS 格式格式: : 段名段名 SEGMENT SEGMENT 定位類型定位類型 組合類型組合類型 分類名分類名 邏輯段內(nèi)容邏輯段內(nèi)容 段名段名 ENDSENDS 功能:將一個(gè)邏輯段定義成一個(gè)整體。功能:將一個(gè)邏輯段定義成一個(gè)整體。 段定義語(yǔ)句中的參數(shù)設(shè)置,可以增強(qiáng)偽指令語(yǔ)句的功能。段定義語(yǔ)句允許嵌套段定義語(yǔ)句中的參數(shù)設(shè)置,可以增強(qiáng)偽指令語(yǔ)句的功能。段定義語(yǔ)句允許嵌套設(shè)置,即一個(gè)邏輯段內(nèi)再設(shè)置其它邏輯段,但不允許各個(gè)邏輯段相互交叉設(shè)置。設(shè)置,即一個(gè)邏輯段內(nèi)再設(shè)置其它邏輯段,但不允許各個(gè)邏輯段相互交叉設(shè)置。2.2.段分配語(yǔ)句段分配語(yǔ)句(ASSUME)(ASSUME) 在
29、在8086/80888086/8088系統(tǒng)中存儲(chǔ)器采用分段結(jié)構(gòu),各段容量系統(tǒng)中存儲(chǔ)器采用分段結(jié)構(gòu),各段容量64KB64KB,用戶可以設(shè)置,用戶可以設(shè)置多個(gè)邏輯段,但只允許多個(gè)邏輯段,但只允許4 4個(gè)邏輯段同時(shí)有效,段分配語(yǔ)句用來完成將邏輯段分別個(gè)邏輯段同時(shí)有效,段分配語(yǔ)句用來完成將邏輯段分別定義成代碼段,數(shù)據(jù)段,堆棧段及附加段。定義成代碼段,數(shù)據(jù)段,堆棧段及附加段。格式:格式:ASSUME CSASSUME CS:段名,:段名,DSDS:段名,:段名,SSSS:段名,:段名,ESES:段名:段名 功能:定義功能:定義4 4個(gè)邏輯段,指明段與段寄存器的關(guān)系。個(gè)邏輯段,指明段與段寄存器的關(guān)系。AS
30、SUME NOTHING ASSUME NOTHING 可以取消前面由可以取消前面由ASSUMEASSUME所指定的段寄存器。所指定的段寄存器。例:兩個(gè)例:兩個(gè)1616位無(wú)符號(hào)二進(jìn)制數(shù)相乘。位無(wú)符號(hào)二進(jìn)制數(shù)相乘。DATA SEGMENTDATA SEGMENT D1 DW 1234H D1 DW 1234H D2 DW 5678H D2 DW 5678H P1 DD ? P1 DD ? P2 DD ? P2 DD ?DATA ENDSDATA ENDSSTACK SEGMENT STACK STACKSTACK SEGMENT STACK STACK DW 100 DUP(?) DW 100
31、DUP(?)STACK ENDSSTACK ENDSCODE SEGMENTCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK ASSUME CS:CODE,DS:DATA,SS:STACKMAIN PROC FARMAIN PROC FARSTART:MOV AX,STACKSTART:MOV AX,STACK MOV SS,AX MOV SS,AX PUSH DS PUSH DS SUB AX,AX SUB AX,AX PUSH AX PUSH AX MOV AX,DATA MOV AX,DATA MOV DS,AX MOV DS,AX L1: MOV
32、 AX,D1 L1: MOV AX,D1 MUL D2 MUL D2 MOV BX,OFFSET P1 MOV BX,OFFSET P1 MOV BX,AX MOV BX,AX MOV BX+2,DX MOV BX+2,DX RET RETMAIN ENDPMAIN ENDPCODE ENDSCODE ENDS END START END START四、過程定義語(yǔ)句四、過程定義語(yǔ)句 過程也稱作子程序。在主程序中,經(jīng)常要用到一些程序段,程序段的功能過程也稱作子程序。在主程序中,經(jīng)常要用到一些程序段,程序段的功能和結(jié)構(gòu)相同,僅有一些變量賦值不同,此時(shí)可以將這些程序段獨(dú)立編寫,用過和結(jié)構(gòu)相同,僅有一
33、些變量賦值不同,此時(shí)可以將這些程序段獨(dú)立編寫,用過程定義語(yǔ)句進(jìn)行定義,然后在主程序中對(duì)它進(jìn)行過程調(diào)用。程定義語(yǔ)句進(jìn)行定義,然后在主程序中對(duì)它進(jìn)行過程調(diào)用。 格式:過程名格式:過程名 PROC PROC 屬性屬性 過程內(nèi)容過程內(nèi)容 RET NRET N 過程名過程名 ENDPENDP 功能:定義一個(gè)過程,主程序可以用功能:定義一個(gè)過程,主程序可以用CALLCALL指令調(diào)用它。指令調(diào)用它。 過程名過程名是給所定義的過程取的名字,不可缺省。它是主程序調(diào)用是給所定義的過程取的名字,不可缺省。它是主程序調(diào)用(CALL(CALL指令指令) )的目標(biāo)操作數(shù),即子程序人口的符號(hào)地址。像標(biāo)號(hào)一樣過程名具有三種屬
34、的目標(biāo)操作數(shù),即子程序人口的符號(hào)地址。像標(biāo)號(hào)一樣過程名具有三種屬性:性: 段屬性:為該過程所在段的段基址。段屬性:為該過程所在段的段基址。 偏移地址屬性:指該過程第一個(gè)字節(jié)與段首址之間距離字節(jié)。偏移地址屬性:指該過程第一個(gè)字節(jié)與段首址之間距離字節(jié)。 距離屬性為:距離屬性為:NEARNEAR或或FARFAR。格式中的屬性就指距離屬性,定義。格式中的屬性就指距離屬性,定義NEARNEAR允許過程允許過程在段內(nèi)調(diào)用,定義在段內(nèi)調(diào)用,定義FARFAR允許過程在段間調(diào)用,允許過程在段間調(diào)用,NEARNEAR為缺省使用。為缺省使用。 五、程序開始和結(jié)束語(yǔ)句五、程序開始和結(jié)束語(yǔ)句1.NAME1.NAME 格
35、式:格式:NAME NAME 程序名程序名 功能:為源程序目標(biāo)模塊賦名字。功能:為源程序目標(biāo)模塊賦名字。 NAMENAME為偽指令助記符,放在程序開始,在輸出匯編語(yǔ)言源程序的列表文為偽指令助記符,放在程序開始,在輸出匯編語(yǔ)言源程序的列表文件時(shí),將在每一頁(yè)的開頭打印出該程序名。若源程序中省略件時(shí),將在每一頁(yè)的開頭打印出該程序名。若源程序中省略NAMENAME偽指令,匯編程偽指令,匯編程序?qū)⒃次募髂繕?biāo)模塊的名字。序?qū)⒃次募髂繕?biāo)模塊的名字。 2.ORG2.ORG 格式:格式:ORG ORG 表達(dá)式表達(dá)式 功能:給匯編程序設(shè)置位置指針,指定下面語(yǔ)句的起始偏移地址功能:給匯編程序設(shè)置位置指針,指
36、定下面語(yǔ)句的起始偏移地址 ORGORG是偽指令助記符,不可缺省。是偽指令助記符,不可缺省。 表達(dá)式表達(dá)式給定的偏移地址值,表達(dá)式的計(jì)算結(jié)果必須是正整數(shù)。一般情給定的偏移地址值,表達(dá)式的計(jì)算結(jié)果必須是正整數(shù)。一般情況下段定義語(yǔ)句指出了段的起點(diǎn),偏移地址為況下段定義語(yǔ)句指出了段的起點(diǎn),偏移地址為0 0,段內(nèi)各個(gè)語(yǔ)句或數(shù)據(jù)的地址由,段內(nèi)各個(gè)語(yǔ)句或數(shù)據(jù)的地址由段地址開始依次類推可確定。當(dāng)用戶要求指定某條指令或數(shù)據(jù)為某個(gè)指定地址時(shí),段地址開始依次類推可確定。當(dāng)用戶要求指定某條指令或數(shù)據(jù)為某個(gè)指定地址時(shí),可用可用ORGORG語(yǔ)句來改變,語(yǔ)句來改變,ORGORG語(yǔ)句可以放在程序的任何位置。語(yǔ)句可以放在程序的
37、任何位置。 3.END3.END 格式:格式:END END 標(biāo)號(hào)名標(biāo)號(hào)名 功能:標(biāo)記匯編源程序結(jié)束。功能:標(biāo)記匯編源程序結(jié)束。 ENDEND是偽指令助記符,不可缺省,放在源程序的最后一行,每個(gè)模塊只是偽指令助記符,不可缺省,放在源程序的最后一行,每個(gè)模塊只有一個(gè)有一個(gè)ENDEND,匯編程序到,匯編程序到ENDEND語(yǔ)句停止匯編。語(yǔ)句停止匯編。 標(biāo)號(hào)名標(biāo)號(hào)名是該程序中第一條可執(zhí)行語(yǔ)句的標(biāo)號(hào)名,可以缺省,若一個(gè)程是該程序中第一條可執(zhí)行語(yǔ)句的標(biāo)號(hào)名,可以缺省,若一個(gè)程序包含多個(gè)模塊,序包含多個(gè)模塊,ENDEND后面帶的標(biāo)號(hào)為主程序模塊中的標(biāo)號(hào)名稱。后面帶的標(biāo)號(hào)為主程序模塊中的標(biāo)號(hào)名稱。 六、結(jié)構(gòu)定
38、義語(yǔ)句六、結(jié)構(gòu)定義語(yǔ)句1.1.結(jié)構(gòu)定義結(jié)構(gòu)定義 格式:結(jié)構(gòu)名格式:結(jié)構(gòu)名 STRUCSTRUC ( (用用DBDB,DWDW,DDDD等語(yǔ)句定義結(jié)構(gòu)中數(shù)據(jù)變量等語(yǔ)句定義結(jié)構(gòu)中數(shù)據(jù)變量) ) 結(jié)構(gòu)名結(jié)構(gòu)名 ENDSENDS 功能功能: :結(jié)構(gòu)定義語(yǔ)句可以把各種不同類型的數(shù)據(jù)放在同一個(gè)數(shù)據(jù)結(jié)構(gòu)中,便結(jié)構(gòu)定義語(yǔ)句可以把各種不同類型的數(shù)據(jù)放在同一個(gè)數(shù)據(jù)結(jié)構(gòu)中,便于某些數(shù)據(jù)處理的需要。于某些數(shù)據(jù)處理的需要。 結(jié)構(gòu)名結(jié)構(gòu)名結(jié)構(gòu)定義的名稱結(jié)構(gòu)定義的名稱, ,不可缺省,在不可缺省,在STRUCSTRUC與與ENDSENDS前的結(jié)構(gòu)名要相同,前的結(jié)構(gòu)名要相同,不允許超前引用。不允許超前引用。 STRUCENDS
39、STRUCENDS結(jié)構(gòu)定義偽指令助記符,不可缺省,必須成對(duì)出現(xiàn)。結(jié)構(gòu)定義偽指令助記符,不可缺省,必須成對(duì)出現(xiàn)。 結(jié)構(gòu)中數(shù)據(jù)變量用結(jié)構(gòu)中數(shù)據(jù)變量用DBDB,DWDW,DDDD等變量定義語(yǔ)句進(jìn)行定義,定義后的結(jié)構(gòu)未分等變量定義語(yǔ)句進(jìn)行定義,定義后的結(jié)構(gòu)未分配存儲(chǔ)空間,結(jié)構(gòu)中各個(gè)變量具有各自的局部偏移量,它是指各變量的第一字節(jié)配存儲(chǔ)空間,結(jié)構(gòu)中各個(gè)變量具有各自的局部偏移量,它是指各變量的第一字節(jié)與結(jié)構(gòu)起始地址之間的字節(jié)距離。它們的類型屬性取決于所采用的變量定義語(yǔ)句。與結(jié)構(gòu)起始地址之間的字節(jié)距離。它們的類型屬性取決于所采用的變量定義語(yǔ)句。只有在結(jié)構(gòu)被預(yù)置后,才有確定的存儲(chǔ)單元位置。只有在結(jié)構(gòu)被預(yù)置后,
40、才有確定的存儲(chǔ)單元位置。2 2結(jié)構(gòu)付本預(yù)置結(jié)構(gòu)付本預(yù)置 結(jié)構(gòu)定義后,在匯編過程中不產(chǎn)生目標(biāo)代碼,也不分配存儲(chǔ)空間,必須先預(yù)結(jié)構(gòu)定義后,在匯編過程中不產(chǎn)生目標(biāo)代碼,也不分配存儲(chǔ)空間,必須先預(yù)置結(jié)構(gòu)付本,匯編程序給每個(gè)結(jié)構(gòu)付本分配存儲(chǔ)空間置結(jié)構(gòu)付本,匯編程序給每個(gè)結(jié)構(gòu)付本分配存儲(chǔ)空間, ,此時(shí)結(jié)構(gòu)中的變量才與存此時(shí)結(jié)構(gòu)中的變量才與存儲(chǔ)單元發(fā)生關(guān)聯(lián)。結(jié)構(gòu)中允許修改的變量在不同的結(jié)構(gòu)付本中可被修改成不同的儲(chǔ)單元發(fā)生關(guān)聯(lián)。結(jié)構(gòu)中允許修改的變量在不同的結(jié)構(gòu)付本中可被修改成不同的數(shù)值。數(shù)值。 預(yù)置結(jié)構(gòu)付本的格式有如下兩種。預(yù)置結(jié)構(gòu)付本的格式有如下兩種。 格式格式1 1:結(jié)構(gòu)付本名:結(jié)構(gòu)付本名 結(jié)構(gòu)名結(jié)構(gòu)名
41、;注釋;注釋 格式格式2 2:結(jié)構(gòu)付本名:結(jié)構(gòu)付本名 結(jié)構(gòu)名結(jié)構(gòu)名 N DUP (N DUP () ) ;注釋;注釋 結(jié)構(gòu)付本名結(jié)構(gòu)付本名是給所預(yù)置的結(jié)構(gòu)付本起的名字,可以缺省。是給所預(yù)置的結(jié)構(gòu)付本起的名字,可以缺省。 結(jié)構(gòu)名結(jié)構(gòu)名與結(jié)構(gòu)定義時(shí)的結(jié)構(gòu)名相同,不可缺省。與結(jié)構(gòu)定義時(shí)的結(jié)構(gòu)名相同,不可缺省。 尖括號(hào)尖括號(hào)為專用運(yùn)算符,表示在預(yù)置付本時(shí),結(jié)構(gòu)中的變量改成什么值,為專用運(yùn)算符,表示在預(yù)置付本時(shí),結(jié)構(gòu)中的變量改成什么值,也可以不進(jìn)行修改。也可以不進(jìn)行修改。 尖括號(hào)中的元素值,可以缺省,表示此結(jié)構(gòu)付本對(duì)原結(jié)構(gòu)中的所有變量不進(jìn)尖括號(hào)中的元素值,可以缺省,表示此結(jié)構(gòu)付本對(duì)原結(jié)構(gòu)中的所有變量不進(jìn)
42、行修改。若有多個(gè)元素值,它們之間用逗號(hào)分開,對(duì)不修改的變量用逗號(hào)表示,行修改。若有多個(gè)元素值,它們之間用逗號(hào)分開,對(duì)不修改的變量用逗號(hào)表示,修改的元素值用修改量代替,其后序變量保持不變時(shí),可不再寫元素值。修改的元素值用修改量代替,其后序變量保持不變時(shí),可不再寫元素值。 若用第二種格式預(yù)置結(jié)構(gòu)付本,若用第二種格式預(yù)置結(jié)構(gòu)付本,N N表示需要預(yù)置相同的結(jié)構(gòu)付本的個(gè)數(shù)。表示需要預(yù)置相同的結(jié)構(gòu)付本的個(gè)數(shù)。七、外部偽指令和對(duì)準(zhǔn)偽指令七、外部偽指令和對(duì)準(zhǔn)偽指令 1 1外部偽指令外部偽指令 程序中包含多個(gè)模塊時(shí),有些程序或數(shù)據(jù)在各個(gè)模塊間要相互共享,可用外程序中包含多個(gè)模塊時(shí),有些程序或數(shù)據(jù)在各個(gè)模塊間要相
43、互共享,可用外部偽指令部偽指令PUBLICPUBLIC和和EXTRNEXTRN來實(shí)現(xiàn)此功能。其中來實(shí)現(xiàn)此功能。其中PUBLICPUBLIC用來定義共享模塊,用來定義共享模塊,EXTRNEXTRN用用來調(diào)用共享模塊。來調(diào)用共享模塊。格式:格式: PUBLIC PUBLIC 名稱,名稱,名稱,名稱, ;注釋;注釋 EXTRN EXTRN 名稱:類型,名稱:類型,名稱:類型,名稱:類型, ;注釋;注釋 2 2對(duì)準(zhǔn)偽指令對(duì)準(zhǔn)偽指令格式:格式:EVENEVEN功能:功能:EVENEVEN偽指令使下一語(yǔ)句的地址調(diào)整為偶地址。偽指令使下一語(yǔ)句的地址調(diào)整為偶地址。EVENEVEN直接放在某一語(yǔ)句前,匯編程序匯
44、編時(shí)就會(huì)完成將地址調(diào)整在偶地址上。直接放在某一語(yǔ)句前,匯編程序匯編時(shí)就會(huì)完成將地址調(diào)整在偶地址上。地址計(jì)數(shù)器的值地址計(jì)數(shù)器的值$表示當(dāng)前正在匯編的指令的地址表示當(dāng)前正在匯編的指令的地址 。3.LABEL3.LABEL LABEL LABEL偽指令給已定義的變量或標(biāo)號(hào)取另一個(gè)名字,并可重新定義它的類偽指令給已定義的變量或標(biāo)號(hào)取另一個(gè)名字,并可重新定義它的類型屬性,使同一變量或標(biāo)號(hào)在不同地方被引用時(shí),可采用不同的名字,具有型屬性,使同一變量或標(biāo)號(hào)在不同地方被引用時(shí),可采用不同的名字,具有不同的類型屬性,這樣提高了程序的靈活性。不同的類型屬性,這樣提高了程序的靈活性。 格式:名稱格式:名稱 LABE
45、L LABEL 類型屬性類型屬性 名稱名稱為為L(zhǎng)ABELLABEL語(yǔ)句下一行所使用的語(yǔ)句中的變量或標(biāo)號(hào)取的別名。語(yǔ)句下一行所使用的語(yǔ)句中的變量或標(biāo)號(hào)取的別名。 LABELLABEL偽指令助記符,不可缺省。偽指令助記符,不可缺省。 類型屬性類型屬性規(guī)定了所起別名的變量或標(biāo)號(hào)的類型,此別名與原變量標(biāo)規(guī)定了所起別名的變量或標(biāo)號(hào)的類型,此別名與原變量標(biāo)號(hào)具有相同的段基址及偏移地址。號(hào)具有相同的段基址及偏移地址。八、八、 高檔微機(jī)增加的偽指令高檔微機(jī)增加的偽指令模型方式的基本格式如下;模型方式的基本格式如下; MODEL SMALL MODEL SMALL ;存儲(chǔ)格式偽指令;存儲(chǔ)格式偽指令 STACK
46、STACK ;堆棧段定義;堆棧段定義 DATADATA . . ;數(shù)據(jù)定義;數(shù)據(jù)定義 CODECODE STARTUP STARTUP ;程序開始偽指令;程序開始偽指令 . . ;程序代碼;程序代碼 EXIT 0 EXIT 0 ;程序結(jié)束偽指令;程序結(jié)束偽指令 . . ;子程序代碼;子程序代碼 END END ;匯編結(jié)束偽指令;匯編結(jié)束偽指令 4.4 DOS4.4 DOS系統(tǒng)功能調(diào)用和系統(tǒng)功能調(diào)用和BIOSBIOS中斷調(diào)用中斷調(diào)用一、一、DOSDOS功能調(diào)用功能調(diào)用 DOSDOS系統(tǒng)功能調(diào)用分別實(shí)現(xiàn)設(shè)備管理、文件讀寫、文件管理和目錄管理等系統(tǒng)功能調(diào)用分別實(shí)現(xiàn)設(shè)備管理、文件讀寫、文件管理和目錄管
47、理等功能。每個(gè)子程序?qū)?yīng)一個(gè)功能號(hào),所有的系統(tǒng)功能調(diào)用的格式是一致的,按功能。每個(gè)子程序?qū)?yīng)一個(gè)功能號(hào),所有的系統(tǒng)功能調(diào)用的格式是一致的,按下面下面4 4步進(jìn)行:步進(jìn)行: (1) (1)系統(tǒng)功能號(hào)送到系統(tǒng)功能號(hào)送到AHAH寄存器中;寄存器中; (2)(2)入口參數(shù)送到指定寄存器中;入口參數(shù)送到指定寄存器中; (3)(3)用用1NT 21H1NT 21H指令執(zhí)行功能調(diào)用;指令執(zhí)行功能調(diào)用; (4)(4)根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況。根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況。 有些系統(tǒng)功能調(diào)用比較簡(jiǎn)單,不需要設(shè)置人口參數(shù)或者沒有出口參數(shù)。有些系統(tǒng)功能調(diào)用比較簡(jiǎn)單,不需要設(shè)置人口參數(shù)或者沒有出口參數(shù)。D
48、OSDOS系統(tǒng)功能調(diào)用的功能及入口系統(tǒng)功能調(diào)用的功能及入口/ /出口參數(shù)表,詳細(xì)見附錄出口參數(shù)表,詳細(xì)見附錄F F。1.DOS1.DOS鍵盤功能調(diào)用鍵盤功能調(diào)用 例例: : 開辟一個(gè)緩沖區(qū),從鍵盤輸入一個(gè)字符串,將輸入的字符數(shù)開辟一個(gè)緩沖區(qū),從鍵盤輸入一個(gè)字符串,將輸入的字符數(shù)CLCL寄存器寄存器, ,并并將指針指向字符串的第一個(gè)字符。將指針指向字符串的第一個(gè)字符。 BUFF DB 100BUFF DB 100 DB ? DB ? DB 100 DUP(?) DB 100 DUP(?)MOV AX,DATAMOV AX,DATAMOV DS,AXMOV DS,AXMOV DX,OFFSET B
49、UFFMOV DX,OFFSET BUFFMOV AH,0AHMOV AH,0AHINT 21HINT 21HMOV BX,DXMOV BX,DXMOV CL,BX+1MOV CL,BX+1ADD DX,2ADD DX,22.DOS2.DOS顯示功能調(diào)用顯示功能調(diào)用3.DOS3.DOS打印功能調(diào)用打印功能調(diào)用 5 5號(hào)功能調(diào)用完成將號(hào)功能調(diào)用完成將DLDL寄存器中的字符送到打印機(jī),若需要回車換行,也寄存器中的字符送到打印機(jī),若需要回車換行,也同樣將回車換行的字符碼送到同樣將回車換行的字符碼送到DLDL寄存器。寄存器。4.4.日期與時(shí)間設(shè)置日期與時(shí)間設(shè)置 5.5.異步通訊異步通訊6.6.返回操作
50、系統(tǒng)返回操作系統(tǒng) 4CH4CH功能調(diào)用能夠結(jié)束當(dāng)前正在執(zhí)行的程序,返回操作系統(tǒng),屏幕顯示操作功能調(diào)用能夠結(jié)束當(dāng)前正在執(zhí)行的程序,返回操作系統(tǒng),屏幕顯示操作提示符。提示符。 MOV AHMOV AH,4CH4CH INT 21H INT 21H 此功能調(diào)用無(wú)入口參數(shù)。此功能調(diào)用無(wú)入口參數(shù)。 二、二、BIOSBIOS中斷調(diào)用中斷調(diào)用 駐留在駐留在ROMROM中的中的BI0SBI0S提供了系統(tǒng)加電自檢,引導(dǎo)裝入提供了系統(tǒng)加電自檢,引導(dǎo)裝入I/0I/0設(shè)備的處理程序及接設(shè)備的處理程序及接口控制等功能模塊來處理所有的系統(tǒng)中斷。與口控制等功能模塊來處理所有的系統(tǒng)中斷。與DOSDOS功能調(diào)用相同,用戶可以直
51、接功能調(diào)用相同,用戶可以直接用指令設(shè)置參數(shù),然后中斷調(diào)用用指令設(shè)置參數(shù),然后中斷調(diào)用BIOSBIOS中的程序。中的程序。 4.5 4.5 程序設(shè)計(jì)方法程序設(shè)計(jì)方法 一般來說設(shè)計(jì)匯編語(yǔ)言源程序的基本步驟如下:一般來說設(shè)計(jì)匯編語(yǔ)言源程序的基本步驟如下:(1)(1)分析問題,抽象出描述問題的數(shù)學(xué)模型,并確定實(shí)現(xiàn)數(shù)學(xué)模型的算法。分析問題,抽象出描述問題的數(shù)學(xué)模型,并確定實(shí)現(xiàn)數(shù)學(xué)模型的算法。(2)(2)繪制程序流程圖,通常先畫粗框圖,在結(jié)構(gòu)模塊中再畫細(xì)框圖。框圖一般有起繪制程序流程圖,通常先畫粗框圖,在結(jié)構(gòu)模塊中再畫細(xì)框圖??驁D一般有起始框,執(zhí)行框,判斷框和終止框,如下圖示:始框,執(zhí)行框,判斷框和終止框
52、,如下圖示: (3)(3)分配存儲(chǔ)空間及工作單元。分配數(shù)據(jù)段,堆棧段,程序段各在內(nèi)存什么位置,分配存儲(chǔ)空間及工作單元。分配數(shù)據(jù)段,堆棧段,程序段各在內(nèi)存什么位置,各個(gè)寄存器主要做什么用。各個(gè)寄存器主要做什么用。(4)(4)按流程圖設(shè)計(jì)編寫程序。按流程圖設(shè)計(jì)編寫程序。(5)(5)靜態(tài)檢查,上機(jī)調(diào)試。靜態(tài)檢查,上機(jī)調(diào)試。( (一般分段調(diào)試較好一般分段調(diào)試較好) )(6)(6)程序運(yùn)行,結(jié)果分析。程序運(yùn)行,結(jié)果分析。 在進(jìn)行匯編語(yǔ)言源程序設(shè)計(jì)時(shí),通常用到四種程序結(jié)構(gòu):順序結(jié)構(gòu),分支在進(jìn)行匯編語(yǔ)言源程序設(shè)計(jì)時(shí),通常用到四種程序結(jié)構(gòu):順序結(jié)構(gòu),分支結(jié)構(gòu),循環(huán)結(jié)構(gòu),子程序結(jié)構(gòu)。結(jié)構(gòu),循環(huán)結(jié)構(gòu),子程序結(jié)構(gòu)。
53、 一、順序結(jié)構(gòu)一、順序結(jié)構(gòu) 順序結(jié)構(gòu)的程序一般是簡(jiǎn)單程序,程序順序執(zhí)行,無(wú)分支,無(wú)循環(huán),也無(wú)轉(zhuǎn)順序結(jié)構(gòu)的程序一般是簡(jiǎn)單程序,程序順序執(zhí)行,無(wú)分支,無(wú)循環(huán),也無(wú)轉(zhuǎn)移,圖中沒有判斷框。移,圖中沒有判斷框。 例:內(nèi)存中例:內(nèi)存中TABLETABLE開始存放開始存放0 09 9的平方值,通過人機(jī)對(duì)話,當(dāng)任給定一個(gè)數(shù)的平方值,通過人機(jī)對(duì)話,當(dāng)任給定一個(gè)數(shù)X(0X(09)9),查表得,查表得X X的平方值,放在的平方值,放在ALAL中。中。 MODEL SMALIMODEL SMALI 386386 STACK 100HSTACK 100H DATADATA TABLE DB 0 TABLE DB 0,1
54、 1,4 4,9 9,1616,2525,3636,4949,6464,8181 BUF DBP1ease input One number(09) BUF DBP1ease input One number(09):,0DH0DH,0AH0AH, $ CODE CODE STARTUP STARTUP ;說明程序起點(diǎn),設(shè)置;說明程序起點(diǎn),設(shè)置DS-SSDS-SS MOV DX MOV DX,OFFSEOFFSE丁丁BUF BUF ;9 9號(hào)功能調(diào)用,提示輸入一個(gè)數(shù)號(hào)功能調(diào)用,提示輸入一個(gè)數(shù) MOV AHMOV AH,9 9 INT 21H INT 21H MOV AH MOV AH,1 1
55、;1 1號(hào)功能調(diào)用,鍵人數(shù)送人號(hào)功能調(diào)用,鍵人數(shù)送人ALAL INT 21H INT 21H AND AL AND AL,0FH0FH MOV BX MOV BX,OFFSET TABLE OFFSET TABLE MOV AH MOV AH,0 0 ;查表得輸人數(shù)得平方值;查表得輸人數(shù)得平方值 ADD BXADD BX,AXAX MOV AL MOV AL,BX BX ;保存查表結(jié)果到;保存查表結(jié)果到ALAL EXIT 0EXIT 0 END END二、分支結(jié)構(gòu)二、分支結(jié)構(gòu)1.1.分支結(jié)構(gòu)分支結(jié)構(gòu) 一般情況下,程序順序執(zhí)行,但經(jīng)常要求程序根據(jù)不同條件選擇不同的處理一般情況下,程序順序執(zhí)行,但
56、經(jīng)常要求程序根據(jù)不同條件選擇不同的處理方法,這就需要用到分支結(jié)構(gòu),分支結(jié)構(gòu)如下圖所示。方法,這就需要用到分支結(jié)構(gòu),分支結(jié)構(gòu)如下圖所示。 2.2.多分支結(jié)構(gòu)多分支結(jié)構(gòu) 有的分支結(jié)構(gòu)為多分支,可以利用多個(gè)條件轉(zhuǎn)移指令來實(shí)現(xiàn),依次測(cè)試條件有的分支結(jié)構(gòu)為多分支,可以利用多個(gè)條件轉(zhuǎn)移指令來實(shí)現(xiàn),依次測(cè)試條件是否滿足,若滿足轉(zhuǎn)入相應(yīng)分支人口,若不滿足繼續(xù)向下測(cè)試,直到全部測(cè)試完。是否滿足,若滿足轉(zhuǎn)入相應(yīng)分支人口,若不滿足繼續(xù)向下測(cè)試,直到全部測(cè)試完。這種方法編程簡(jiǎn)單,直觀,但運(yùn)行速度慢,要依次檢查才能進(jìn)入要求的人口。這種方法編程簡(jiǎn)單,直觀,但運(yùn)行速度慢,要依次檢查才能進(jìn)入要求的人口。例:有例:有8 8個(gè)加
57、工子程序,人口地址分別為個(gè)加工子程序,人口地址分別為P1P1,P2P2,P8P8。編程實(shí)現(xiàn)檢測(cè)鍵盤輸入。編程實(shí)現(xiàn)檢測(cè)鍵盤輸入命令,使系統(tǒng)分別轉(zhuǎn)向命令,使系統(tǒng)分別轉(zhuǎn)向8 8個(gè)加工子程序。個(gè)加工子程序。 MOV AHMOV AH,1 1 INT 21H INT 21H ;1 1號(hào)功能調(diào)用,鍵盤接收號(hào)功能調(diào)用,鍵盤接收 CMP ALCMP AL,l l ;鍵值為;鍵值為1 1,轉(zhuǎn),轉(zhuǎn)1 1號(hào)加工子程序號(hào)加工子程序 JE PlJE Pl CMP AL CMP AL,2 2 ;鍵值為;鍵值為2 2,轉(zhuǎn),轉(zhuǎn)2 2號(hào)加工子程序號(hào)加工子程序 JE P2JE P2 CMP AL CMP AL,88 JE P8
58、JE P8 ;鍵值非;鍵值非1 18 8,轉(zhuǎn)向停止,轉(zhuǎn)向停止 JMP STJMP ST P1 P1: ;1 1號(hào)加工子程序號(hào)加工子程序 P8P8: ST ST: HLTHLT3.3.跳轉(zhuǎn)表實(shí)現(xiàn)多分跳轉(zhuǎn)表實(shí)現(xiàn)多分 利用跳轉(zhuǎn)表實(shí)現(xiàn)多分支,就克服了上面方法的缺點(diǎn),可以直接找到相應(yīng)人口。利用跳轉(zhuǎn)表實(shí)現(xiàn)多分支,就克服了上面方法的缺點(diǎn),可以直接找到相應(yīng)人口。利用這種方法要在存儲(chǔ)器中先建立一個(gè)跳轉(zhuǎn)表,表中包括每個(gè)分支的人口地址,利用這種方法要在存儲(chǔ)器中先建立一個(gè)跳轉(zhuǎn)表,表中包括每個(gè)分支的人口地址,跳轉(zhuǎn)指令或關(guān)鍵字,利用此表就可實(shí)現(xiàn)分支結(jié)構(gòu)。跳轉(zhuǎn)指令或關(guān)鍵字,利用此表就可實(shí)現(xiàn)分支結(jié)構(gòu)。(1)(1)根據(jù)表內(nèi)地址
59、分支根據(jù)表內(nèi)地址分支 跳轉(zhuǎn)表中存放了每個(gè)分支程序的人口地址,只要找到表地址,再將其中內(nèi)容跳轉(zhuǎn)表中存放了每個(gè)分支程序的人口地址,只要找到表地址,再將其中內(nèi)容取出,即可得到每個(gè)分支的人口地址。取出,即可得到每個(gè)分支的人口地址。 表地址跳轉(zhuǎn)表首地址表地址跳轉(zhuǎn)表首地址+ +偏移地址偏移地址 圖圖(a)(a)給出了跳轉(zhuǎn)表在內(nèi)存中的存放方法,圖給出了跳轉(zhuǎn)表在內(nèi)存中的存放方法,圖(b)(b)給出了按表地址分支的流程圖。給出了按表地址分支的流程圖。例:將上例中程序改成用跳轉(zhuǎn)表來實(shí)現(xiàn)例:將上例中程序改成用跳轉(zhuǎn)表來實(shí)現(xiàn) BASE DW P1BASE DW P1,P2P2,P3P3,P4 P4 ;定義跳轉(zhuǎn)表;定義跳
60、轉(zhuǎn)表 DW P5DW P5,P6P6,P7P7,P8P8 KEY DB KEY DB ? MOV AHMOV AH,1 1 ;鍵值在;鍵值在ALAL中中 INT 21HINT 21H AND AL AND AL,OFHOFH MOV BX MOV BX,OFFSET BASE OFFSET BASE ;取首地址;取首地址 MOV AHMOV AH,0 0 ADD AL ADD AL,ALAL ADD BX ADD BX,AX AX ;求表地址;求表地址 JMP WORD PTRBX JMP WORD PTRBX ;轉(zhuǎn)入相應(yīng)入口地址;轉(zhuǎn)入相應(yīng)入口地址 :(2)(2)根據(jù)表內(nèi)指令分支根據(jù)表內(nèi)指令分
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024秋七年級(jí)英語(yǔ)上冊(cè) Unit 2 This is my sister說課稿(新版)人教新目標(biāo)版
- 11《百年孤獨(dú)(節(jié)選)》說課稿 2024-2025學(xué)年統(tǒng)編版高中語(yǔ)文選擇性必修上冊(cè)
- 8安全記心上 第一課時(shí) 說課稿-2024-2025學(xué)年道德與法治三年級(jí)上冊(cè)統(tǒng)編版
- 二零二五年度大健康產(chǎn)業(yè)合作合同范本4篇
- 二零二五年智能燈具產(chǎn)品區(qū)域代理銷售合作合同3篇
- 2024版兼職插畫師聘用合同
- 2025年二零二五民辦學(xué)校教師合同解除與續(xù)簽協(xié)議4篇
- 2025年科技行業(yè)股權(quán)清算與清算人指定合同
- 二零二五年度綠化苗木種植與生態(tài)農(nóng)業(yè)結(jié)合合同3篇
- 二零二五版生態(tài)保護(hù)區(qū)用水管理合同模板3篇
- 第1本書出體旅程journeys out of the body精教版2003版
- 臺(tái)資企業(yè)A股上市相關(guān)資料
- 電 梯 工 程 預(yù) 算 書
- 羅盤超高清圖
- 參會(huì)嘉賓簽到表
- 機(jī)械車間員工績(jī)效考核表
- 2.48低危胸痛患者后繼治療評(píng)估流程圖
- 人力資源管理之績(jī)效考核 一、什么是績(jī)效 所謂績(jī)效簡(jiǎn)單的講就是對(duì)
- 山東省醫(yī)院目錄
- 云南地方本科高校部分基礎(chǔ)研究
- 廢品管理流程圖
評(píng)論
0/150
提交評(píng)論