




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、13.4 匯編語(yǔ)言程序格式與常用偽指令23.4.1 匯編語(yǔ)言程序格式1.一般格式 一個(gè)完整的匯編語(yǔ)言程序往往需要分成若干段來(lái)書(shū)寫(xiě)。一個(gè)完整的匯編語(yǔ)言程序往往需要分成若干段來(lái)書(shū)寫(xiě)。一般情況下,格式如下:一般情況下,格式如下: 3NAME1 SEGMENT 語(yǔ)句語(yǔ)句1 NAME1 ENDSNAME2 SEGMENT 語(yǔ)句語(yǔ)句 NAME2 ENDS END 標(biāo)號(hào)標(biāo)號(hào)n任何一個(gè)匯編語(yǔ)言程序都必須有一個(gè)邏輯代任何一個(gè)匯編語(yǔ)言程序都必須有一個(gè)邏輯代碼段和一條指示源程序結(jié)束的偽指令碼段和一條指示源程序結(jié)束的偽指令END。n堆棧段、數(shù)據(jù)段和附加段可根據(jù)程序的需要堆棧段、數(shù)據(jù)段和附加段可根據(jù)程序的需要選用。選用
2、。41.一般格式52. 匯編語(yǔ)言語(yǔ)句格式匯編語(yǔ)言語(yǔ)句格式指令性語(yǔ)句指令性語(yǔ)句指示性語(yǔ)句指示性語(yǔ)句CPU執(zhí)行的語(yǔ)句,執(zhí)行的語(yǔ)句,能夠生成目標(biāo)代碼能夠生成目標(biāo)代碼CPU不執(zhí)行,而由匯不執(zhí)行,而由匯編程序執(zhí)行的語(yǔ)句,編程序執(zhí)行的語(yǔ)句,不生成目標(biāo)代碼(偽不生成目標(biāo)代碼(偽指令)指令)62. 匯編語(yǔ)言語(yǔ)句格式匯編語(yǔ)言語(yǔ)句格式 指令性語(yǔ)句: 標(biāo)號(hào): 前綴 助記符 操作數(shù),操作數(shù) ;注釋指令的符號(hào)地址指令的符號(hào)地址標(biāo)號(hào)后要有冒號(hào)標(biāo)號(hào)后要有冒號(hào)操作碼,如有前綴操作碼,如有前綴,需用空格分開(kāi),需用空格分開(kāi)注釋前加分號(hào)注釋前加分號(hào)7指示性語(yǔ)句格式(偽指令語(yǔ)句)符號(hào)名符號(hào)名 偽指令偽指令 參數(shù)參數(shù) ;注釋?zhuān)蛔⑨屪兞?/p>
3、的符號(hào)地址變量的符號(hào)地址其后不加冒號(hào)其后不加冒號(hào)對(duì)匯編過(guò)程的進(jìn)一步對(duì)匯編過(guò)程的進(jìn)一步說(shuō)明,參數(shù)個(gè)數(shù)由偽說(shuō)明,參數(shù)個(gè)數(shù)由偽指令確定指令確定指示匯編程序應(yīng)指示匯編程序應(yīng)執(zhí)行的具體操作執(zhí)行的具體操作宏指令語(yǔ)句 標(biāo)號(hào):標(biāo)號(hào): 宏指令名宏指令名 參數(shù)參數(shù)1 ,參數(shù),參數(shù)2 , ;注釋?zhuān)蛔⑨?宏指令是將程序中多次使用的程序段定義為一宏指令是將程序中多次使用的程序段定義為一條指令。在對(duì)宏指令匯編時(shí),用原程序代碼取條指令。在對(duì)宏指令匯編時(shí),用原程序代碼取代宏指令。代宏指令。93.4.2 常量、變量、表達(dá)式與運(yùn)算符寄存器寄存器存儲(chǔ)器單元存儲(chǔ)器單元常量常量變量變量表達(dá)式與運(yùn)算符表達(dá)式與運(yùn)算符n在匯編語(yǔ)言程序中,數(shù)
4、據(jù)的表示形式大體上分在匯編語(yǔ)言程序中,數(shù)據(jù)的表示形式大體上分為兩種類(lèi)型,即常量與變量。為兩種類(lèi)型,即常量與變量。n用運(yùn)算符把常量或變量連接起來(lái)的式子,稱(chēng)為用運(yùn)算符把常量或變量連接起來(lái)的式子,稱(chēng)為表達(dá)式。表達(dá)式也可作為語(yǔ)句中的操作數(shù)。表達(dá)式。表達(dá)式也可作為語(yǔ)句中的操作數(shù)。10111.常量n數(shù)字常量數(shù)字常量n字符串常量字符串常量n例:例:A nMOV AL,An例:例:ABCD匯編時(shí)被譯成對(duì)應(yīng)的匯編時(shí)被譯成對(duì)應(yīng)的ASCII碼碼41H,42H,43H,44H用單引號(hào)引起的字符或字符串用單引號(hào)引起的字符或字符串常用的二進(jìn)制、十進(jìn)制、十六進(jìn)制等。常用的二進(jìn)制、十進(jìn)制、十六進(jìn)制等。2.變量n變量代表存放在
5、某存儲(chǔ)單元中的數(shù)據(jù),在程序變量代表存放在某存儲(chǔ)單元中的數(shù)據(jù),在程序運(yùn)行期間可以改變,常以變量名的形式出現(xiàn)在運(yùn)行期間可以改變,常以變量名的形式出現(xiàn)在程序中。程序中。n變量名是在程序中建立起來(lái)、可認(rèn)為是存放數(shù)變量名是在程序中建立起來(lái)、可認(rèn)為是存放數(shù)據(jù)的存儲(chǔ)單元的符號(hào)地址。據(jù)的存儲(chǔ)單元的符號(hào)地址。n變量名的取名規(guī)則與標(biāo)號(hào)相同。變量名的取名規(guī)則與標(biāo)號(hào)相同。12變量實(shí)例【例【例3-143-14】定義三個(gè)變量】定義三個(gè)變量DATA1DATA1、DATA2DATA2、DATA3DATA3。 13解:在程序中的數(shù)據(jù)段定義,語(yǔ)句如下:解:在程序中的數(shù)據(jù)段定義,語(yǔ)句如下: DATA SEGMENT DATA SE
6、GMENT DATA1 DB 12H DATA1 DB 12H DATA2 DW 1234H DATA2 DW 1234H DATA3 DD 12345678H DATA3 DD 12345678H DATA ENDS DATA ENDS變量的屬性14段段 偏移量偏移量類(lèi)類(lèi) 型型變量所在段的段地址變量所在段的段地址變量所指單元與段首之間的位移量變量所指單元與段首之間的位移量( (相對(duì)字節(jié)數(shù)相對(duì)字節(jié)數(shù)) )變量的長(zhǎng)度(變量所占內(nèi)存單元個(gè)數(shù))變量的長(zhǎng)度(變量所占內(nèi)存單元個(gè)數(shù))字節(jié)型、字型、雙字型等字節(jié)型、字型、雙字型等變量的定義n變量必須在使用之前定義,由匯編語(yǔ)言提供的變量必須在使用之前定義,由匯
7、編語(yǔ)言提供的偽指令來(lái)實(shí)現(xiàn)的,即為變量分配存儲(chǔ)器單元,偽指令來(lái)實(shí)現(xiàn)的,即為變量分配存儲(chǔ)器單元,預(yù)置初值。預(yù)置初值。n常用的偽指令有常用的偽指令有DBDB、DWDW、DDDD、DQDQ、DTDT等。等。15格式:格式: 變量名變量名 偽指令名偽指令名 表達(dá)表達(dá)式式 數(shù)值表達(dá)式、數(shù)值表達(dá)式、地址表達(dá)式、地址表達(dá)式、字符串、?、字符串、?、N DUPN DUP(表達(dá)式)(表達(dá)式)變量的定義16nDB 定義的變量為字節(jié)型定義的變量為字節(jié)型n說(shuō)明變量所定義的每個(gè)操作數(shù)占說(shuō)明變量所定義的每個(gè)操作數(shù)占1字節(jié)字節(jié)nDW 定義的變量為字類(lèi)型(雙字節(jié))定義的變量為字類(lèi)型(雙字節(jié))n說(shuō)明變量所定義的每個(gè)操作數(shù)占說(shuō)明變
8、量所定義的每個(gè)操作數(shù)占2字節(jié)字節(jié)nDD 定義的變量為雙字型(定義的變量為雙字型(4字節(jié))字節(jié))n說(shuō)明變量所定義的每個(gè)操作數(shù)占說(shuō)明變量所定義的每個(gè)操作數(shù)占4字節(jié)字節(jié)nDQ 定義的變量為定義的變量為4字型(字型(8字節(jié))字節(jié))nDT 定義的變量為定義的變量為10字節(jié)型字節(jié)型17偽指令例nDATA1 DB 11H,22H,33H,44HnDATA2 DW 11H,22H,3344HnDATA3 DD 22H,33445566H以上變量在內(nèi)存以上變量在內(nèi)存中的存放形式中的存放形式DATA111H22H33H44HDATA211H00H22H00H33H44HDATA322H00H00H00H55H66
9、H44H33H18幾點(diǎn)說(shuō)明n偽指令的性質(zhì)決定所定義變量的屬性;偽指令的性質(zhì)決定所定義變量的屬性;n定義字符串必須用定義字符串必須用DB偽指令偽指令n例:例:n DATA1 DB ABCD,66HABCD41H42H43H44H66H數(shù)值表達(dá)式n為變量定義數(shù)值數(shù)據(jù)。為變量定義數(shù)值數(shù)據(jù)。19SUM DB 45,89H,10010101BNUMBER DW 4576H,-1,128TOTAL DD 7897AFE2H,4567H數(shù)據(jù)存放,低字節(jié)存數(shù)據(jù)存放,低字節(jié)存在低地址單元,高字在低地址單元,高字節(jié)存放高地址單元。節(jié)存放高地址單元。地址表達(dá)式n為變量定義存儲(chǔ)器地址。為變量定義存儲(chǔ)器地址。n由于段地
10、址和偏移地址都是由于段地址和偏移地址都是1616位數(shù)據(jù),所以只位數(shù)據(jù),所以只能使用能使用DWDW和和DDDD定義。其中定義。其中DWDW定義變量存放的是定義變量存放的是偏移地址,而偏移地址,而DDDD定義變量的偏移地址和段地址定義變量的偏移地址和段地址。20ADDR1 DW OFFSET SUM ADDR2 DD NUMBER取偏移地址取偏移地址定義偏移地址和段地址定義偏移地址和段地址字符串n可作為表達(dá)式使用,存放字符的可作為表達(dá)式使用,存放字符的ASCIIASCII碼值。碼值。21例如偽指令:例如偽指令:XYZ DB ABCD DATA DW CD,76 按字節(jié)依次存儲(chǔ)按字節(jié)依次存儲(chǔ)A、B、
11、C、D的的ASCII碼值碼值按字依次存放按字依次存放CD和和7、6的的ASCII碼值碼值 22N DUP(表達(dá)式)n重復(fù)操作符重復(fù)操作符n作用:作用:n可以復(fù)制某個(gè)(或某些)操作數(shù),也可以嵌套??梢詮?fù)制某個(gè)(或某些)操作數(shù),也可以嵌套。n為一個(gè)數(shù)據(jù)區(qū)的各單元設(shè)置相同的初值;為一個(gè)數(shù)據(jù)區(qū)的各單元設(shè)置相同的初值;n目的:目的:n常用于聲明一個(gè)數(shù)據(jù)區(qū)常用于聲明一個(gè)數(shù)據(jù)區(qū)n格式:格式:n 變量名變量名 偽指令助記符偽指令助記符 n DUP(初(初值,值,)重復(fù)次數(shù)重復(fù)次數(shù)n例:例:nVAR1 DW 20 DUP( 30H )nDATA1 DB 3 DUP (4,3,DUP(1),),30H)nVAR1
12、 DB 20 DUP( ? )23為變量為變量VAR1分配分配20個(gè)字個(gè)字節(jié)的空間,初節(jié)的空間,初值為隨機(jī)值值為隨機(jī)值為變量為變量VAR1分分配配20個(gè)字單元,個(gè)字單元,均為均為0030H為為DATA1分配分配12個(gè)字節(jié)的空間,個(gè)字節(jié)的空間,初值()內(nèi)容初值()內(nèi)容24“?”的作用的作用n表示隨機(jī)值,不賦初值。表示隨機(jī)值,不賦初值。n用于既希望預(yù)留存儲(chǔ)空間而不關(guān)心具體為何用于既希望預(yù)留存儲(chǔ)空間而不關(guān)心具體為何值的情況。值的情況。n給變量保留相應(yīng)的存儲(chǔ)單元。給變量保留相應(yīng)的存儲(chǔ)單元。nMEM1 DB 34H,A,?,?n VAR1 DW 20 DUP(?)(?)預(yù)留預(yù)留40個(gè)字節(jié)單元,每單元為隨
13、機(jī)值個(gè)字節(jié)單元,每單元為隨機(jī)值隨機(jī)數(shù)隨機(jī)數(shù)占占1個(gè)字節(jié)單元個(gè)字節(jié)單元25應(yīng)用實(shí)例nM1 DB How are you?nM2 DW 3 DUP(11H),3344Hn M2 DB 4 DUP(?)(?)nM3 DB 3 DUP(22H,11H,?),?)變量在內(nèi)存中的分區(qū)變量在內(nèi)存中的分區(qū)26數(shù)據(jù)定義偽指令例M1How aM211H11H00H44H33H r e you?11H00H00H隨機(jī)數(shù)隨機(jī)數(shù)M311H22H11H22H11H22HXXXXXXXXXXXXXX兩點(diǎn)說(shuō)明n變量類(lèi)型與指令的要求必須相符變量類(lèi)型與指令的要求必須相符n 27MOV AX,VAR1MOV BL, VAR2兩點(diǎn)說(shuō)
14、明n在定義變量時(shí),變量名對(duì)應(yīng)的是數(shù)據(jù)區(qū)的首地在定義變量時(shí),變量名對(duì)應(yīng)的是數(shù)據(jù)區(qū)的首地址。如果數(shù)據(jù)區(qū)中有多個(gè)數(shù)據(jù),則在對(duì)其他數(shù)址。如果數(shù)據(jù)區(qū)中有多個(gè)數(shù)據(jù),則在對(duì)其他數(shù)據(jù)操作時(shí),需修改地址。據(jù)操作時(shí),需修改地址。n 28NUM DB 11H,22H,33H MOV AL, NUM+2送送33H到到AL中中【例【例3-153-15】數(shù)值變量的引用?!繑?shù)值變量的引用。 解:首先定義變量,然后引用,程序如下:解:首先定義變量,然后引用,程序如下: DA1 DB 0FFH DA1 DB 0FFH DA2 DW 2345H DA2 DW 2345H MOV AL MOV AL,DA1DA1 MOV BX M
15、OV BX,DA2DA229(AL)=0FFH(BX)=2345H【例【例3-163-16】 地址變量的引用。地址變量的引用。 解:引用變量名,取其偏移量,程序如下:解:引用變量名,取其偏移量,程序如下: DA3 DB 10H DUP(0) DA3 DB 10H DUP(0) DA4 DW 20H DUP(1) DA4 DW 20H DUP(1) MOV DA3SI MOV DA3SI,ALAL MOV DX MOV DX,DA4BXDIDA4BXDI 30313.表達(dá)式與運(yùn)算符運(yùn)算符運(yùn)算符操作符操作符表達(dá)式:用運(yùn)算符或操作符把常量、變量、標(biāo)號(hào)表達(dá)式:用運(yùn)算符或操作符把常量、變量、標(biāo)號(hào)等連接起
16、來(lái)的式子,其值在程序匯編時(shí)是確定的。等連接起來(lái)的式子,其值在程序匯編時(shí)是確定的。算術(shù)操作符算術(shù)操作符邏輯運(yùn)算符邏輯運(yùn)算符關(guān)系運(yùn)算符關(guān)系運(yùn)算符數(shù)值返回操作符數(shù)值返回操作符屬性操作符屬性操作符(1)算術(shù)運(yùn)算符n算術(shù)運(yùn)算符算術(shù)運(yùn)算符n+,-,*,/,MODnSHR和和SHL:移位運(yùn)算符,用于邏輯移位,移:移位運(yùn)算符,用于邏輯移位,移動(dòng)的位數(shù)由動(dòng)的位數(shù)由SHR/SHL右邊的次數(shù)決定。右邊的次數(shù)決定。n 若次數(shù)若次數(shù)16,結(jié)果恒為,結(jié)果恒為0。n :下標(biāo)運(yùn)算符,取表達(dá)式的值作為操作數(shù)地:下標(biāo)運(yùn)算符,取表達(dá)式的值作為操作數(shù)地址,若有兩個(gè)表達(dá)式,則以?xún)杀磉_(dá)式的值之和址,若有兩個(gè)表達(dá)式,則以?xún)杀磉_(dá)式的值之和作
17、為地址。作為地址。nHIGH與與LOW:取高:取高/低字節(jié)運(yùn)算符。低字節(jié)運(yùn)算符。32【例【例3-17】分析下面程序,確定變量的含義?!糠治鱿旅娉绦颍_定變量的含義。 NUM=5*4/7 ;NUM=2 NUM=NUM+5 ;NUM=7 NUM=NUM MOD 3 ;NUM=1 ORG 30H DATA1 DB 34H,56H,ABCD DATA2 DW 1234H,EF CONT=DATA2DATA1 DATA3=DATA2+2 33例例3-18】分析下面程序,確定移位運(yùn)算符的作用?!糠治鱿旅娉绦颍_定移位運(yùn)算符的作用。 NUM=10101101B MOV AX,NUM SHL 3 ADD DX
18、,NUM SHR 63435(2)邏輯運(yùn)算符n邏輯運(yùn)算符邏輯運(yùn)算符nAND,OR,NOT,XORn例:例:nMOV AL,8 AND 4nMOV AL,8+4-1nMOV BH,VAR+2【例【例3-203-20】分析下面程序,確定邏輯運(yùn)算符的作用?!糠治鱿旅娉绦?,確定邏輯運(yùn)算符的作用。 MOV AX MOV AX,NOT 0F0F0H NOT 0F0F0H ;與指令;與指令MOV AXMOV AX,0F0FH0F0FH等效等效 MOV BL MOV BL,55H AND 0F0H 55H AND 0F0H ;與指令;與指令MOV BLMOV BL,50H50H等效等效 MOV BH MOV
19、BH,05H OR 30H 05H OR 30H ;與指令;與指令MOV BHMOV BH,35H35H等效等效 MOV CL MOV CL,55H XOR 0F0H 55H XOR 0F0H ;與指令;與指令MOV CLMOV CL,0A5H0A5H等效等效36(3)關(guān)系運(yùn)算符n關(guān)系運(yùn)算符如表關(guān)系運(yùn)算符如表3-53-5所示,用于兩個(gè)表達(dá)式的所示,用于兩個(gè)表達(dá)式的比較,其結(jié)果為真(比較,其結(jié)果為真(1 1)或假()或假(0 0)。)。37表表3-5 關(guān)系運(yùn)算符關(guān)系運(yùn)算符 運(yùn)算符運(yùn)算符 語(yǔ)語(yǔ) 法法 運(yùn)算(真)運(yùn)算(真)EQ表達(dá)式表達(dá)式1 EQ 表達(dá)式表達(dá)式2 兩表達(dá)式相等為真兩表達(dá)式相等為真 N
20、E表達(dá)式表達(dá)式1 NE 表達(dá)式表達(dá)式2 兩表達(dá)式不相等為真兩表達(dá)式不相等為真LT表達(dá)式表達(dá)式1 LT 表達(dá)式表達(dá)式2表達(dá)式表達(dá)式1表達(dá)式表達(dá)式2為真為真GE表達(dá)式表達(dá)式1 GE 表達(dá)式表達(dá)式2表達(dá)式表達(dá)式1表達(dá)式表達(dá)式2為真為真 【例【例3-213-21】分析下面程序,確定關(guān)系表達(dá)式的作用?!糠治鱿旅娉绦颍_定關(guān)系表達(dá)式的作用。 MOV AX MOV AX,0FH EQ 1111B 0FH EQ 1111B MOV BX MOV BX,0FH NE 1111B0FH NE 1111B380FFFFH0(4)數(shù)值返回操作符n操作對(duì)象必須是變量或標(biāo)號(hào),操作后得到相應(yīng)操作對(duì)象必須是變量或標(biāo)號(hào),操作后
21、得到相應(yīng)的返回值。的返回值。n即即SEGSEG,OFFSETOFFSET,TYPETYPE,LENGTHLENGTH和和SIZESIZE。n用于分析存儲(chǔ)器操作數(shù)的屬性。用于分析存儲(chǔ)器操作數(shù)的屬性。3940返回變量名或標(biāo)號(hào)所在段的段內(nèi)偏移量返回變量名或標(biāo)號(hào)所在段的段內(nèi)偏移量返回變量名或標(biāo)號(hào)所在段的段基值返回變量名或標(biāo)號(hào)所在段的段基值TYPE 返回變量名或標(biāo)號(hào)所屬類(lèi)型的數(shù)字返回變量名或標(biāo)號(hào)所屬類(lèi)型的數(shù)字LENGTH 返回?cái)?shù)組變量的元素個(gè)數(shù)返回?cái)?shù)組變量的元素個(gè)數(shù)SIZE 返回?cái)?shù)組變量所占的總字節(jié)數(shù)返回?cái)?shù)組變量所占的總字節(jié)數(shù)OFFSETSEG41數(shù)值返回操作例 MOV AX,SEG DATA MOV
22、DS,AX MOV BX,OFFSET DATA LEA BX,DATA等價(jià)于等價(jià)于SEGn格式:格式:SEG 變量名或標(biāo)號(hào)變量名或標(biāo)號(hào)n功能:返回變量名或標(biāo)號(hào)所在段的段基值。功能:返回變量名或標(biāo)號(hào)所在段的段基值。42例例3-22:設(shè)變量:設(shè)變量K1和和ARRAY所在段的段基值分所在段的段基值分別是別是0314H和和0154H,取出后分別送,取出后分別送AX和和BX。 MOV AX,SEG K1 MOV BX,SEG ARRAYOFFSETn格式格式: OFFSET 變量名或標(biāo)號(hào)變量名或標(biāo)號(hào)n功能:返回變量名或標(biāo)號(hào)所在段的段內(nèi)偏移量。功能:返回變量名或標(biāo)號(hào)所在段的段內(nèi)偏移量。 43例例3-23
23、:設(shè)變量:設(shè)變量K1所在段的段內(nèi)偏移量是所在段的段內(nèi)偏移量是0125H,取出后送,取出后送SI。 MOV SI,OFFSET K1 TYPEn格式:格式:TYPE 變量名或標(biāo)號(hào)變量名或標(biāo)號(hào)n功能:返回變量名或標(biāo)號(hào)所屬類(lèi)型的數(shù)字。功能:返回變量名或標(biāo)號(hào)所屬類(lèi)型的數(shù)字。n對(duì)于對(duì)于DB,DW或或DD定義的變量名,返回值分定義的變量名,返回值分別為別為1,2,4;n對(duì)于對(duì)于NEAR與與FAR類(lèi)型的標(biāo)號(hào),返回值分別為類(lèi)型的標(biāo)號(hào),返回值分別為-1,-2。44LENGTHn格式:格式:LENGTH 變量名變量名n功能:返回?cái)?shù)組變量的元素個(gè)數(shù),如果變量功能:返回?cái)?shù)組變量的元素個(gè)數(shù),如果變量是用重復(fù)操作符是用重
24、復(fù)操作符DUP說(shuō)明的,則返回最外層說(shuō)明的,則返回最外層DUP給定的給定的N值值;如果沒(méi)有如果沒(méi)有DUP說(shuō)明,返回值說(shuō)明,返回值總是總是1。45SIZEn格式:格式:SIZE 變量名變量名n功能:返回?cái)?shù)組變量所占總字節(jié)數(shù),其值等于功能:返回?cái)?shù)組變量所占總字節(jié)數(shù),其值等于LENGTH*TYPE。4647數(shù)值返回操作例n若若BUFFERBUFFER存儲(chǔ)區(qū)用如下偽指令定義:存儲(chǔ)區(qū)用如下偽指令定義: n BUFFER DW 200 DUP(0) BUFFER DW 200 DUP(0)n 則:則:n TYPE TYPE BUFFER BUFFER 等于等于2 2n LENGTH BUFFER LENGT
25、H BUFFER等于等于200200n SIZE BUFFER SIZE BUFFER等于等于40040048(5)屬性運(yùn)算符n 用于指定其后存儲(chǔ)器操作數(shù)的類(lèi)型用于指定其后存儲(chǔ)器操作數(shù)的類(lèi)型n 運(yùn)算符:運(yùn)算符:PTR,THISPTRn格式:類(lèi)型格式:類(lèi)型 PTR 地址表達(dá)式地址表達(dá)式n可以是可以是BYTE、WORD、DWORD或或NEAR、FAR。n地址表達(dá)式可以是用變量名或標(biāo)號(hào)給出的有效地址表達(dá)式可以是用變量名或標(biāo)號(hào)給出的有效地址以及其它形式的有效地址。地址以及其它形式的有效地址。n功能:臨時(shí)修改變量或標(biāo)號(hào)的類(lèi)型屬性。功能:臨時(shí)修改變量或標(biāo)號(hào)的類(lèi)型屬性。49 例: MOV BYTR PTRB
26、X,12H MOV AL, BYTE PTR VAR ADD BYTE PRT DA20, BLTHISn格式:格式:THIS 類(lèi)型類(lèi)型n功能:將功能:將THIS 后的類(lèi)型屬性賦給變量所表示后的類(lèi)型屬性賦給變量所表示的存儲(chǔ)單元,該單元的段與偏移量屬性不變。的存儲(chǔ)單元,該單元的段與偏移量屬性不變。50例如:例如: DAB EQU THIS BYTE JUMPF EQU THIS DAB LABEL BYTE JUMPF LABEL FAR513.4.3 常用偽指令由匯編程序執(zhí)行的由匯編程序執(zhí)行的“指令系統(tǒng)指令系統(tǒng)”,不能生成,不能生成目標(biāo)代碼目標(biāo)代碼-偽操作。偽操作。52(1)符號(hào)定義偽指令EQ
27、Un格式:格式:n 符號(hào)名符號(hào)名 EQU 表達(dá)式表達(dá)式n操作:操作:n用符號(hào)名取代后邊的表達(dá)式,不可重新定義用符號(hào)名取代后邊的表達(dá)式,不可重新定義以后在使用表達(dá)式時(shí)即可引用它所表示的內(nèi)以后在使用表達(dá)式時(shí)即可引用它所表示的內(nèi)容。容。nEQU說(shuō)明的表達(dá)式不占用內(nèi)存空間。說(shuō)明的表達(dá)式不占用內(nèi)存空間。n如果有符號(hào)名,則需要事先定義。如果有符號(hào)名,則需要事先定義??梢允浅?shù)、可以是常數(shù)、符號(hào)、數(shù)值符號(hào)、數(shù)值表達(dá)式表達(dá)式TEN EQU 0AHVAR EQU 2 MOV AL,TENMOV BX,VAR53 TEN=0AH VAR=偽操作后邊表達(dá)式的值 (AL)=0AH (BX)=102654DA EQU
28、1234H ADR1 EQU DS:BP+7 DATA EQU HEIGHT+91234H=DA段前綴的變址訪問(wèn)賦給符號(hào)段前綴的變址訪問(wèn)賦給符號(hào)ADR1地址表達(dá)式賦給符號(hào)地址表達(dá)式賦給符號(hào)DATA(2)賦值偽指令=n格式:格式:n 符號(hào)名表達(dá)式(或符號(hào)名)符號(hào)名表達(dá)式(或符號(hào)名)n功能:功能:n 與與EQUEQU語(yǔ)句類(lèi)似,語(yǔ)句類(lèi)似,EQUEQU中的符號(hào)不允許重復(fù)定中的符號(hào)不允許重復(fù)定義,而義,而“”允許符號(hào)名重復(fù)定義。允許符號(hào)名重復(fù)定義。55例:例: EXP=5 EXP=5 EXP=EXP+5 EXP=EXP+5 56(3)段定義偽指令SEGMENT/ENDSn說(shuō)明邏輯段的起始和結(jié)束;說(shuō)明邏輯
29、段的起始和結(jié)束;n說(shuō)明不同程序模塊中同類(lèi)邏輯段之間的聯(lián)系形說(shuō)明不同程序模塊中同類(lèi)邏輯段之間的聯(lián)系形n 態(tài)態(tài)57段定義偽指令格式段名段名 SEGMENT SEGMENT 定位類(lèi)型定位類(lèi)型 組合類(lèi)型組合類(lèi)型 類(lèi)別類(lèi)別 段名段名 ENDS ENDS對(duì)段起始邊界的對(duì)段起始邊界的要求,如要求,如PAGE,PARA,WORD,BYTE表示段與段的關(guān)系表示段與段的關(guān)系 定位類(lèi)型:可以是定位類(lèi)型:可以是PAGE、PARA、WORD或或BYTE。 組合類(lèi)型:表示段與段之間的關(guān)系,可以是組合類(lèi)型:表示段與段之間的關(guān)系,可以是NONE、PUBLIC、COMMON、AT表達(dá)式、表達(dá)式、STACK和和MEMORY。 類(lèi)
30、別:用單引號(hào)括起來(lái),連接時(shí)同類(lèi)別的段類(lèi)別:用單引號(hào)括起來(lái),連接時(shí)同類(lèi)別的段存放在連續(xù)的存儲(chǔ)區(qū)內(nèi),并組成段組名,典型存放在連續(xù)的存儲(chǔ)區(qū)內(nèi),并組成段組名,典型類(lèi)別有類(lèi)別有STACK、CODE等。等。5859(4)設(shè)定段寄存器偽指令n說(shuō)明所定義邏輯段的性質(zhì)說(shuō)明所定義邏輯段的性質(zhì)n格式:格式:n ASSUME 段寄存器名:段名,段寄存器名:段名, ,段,段寄存器名:段名寄存器名:段名段寄存器名可以段寄存器名可以是是CS,DS,ES,SS段名必須段名必須已經(jīng)定義已經(jīng)定義n功能功能n 指定變量與段寄存器之間的關(guān)系,但不能指定變量與段寄存器之間的關(guān)系,但不能把段地址裝入段寄存器中。把段地址裝入段寄存器中。n
31、段寄存器的初始化:段寄存器的初始化:n系統(tǒng)自動(dòng)將代碼段的段地址放入系統(tǒng)自動(dòng)將代碼段的段地址放入CS中,其他中,其他邏輯段的段地址由程序員自己裝入相應(yīng)的段邏輯段的段地址由程序員自己裝入相應(yīng)的段寄存器。寄存器。n在源程序中,在源程序中,ASSUME偽指令放在可執(zhí)行程偽指令放在可執(zhí)行程序開(kāi)始位置的前面。序開(kāi)始位置的前面。60n例:例:nASSUME CS:CODE,DS:DATA1,ES:DATA261(5)過(guò)程定義偽指令n格式:格式:n 過(guò)程名過(guò)程名 PROC NEAR/FARn n RETn 過(guò)程名過(guò)程名 ENDPn功能:定義一個(gè)過(guò)程,并說(shuō)明它是功能:定義一個(gè)過(guò)程,并說(shuō)明它是NEAR(段(段內(nèi)調(diào)
32、用)或內(nèi)調(diào)用)或FAR(段間調(diào)用)類(lèi)型。(段間調(diào)用)類(lèi)型。n注意:注意:PROC和和ENDP必須成對(duì)出現(xiàn)。必須成對(duì)出現(xiàn)。62過(guò)程入口的過(guò)程入口的符號(hào)地址符號(hào)地址63(6)程序結(jié)束偽指令n表示源程序結(jié)束表示源程序結(jié)束n格式:格式:n END 標(biāo)號(hào)標(biāo)號(hào)表示程序執(zhí)行的開(kāi)始表示程序執(zhí)行的開(kāi)始地址;可有可無(wú)地址;可有可無(wú)64(7)定義段起始偏移地址偽指令ORG 段內(nèi)程序代碼或變量的起始偏移地址格式: ORG 表達(dá)式例: ORG 2000H ORG $10計(jì)算值為計(jì)算值為非負(fù)常數(shù)非負(fù)常數(shù)ORGORG 30H DATA1 DB 34H,56H,ABCD DATA2 DW 1234H,EF 65定義下面定義下
33、面DATA1的起的起始偏移地址為始偏移地址為30H(8)標(biāo)識(shí)符說(shuō)明偽指令n格式:格式:n PUBLIC 標(biāo)識(shí)符標(biāo)識(shí)符n功能:功能:n 說(shuō)明標(biāo)識(shí)符的屬性是公共標(biāo)識(shí)符。說(shuō)明標(biāo)識(shí)符的屬性是公共標(biāo)識(shí)符。n 例:例:n PUBLIC NAME1 ,NAME2, n 66說(shuō)明說(shuō)明NAME1、NAME2屬于公共標(biāo)識(shí)符,可以被屬于公共標(biāo)識(shí)符,可以被其它模塊引用其它模塊引用(9)標(biāo)識(shí)符說(shuō)明偽指令EXTRNn格式:格式:n EXTRN 標(biāo)識(shí)符標(biāo)識(shí)符n功能:功能:n說(shuō)明所使用的標(biāo)識(shí)符在外部程序段中,即:說(shuō)說(shuō)明所使用的標(biāo)識(shí)符在外部程序段中,即:說(shuō)明當(dāng)前模塊所使用的標(biāo)識(shí)符中,哪些標(biāo)識(shí)符是明當(dāng)前模塊所使用的標(biāo)識(shí)符中,哪些
34、標(biāo)識(shí)符是已經(jīng)在其他模塊中被定義為指定類(lèi)型的標(biāo)識(shí)符已經(jīng)在其他模塊中被定義為指定類(lèi)型的標(biāo)識(shí)符。n標(biāo)識(shí)符的含義與標(biāo)識(shí)符的含義與PUBLIC中的標(biāo)識(shí)符相同。中的標(biāo)識(shí)符相同。n 例:例:n EXTRN NAME067(10)多文本匯編連接偽指令I(lǐng)NCLUDEn格式:格式:n INCLUDE 文件名文件名n功能:把指定的文本一起匯編,直到指定文本功能:把指定的文本一起匯編,直到指定文本文件的末尾,再繼續(xù)匯編其后的語(yǔ)句。文件的末尾,再繼續(xù)匯編其后的語(yǔ)句。68693.4.4 宏指令(1)宏定義指令n宏指令是利用宏指令是利用CPU指令系統(tǒng)中已有的指令按照指令系統(tǒng)中已有的指令按照一定的規(guī)則定義的新的指令。一定的規(guī)
35、則定義的新的指令。n宏指令的功能是根據(jù)用戶(hù)需要自己確定的。宏指令的功能是根據(jù)用戶(hù)需要自己確定的。n宏指令一但定義,在源程序中就可以像其它指宏指令一但定義,在源程序中就可以像其它指令一樣使用。令一樣使用。7071宏定義指令n 源程序中由匯編程序識(shí)別的具有獨(dú)n 立功能的一段程序代碼宏宏n由于宏指令不是指令系統(tǒng)提供的,所以,必由于宏指令不是指令系統(tǒng)提供的,所以,必須定義后才能使用。宏指令的定義是利用偽須定義后才能使用。宏指令的定義是利用偽指令實(shí)現(xiàn)的。指令實(shí)現(xiàn)的。 宏定義指令72n格式:格式:n 宏命令名宏命令名 MACRO n n n n n ENDM宏體(由指令語(yǔ)宏體(由指令語(yǔ)句組成的能句組成的能
36、完成某一特定功完成某一特定功能的一段程序)能的一段程序); ;宏定義開(kāi)始偽指令宏定義開(kāi)始偽指令; ;宏定義結(jié)束偽指令宏定義結(jié)束偽指令宏定義指令n說(shuō)明:宏指令名由用戶(hù)指定,定義后在程序中可說(shuō)明:宏指令名由用戶(hù)指定,定義后在程序中可以和指令一樣使用,即宏調(diào)用。其中形式參數(shù)為以和指令一樣使用,即宏調(diào)用。其中形式參數(shù)為可選項(xiàng),多個(gè)參數(shù)之間用逗號(hào)可選項(xiàng),多個(gè)參數(shù)之間用逗號(hào)“,”隔開(kāi);宏調(diào)隔開(kāi);宏調(diào)用時(shí),用實(shí)參數(shù)代替形式參數(shù)。用時(shí),用實(shí)參數(shù)代替形式參數(shù)。nMACRO/ENDM必須成對(duì)使用必須成對(duì)使用.匯編時(shí),宏指令匯編時(shí),宏指令中的偽指令不被匯編,其它指令的機(jī)器代碼插入中的偽指令不被匯編,其它指令的機(jī)器代
37、碼插入到調(diào)用處,同時(shí)在插入的每一條指令前添加到調(diào)用處,同時(shí)在插入的每一條指令前添加“+”號(hào),這一過(guò)程稱(chēng)為宏展開(kāi)。號(hào),這一過(guò)程稱(chēng)為宏展開(kāi)。73宏定義指令例74例例1.1.定義一條宏指令,實(shí)現(xiàn)對(duì)某寄存器算術(shù)左移定義一條宏指令,實(shí)現(xiàn)對(duì)某寄存器算術(shù)左移4 4次次 LSHIFT MACRO REG LSHIFT MACRO REG MOV MOV CL ,4CL ,4 SAL SAL REG ,CLREG ,CL ENDM ENDM形式參數(shù)形式參數(shù)宏指令宏指令LSHIFT實(shí)現(xiàn)對(duì)寄存器實(shí)現(xiàn)對(duì)寄存器REG左移左移4次。次。REG在調(diào)用時(shí)將由實(shí)際參數(shù)提供具體的寄存器名。在調(diào)用時(shí)將由實(shí)際參數(shù)提供具體的寄存器名。
38、 宏指令名宏指令名宏定義指令例75例例2.2.定義一條宏指令,定義一條宏指令, 實(shí)現(xiàn)對(duì)某寄存器左移實(shí)現(xiàn)對(duì)某寄存器左移/ /右移若干次右移若干次 SHIFT MACRO N, REG ,CC SHIFT MACRO N, REG ,CC MOV CL, N MOV CL, N S&CC REG, CL S&CC REG, CL ENDM ENDM 宏指令宏指令SHIFTSHIFT有三個(gè)形式參數(shù),有三個(gè)形式參數(shù),N N表表示移位的次數(shù),示移位的次數(shù),REGREG表示要移位的寄存表示要移位的寄存器,器,CCCC則指出移位方向。移位方向在指則指出移位方向。移位方向在指令的操作助記符中。
39、形式參數(shù)出現(xiàn)在助令的操作助記符中。形式參數(shù)出現(xiàn)在助記符中時(shí),若不是在助記符的開(kāi)頭,那記符中時(shí),若不是在助記符的開(kāi)頭,那么,前面必須加么,前面必須加 & &。 宏定義指令例76例例3.3.定義一條宏指令,實(shí)現(xiàn)將某字符串送屏幕顯示定義一條宏指令,實(shí)現(xiàn)將某字符串送屏幕顯示 SDISP MACRO MESSGE SDISP MACRO MESSGE LEA DX , LEA DX , MESSGEMESSGE MOV AH , 09 MOV AH , 09 INT 21H INT 21H ENDM ENDM形式參數(shù)形式參數(shù)該宏指令是顯示該宏指令是顯示MESSGEMESSGE所指明的緩沖
40、區(qū)的內(nèi)容,所以調(diào)用所指明的緩沖區(qū)的內(nèi)容,所以調(diào)用該宏指令時(shí),代替形式參數(shù)的實(shí)際參數(shù)應(yīng)該是要顯示的緩該宏指令時(shí),代替形式參數(shù)的實(shí)際參數(shù)應(yīng)該是要顯示的緩沖區(qū)的變量名。沖區(qū)的變量名。 宏調(diào)用格式:宏調(diào)用格式: 宏指令名宏指令名 宏調(diào)用與展開(kāi)宏調(diào)用與展開(kāi)1 .1 .宏調(diào)用宏調(diào)用 宏指令名是程序中已定義的宏指令的名宏指令名是程序中已定義的宏指令的名稱(chēng)。實(shí)際參數(shù)應(yīng)與宏定義中的形式參數(shù)相對(duì)稱(chēng)。實(shí)際參數(shù)應(yīng)與宏定義中的形式參數(shù)相對(duì)應(yīng)。應(yīng)。 當(dāng)有多個(gè)形式參數(shù)時(shí),提供的實(shí)際參數(shù)當(dāng)有多個(gè)形式參數(shù)時(shí),提供的實(shí)際參數(shù)的順序必須與形式參數(shù)的順序一致。的順序必須與形式參數(shù)的順序一致。 當(dāng)提供的實(shí)際參數(shù)多于形式參數(shù)時(shí),多當(dāng)提供
41、的實(shí)際參數(shù)多于形式參數(shù)時(shí),多余部分被忽略;當(dāng)少于形式參數(shù)時(shí),多余的余部分被忽略;當(dāng)少于形式參數(shù)時(shí),多余的形式參數(shù)變?yōu)榭铡P问絽?shù)變?yōu)榭铡?SHIFT MACRO N, REG ,CC SHIFT MACRO N, REG ,CC MOV CL, N MOV CL, N S&CC REG, CL S&CC REG, CL ENDM ENDM SDISP MACRO MESSGE SDISP MACRO MESSGE LEA DX , LEA DX , MESSGEMESSGE MOV AH , 09 MOV AH , 09 INT 21H INT 21H ENDM ENDMSHI
42、FT 4,AX,AR SDISP STRING1宏調(diào)用,要宏調(diào)用,要對(duì)對(duì)AXAX的內(nèi)容的內(nèi)容右移右移4 4次。次。宏 調(diào) 用 , 指宏 調(diào) 用 , 指出顯示出顯示STRING1STRING1對(duì)應(yīng)對(duì)應(yīng)緩 沖 區(qū) 的 字緩 沖 區(qū) 的 字符串。符串。 宏展開(kāi)是指在匯編過(guò)程中,當(dāng)匯編到宏宏展開(kāi)是指在匯編過(guò)程中,當(dāng)匯編到宏調(diào)用語(yǔ)句時(shí),它將用宏體中的一段程序來(lái)代調(diào)用語(yǔ)句時(shí),它將用宏體中的一段程序來(lái)代替這條宏調(diào)用語(yǔ)句,并且語(yǔ)句中的形式參數(shù)替這條宏調(diào)用語(yǔ)句,并且語(yǔ)句中的形式參數(shù)被實(shí)際參數(shù)所取代。被實(shí)際參數(shù)所取代。 宏調(diào)用與展開(kāi)宏調(diào)用與展開(kāi)2 .2 .宏展開(kāi)宏展開(kāi)SHIFT MACRO N , REG , C
43、C MOV CL , N S&CC REG , CL ENDMCDISP MACRO MOV AH,02H INT 21H ENDM例如有如下的程序段:例如有如下的程序段: 宏定義:宏定義:形式參數(shù)形式參數(shù) 4.2.6 宏指令宏指令 MOV AL , BCD1 ;由由BCD1中取出中取出 ;一個(gè)字節(jié)的組合;一個(gè)字節(jié)的組合BCD碼碼 MOV DL , AL SHIFT 4 , DL , AR ;將將DL的內(nèi)容右移的內(nèi)容右移4次次 ADD DL , 30H CDISP ; 顯示高位顯示高位BCD碼碼 AND AL , 0FH ADD AL , 30H MOV DL, AL CDISP ;
44、顯示低位顯示低位BCD碼碼 宏調(diào)用:宏調(diào)用: 4.2.6 宏指令宏指令宏展開(kāi):宏展開(kāi):SHIFT MACRO N , REG , DIR MOV CL, N S&DIR REG,CL ENDM MOV MOV AL ,BCD1AL ,BCD1 MOV MOV DL ,ALDL ,AL SHIFT 4, SHIFT 4, DL ,ARDL ,AR + MOV + MOV CL ,4CL ,4 + SAR + SAR DL ,CLDL ,CL ADD ADD DL ,30H DL ,30H 宏體插入宏體插入 4.2.6 宏指令宏指令宏展開(kāi):宏展開(kāi):CDISP MACRO MOV AH, 0
45、2H INT 21H ENDM CDISP CDISP+ MOV AH,02H+ MOV AH,02H+ INT 21H+ INT 21H AND AL,0FH AND AL,0FH ADD AL,30H ADD AL,30H MOV DL,AL MOV DL,AL CDISP CDISP+ MOV AH,02H+ MOV AH,02H+ INT 21H + INT 21H 宏體插入宏體插入 4.2.6 宏指令宏指令 宏展開(kāi)后,在每條宏調(diào)用指令語(yǔ)句后宏展開(kāi)后,在每條宏調(diào)用指令語(yǔ)句后面是宏指令中所包含的語(yǔ)句(宏體),在面是宏指令中所包含的語(yǔ)句(宏體),在文件名文件名.LST.LST文件中,這些語(yǔ)
46、句前通常有標(biāo)文件中,這些語(yǔ)句前通常有標(biāo)志,如例中冠有加號(hào)志,如例中冠有加號(hào)+,也有些匯編程,也有些匯編程序匯編后在宏展開(kāi)語(yǔ)句前冠以序匯編后在宏展開(kāi)語(yǔ)句前冠以11?!纠纠?-243-24】定義一條宏指令,可以實(shí)現(xiàn)移位操作功能?!慷x一條宏指令,可以實(shí)現(xiàn)移位操作功能。 解:使用宏定義指令來(lái)完成,定義過(guò)程如下:解:使用宏定義指令來(lái)完成,定義過(guò)程如下: SHIFT MACRO REG X SHIFT MACRO REG X, N N MOV CL MOV CL,N N S&X REG S&X REG,CLCL ENDM ENDM 參數(shù)參數(shù)REGREG代表寄存器名,代表寄存器名,X X
47、代表操作碼,代表操作碼,N N代表移位次數(shù)。為了使參代表移位次數(shù)。為了使參數(shù)可以出現(xiàn)在指令助記符中,用數(shù)可以出現(xiàn)在指令助記符中,用& &符號(hào)連接。宏調(diào)用:符號(hào)連接。宏調(diào)用: SHIFT AX SHIFT AX,ARAR,3 3 SHIFT DL SHIFT DL,HRHR,6 6 宏展開(kāi):宏展開(kāi): +MOV CL, 3 +MOV CL, 3 +SAR AX, CL +SAR AX, CL +MOV CL, 6 +MOV CL, 6 +SHR DL, CL +SHR DL, CL86(2)取消宏定義偽指令 PURGEn格式:格式:n PURGE 宏指令名宏指令名,n功能:功能:n
48、 取消宏指令名的定義,可以同時(shí)取消多個(gè)宏取消宏指令名的定義,可以同時(shí)取消多個(gè)宏定義。定義。87宏指令與子程序的區(qū)別宏指令與子程序的區(qū)別 通過(guò)上述內(nèi)容的介紹,宏指令在有些方通過(guò)上述內(nèi)容的介紹,宏指令在有些方面與子程序十分相似,它們都可以是程序中面與子程序十分相似,它們都可以是程序中可能多次使用的一個(gè)程序段,在定義后,它可能多次使用的一個(gè)程序段,在定義后,它們都可以被調(diào)用,對(duì)于源程序的編寫(xiě)和程序們都可以被調(diào)用,對(duì)于源程序的編寫(xiě)和程序的調(diào)試都帶來(lái)一定的方便。的調(diào)試都帶來(lái)一定的方便。 但是宏指令與子程序也有許多不同之處,但是宏指令與子程序也有許多不同之處,子程序匯編后的機(jī)器碼只出現(xiàn)在一處,而宏子程序匯
49、編后的機(jī)器碼只出現(xiàn)在一處,而宏指令則不同,匯編后,凡是宏調(diào)用處都將被指令則不同,匯編后,凡是宏調(diào)用處都將被宏體所代替,所以,采用子程序可以節(jié)省內(nèi)宏體所代替,所以,采用子程序可以節(jié)省內(nèi)存,而宏指令則不節(jié)省內(nèi)存。存,而宏指令則不節(jié)省內(nèi)存。 但子程序執(zhí)行時(shí)必須通過(guò)調(diào)用和返回使但子程序執(zhí)行時(shí)必須通過(guò)調(diào)用和返回使主程序與子程序聯(lián)系起來(lái),而宏指令在執(zhí)行主程序與子程序聯(lián)系起來(lái),而宏指令在執(zhí)行時(shí)不需要這樣的時(shí)間開(kāi)銷(xiāo),因而宏指令在執(zhí)時(shí)不需要這樣的時(shí)間開(kāi)銷(xiāo),因而宏指令在執(zhí)行時(shí)時(shí)間上要比子程序短,特別是某些多次行時(shí)時(shí)間上要比子程序短,特別是某些多次使用的程序段本身就很短的時(shí)候,采用宏定使用的程序段本身就很短的時(shí)候,
50、采用宏定義,這一優(yōu)點(diǎn)就更為明顯。義,這一優(yōu)點(diǎn)就更為明顯。 程序設(shè)計(jì)中究竟采用子程序還是采用程序設(shè)計(jì)中究竟采用子程序還是采用宏指令要根據(jù)時(shí)間和空間矛盾的具體情況而宏指令要根據(jù)時(shí)間和空間矛盾的具體情況而定。定。 923.4.5 條件匯編n格式:格式: n IF n n ELSEn n ENDIFn功能:當(dāng)條件為真,匯編程序段功能:當(dāng)條件為真,匯編程序段1,跳過(guò)程序段,跳過(guò)程序段2;當(dāng)條件為假,跳過(guò)程序段;當(dāng)條件為假,跳過(guò)程序段1,匯編程序段,匯編程序段2。93(1 1)IF IF 表達(dá)式表達(dá)式 功能:表達(dá)式的值不為功能:表達(dá)式的值不為0 0,條件為真。,條件為真。(2 2)IFE IFE 表達(dá)式表
51、達(dá)式 功能:表達(dá)式的值為功能:表達(dá)式的值為0 0,條件為真。,條件為真。(3 3)IFB IFB 功能:參數(shù)為空,條件為真。功能:參數(shù)為空,條件為真。(4 4)IFNB IFNB 功能:參數(shù)不為空,條件為真。功能:參數(shù)不為空,條件為真。9495963.4.6 保護(hù)方式編程指令n保護(hù)方式和實(shí)地址方式以同樣的方式使用和執(zhí)行保護(hù)方式和實(shí)地址方式以同樣的方式使用和執(zhí)行指令,區(qū)別在于生成主存物理地址的不同。指令,區(qū)別在于生成主存物理地址的不同。n在實(shí)地址方式中,是段寄存器左移在實(shí)地址方式中,是段寄存器左移4 4位加偏移量位加偏移量而生成物理地址。而生成物理地址。n在保護(hù)方式中,段寄存器中是一個(gè)在保護(hù)方式
52、中,段寄存器中是一個(gè)1313位的選擇符位的選擇符,根據(jù)選擇符可訪問(wèn)一個(gè),根據(jù)選擇符可訪問(wèn)一個(gè)8 8字節(jié)的描述符,再?gòu)淖止?jié)的描述符,再?gòu)闹蝎@取段起始地址。中獲取段起始地址。97保護(hù)方式控制指令n裝 入 全 局裝 入 全 局 / 中 斷 描 述 符 表 寄 存 器 指 令中 斷 描 述 符 表 寄 存 器 指 令LGDT/LIDTn裝入局部描述符表寄存器指令裝入局部描述符表寄存器指令LLDTn裝入任務(wù)狀態(tài)段寄存器指令裝入任務(wù)狀態(tài)段寄存器指令LTRn裝入機(jī)器標(biāo)志字指令裝入機(jī)器標(biāo)志字指令LMSWn調(diào)整選擇符特權(quán)級(jí)調(diào)整選擇符特權(quán)級(jí)RPL指令指令A(yù)RPLn清除任務(wù)切換標(biāo)志清除任務(wù)切換標(biāo)志CLTS98裝入全
53、局/中斷描述符表寄存器指令LGDT/LIDTn格式:格式:LGDT/LIDT SRCn功能:把功能:把SRC指定的指定的6B(48位)數(shù)據(jù)裝入描述位)數(shù)據(jù)裝入描述符表寄存器符表寄存器GDTR/IDTR中,前中,前2個(gè)茲節(jié)是描述個(gè)茲節(jié)是描述符表的界限值,后符表的界限值,后4個(gè)字節(jié)是描述符表線性基個(gè)字節(jié)是描述符表線性基地址值。對(duì)狀態(tài)標(biāo)志無(wú)影響。地址值。對(duì)狀態(tài)標(biāo)志無(wú)影響。n例:例:n LGDT DI99裝入局部描述符表寄存器指令LLDTn格式:格式:LLDT SRCn功能:把功能:把SRC指定的數(shù)據(jù)作為選擇符裝入描述指定的數(shù)據(jù)作為選擇符裝入描述符表寄存器符表寄存器LDTR中。源操作數(shù)可以是中。源操作
54、數(shù)可以是16位寄位寄存器或存儲(chǔ)器單元,其中選擇符是指向全局描存器或存儲(chǔ)器單元,其中選擇符是指向全局描述表述表GDT中類(lèi)型為中類(lèi)型為L(zhǎng)DT的選擇符。對(duì)狀態(tài)標(biāo)志的選擇符。對(duì)狀態(tài)標(biāo)志無(wú)影響。無(wú)影響。n例如:例如:n LLDT BX100裝入任務(wù)狀態(tài)段寄存器指令LTRn格式:格式:LTR SRCn功能:把功能:把SRC指定的數(shù)據(jù)作為選擇符裝入任務(wù)指定的數(shù)據(jù)作為選擇符裝入任務(wù)狀態(tài)段寄存器狀態(tài)段寄存器TR中,并使裝入的任務(wù)狀態(tài)段中,并使裝入的任務(wù)狀態(tài)段標(biāo)記為忙,但不發(fā)生任務(wù)切換。源操作數(shù)可以標(biāo)記為忙,但不發(fā)生任務(wù)切換。源操作數(shù)可以是是16位寄存器或存儲(chǔ)器單元,它指向位寄存器或存儲(chǔ)器單元,它指向GDT中一中
55、一個(gè)忙的個(gè)忙的TSS描述符。對(duì)狀態(tài)標(biāo)志無(wú)影響。描述符。對(duì)狀態(tài)標(biāo)志無(wú)影響。101裝入機(jī)器標(biāo)志字指令LMSWn 格式:格式:LMSW SRCLMSW SRCn 功能:把功能:把SRCSRC指定的數(shù)據(jù)裝入控制寄存器指定的數(shù)據(jù)裝入控制寄存器CR0CR0的低的低1616位。位。102調(diào)整選擇符特權(quán)級(jí)RPL指令A(yù)RPLn格式:格式:ARPL DEST,REGn功能:若操作數(shù)功能:若操作數(shù)DEST的的RPL小于或等于操作小于或等于操作數(shù)數(shù)REG的的RPL,則,則ZF置置1,并用操作數(shù),并用操作數(shù)REG的的RPL修改操作數(shù)修改操作數(shù)DEST的的RPL;若操作數(shù);若操作數(shù)DEST的的RPL大于操作數(shù)大于操作數(shù)R
56、EG的的RPL,則,則DEST不變不變,ZF清清0。103清除任務(wù)切換標(biāo)志CLTSn格式:格式:CLTSn功能:清除控制寄存器功能:清除控制寄存器CR0中的任務(wù)切換標(biāo)志中的任務(wù)切換標(biāo)志TS,即,即TS清清0。104保護(hù)參數(shù)檢驗(yàn)指令n檢查數(shù)組邊界指令檢查數(shù)組邊界指令BOUNDn控制寄存器裝入指令控制寄存器裝入指令n控制寄存器存儲(chǔ)指令控制寄存器存儲(chǔ)指令n保存保存GDTR/IDTR指令指令SGDT/SIDTn保存保存LDTR指令指令SLDTn保存機(jī)器標(biāo)志字指令保存機(jī)器標(biāo)志字指令SMSW105檢查數(shù)組邊界指令BOUNDn 格式:格式:BOUND REG,MEMn 功能:檢查數(shù)組下標(biāo)(索引)是否違反了邊
57、界功能:檢查數(shù)組下標(biāo)(索引)是否違反了邊界,若違反則產(chǎn)生異常中斷,若違反則產(chǎn)生異常中斷5。106控制寄存器裝入指令n 格式:格式:MOV CRn,SRCn 功能:把源操作數(shù)功能:把源操作數(shù)SRC指定的指定的32位寄存器中的位寄存器中的數(shù)據(jù)裝入數(shù)據(jù)裝入CR0、CR2或或CR3中。中。107控制寄存器存儲(chǔ)指令n 格式:格式:MOV DEST,CRnn 功能:把控制寄存器功能:把控制寄存器CR0、CR2或或CR3中的數(shù)中的數(shù)據(jù)存入據(jù)存入DEST指定的指定的32位寄存器中。位寄存器中。108保存GDTR/IDTR指令SGDT/SIDTn 格式:格式:SGDT/SIDT DESTn 功能:把描述符表寄存
58、器功能:把描述符表寄存器GDTR/IDTR中的內(nèi)中的內(nèi)容存入容存入DEST指定的連續(xù)指定的連續(xù)6B(48位)單元中。位)單元中。109保存LDTR指令SLDTn 格式:格式:SLDT DESTn 功能:把局部描述符表寄存器功能:把局部描述符表寄存器LDTR中的內(nèi)容中的內(nèi)容存入存入DEST指定的指定的16位目的寄存器或存儲(chǔ)器單位目的寄存器或存儲(chǔ)器單元中。元中。110保存機(jī)器標(biāo)志字指令SMSWn格式:格式:SMSW DESTn功能:把功能:把CR0的低的低16位存儲(chǔ)到位存儲(chǔ)到DEST指定的寄指定的寄存器或存儲(chǔ)器單元中。存器或存儲(chǔ)器單元中。111進(jìn)入保護(hù)方式n在開(kāi)機(jī)或在開(kāi)機(jī)或RESET復(fù)位之后,復(fù)位
59、之后,80486進(jìn)入實(shí)地址方進(jìn)入實(shí)地址方式,如果進(jìn)入保護(hù)方式需要對(duì)各系統(tǒng)表和寄存式,如果進(jìn)入保護(hù)方式需要對(duì)各系統(tǒng)表和寄存器進(jìn)行初始化。器進(jìn)行初始化。n建立全局建立全局/中斷描述符表中斷描述符表GDT/IDT、任務(wù)狀態(tài)段、任務(wù)狀態(tài)段TSS等;等;n執(zhí)行指令執(zhí)行指令MOV CRn,SRC,將控制寄存器,將控制寄存器CR0中的中的PE置置1。n在進(jìn)入保護(hù)方式后首先執(zhí)行段間跳轉(zhuǎn)在進(jìn)入保護(hù)方式后首先執(zhí)行段間跳轉(zhuǎn)JMP,轉(zhuǎn),轉(zhuǎn)向保護(hù)方式下的初始化程序,對(duì)代碼段寄存器向保護(hù)方式下的初始化程序,對(duì)代碼段寄存器CS、數(shù)據(jù)段寄存器、數(shù)據(jù)段寄存器SS、DS、ES、FS、GS及任及任務(wù)狀態(tài)段寄存器務(wù)狀態(tài)段寄存器TR等
60、進(jìn)行設(shè)置。等進(jìn)行設(shè)置。1121133.5 匯編語(yǔ)言程序設(shè)計(jì)概述n一個(gè)完整的程序一般由若干段構(gòu)成,即數(shù)據(jù)一個(gè)完整的程序一般由若干段構(gòu)成,即數(shù)據(jù)段、代碼段、堆棧段,有時(shí)還有附加段,其段、代碼段、堆棧段,有時(shí)還有附加段,其核心是代碼段。核心是代碼段。n程序可分為順序程序、分支程序、循環(huán)程序程序可分為順序程序、分支程序、循環(huán)程序和子程序。和子程序。114設(shè)計(jì)步驟可歸納如下:設(shè)計(jì)步驟可歸納如下: (1 1)分析問(wèn)題,確定算法;)分析問(wèn)題,確定算法; (2 2)繪制流程圖;)繪制流程圖; (3 3)編寫(xiě)程序;)編寫(xiě)程序; (4 4)上機(jī)調(diào)試。)上機(jī)調(diào)試。115概述順序程序設(shè)計(jì)n順序程序是按照指令序列順序執(zhí)行。順序程序是按照指令序列順序執(zhí)行。116n【例【例3-25】 把字節(jié)存儲(chǔ)單元把字節(jié)存儲(chǔ)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年執(zhí)業(yè)醫(yī)師考試復(fù)習(xí)全攻略及試題及答案
- 2025年經(jīng)濟(jì)法知識(shí)點(diǎn)提煉試題及答案
- 2025年衛(wèi)生資格考試合規(guī)性試題及答案
- 2025年執(zhí)業(yè)護(hù)士考試技能操作試題與答案
- 知識(shí)提升之路衛(wèi)生資格考試試題及答案
- 2025年經(jīng)濟(jì)法快速?gòu)?fù)習(xí)試題及答案
- 日常護(hù)理流程試題及答案
- 主管護(hù)師考試實(shí)時(shí)反饋機(jī)制探討試題及答案
- 2025年實(shí)習(xí)護(hù)工的要求試題及答案
- 科目分析執(zhí)業(yè)醫(yī)師考試試題及答案核心
- 法醫(yī)精神病題庫(kù)
- 中國(guó)古代的聲學(xué)成就
- MOOC 英國(guó)小說(shuō)-南京大學(xué) 中國(guó)大學(xué)慕課答案
- 房建監(jiān)理投標(biāo)文件技術(shù)部分
- 新廠規(guī)劃方案
- 門(mén)窗知識(shí)講解課件
- 室速的護(hù)理措施
- 鎮(zhèn)痛藥物在糖尿病足疼痛治療中的效果評(píng)估
- 北京南站流線分析報(bào)告
- 洼田飲水試驗(yàn)操作指引
- 咖啡品鑒大全
評(píng)論
0/150
提交評(píng)論