




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第第4章章 匯編語言及匯編程序設(shè)計匯編語言及匯編程序設(shè)計 本章學(xué)習(xí)目標(biāo)本章學(xué)習(xí)目標(biāo)通過本章的學(xué)習(xí),應(yīng)當(dāng)掌握以下內(nèi)容通過本章的學(xué)習(xí),應(yīng)當(dāng)掌握以下內(nèi)容: 了解匯編語言的基本知識和特點。了解匯編語言的基本知識和特點。 熟悉匯編語言的程序結(jié)構(gòu)及語句的格式。熟悉匯編語言的程序結(jié)構(gòu)及語句的格式。 掌握匯編語言常用偽指令的使用方法。掌握匯編語言常用偽指令的使用方法。 熟練掌握匯編語言程序設(shè)計的基本方法:順序結(jié)構(gòu)、熟練掌握匯編語言程序設(shè)計的基本方法:順序結(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)。 掌握程序設(shè)計中的宏指令和常用的系統(tǒng)功能的調(diào)用方法。掌握程序設(shè)計中的宏指令和常用的系統(tǒng)
2、功能的調(diào)用方法。4.1 4.1 概概 述述 1. 1.匯編語言和匯編程序的基本概念匯編語言和匯編程序的基本概念程序設(shè)計語言通常分為程序設(shè)計語言通常分為3類:類: 機(jī)器語言(機(jī)器語言(Machine Language) 匯編語言(匯編語言(Assembler Language) 高級語言(高級語言(High Level Language)機(jī)器語言:機(jī)器語言: 是一種用二進(jìn)制編碼的是一種用二進(jìn)制編碼的機(jī)器(機(jī)器(CPUCPU)能夠直接識)能夠直接識別的別的語言,以表示計算機(jī)所要進(jìn)行操作及操作對象(數(shù)據(jù)或語言,以表示計算機(jī)所要進(jìn)行操作及操作對象(數(shù)據(jù)或數(shù)據(jù)地址)數(shù)據(jù)地址) 。匯編語言:匯編語言:是一
3、種面向是一種面向CPUCPU指令系統(tǒng)的程序設(shè)計語言,它采用指令系統(tǒng)的程序設(shè)計語言,它采用指令系統(tǒng)的助記符來表示操作碼和操作數(shù),用符號地址表示指令系統(tǒng)的助記符來表示操作碼和操作數(shù),用符號地址表示操作數(shù)地址操作數(shù)地址。 匯編語言的特點: 1 1)匯編語言實質(zhì)上是機(jī)器語言的符號表示,更便于書寫和記憶。)匯編語言實質(zhì)上是機(jī)器語言的符號表示,更便于書寫和記憶。2 2)用匯編語言編寫的程序要比其等效的高級語言程序生成的目標(biāo)程序)用匯編語言編寫的程序要比其等效的高級語言程序生成的目標(biāo)程序精簡、占用內(nèi)存少、運行速度快,比較適合編寫系統(tǒng)軟件、實時控制軟精簡、占用內(nèi)存少、運行速度快,比較適合編寫系統(tǒng)軟件、實時控制
4、軟件及直接控制計算機(jī)硬件的接口程序。件及直接控制計算機(jī)硬件的接口程序。3 3)利用匯編語言編寫的程序,調(diào)試周期長,技巧性強(qiáng)。)利用匯編語言編寫的程序,調(diào)試周期長,技巧性強(qiáng)。 匯編語言與機(jī)器語言屬于低級語言,它們與高級語言有較大的匯編語言與機(jī)器語言屬于低級語言,它們與高級語言有較大的 差別匯編語言中的語句與機(jī)器的型號密切相關(guān)。如差別匯編語言中的語句與機(jī)器的型號密切相關(guān)。如Intel 8086系列系列CPU、Intel8031系列單片系列單片CPU等,若等,若CPU型號不同,其指令統(tǒng)就型號不同,其指令統(tǒng)就不同,當(dāng)然語句的書寫格式也就不同。不同,當(dāng)然語句的書寫格式也就不同。匯編語言源程序匯編語言源程
5、序:用匯編語言編寫的程序。用匯編語言編寫的程序。匯編:匯編:是把匯編語言程序翻譯成機(jī)器語言描述的目標(biāo)程序是把匯編語言程序翻譯成機(jī)器語言描述的目標(biāo)程序的過程。的過程。匯編語言源程序匯編目標(biāo)程序匯編程序:匯編程序:匯編程序是完成匯編任務(wù)的程序。匯編程序是完成匯編任務(wù)的程序。是系統(tǒng)軟件中的一種程序,是系統(tǒng)軟件中的一種程序,它的作用是把匯編語言源程序自動翻譯成機(jī)器能識別的它的作用是把匯編語言源程序自動翻譯成機(jī)器能識別的機(jī)器語機(jī)器語言目標(biāo)程序言目標(biāo)程序。匯編程序以匯編語言源程序文件作為輸入,并由匯編程序以匯編語言源程序文件作為輸入,并由它產(chǎn)生兩種輸出文件它產(chǎn)生兩種輸出文件目標(biāo)程序文件目標(biāo)程序文件和和源程
6、序列表文件源程序列表文件。匯編語言源程序目標(biāo)程序文件匯編程序源程序列表輸入輸入輸出輸出.ASM.OBJ.LST翻譯翻譯8086常用的匯編程序有常用的匯編程序有ASM-86和和宏匯編MASM-862.2.匯編語言語句結(jié)構(gòu)匯編語言語句結(jié)構(gòu)匯編語言語句的種類匯編語言語句的種類指令性語句指令性語句指令系統(tǒng)對應(yīng)的語句指令系統(tǒng)對應(yīng)的語句指示性語句指示性語句與偽操作命令和偽操作符對應(yīng)的命令與偽操作命令和偽操作符對應(yīng)的命令宏指令語句宏指令語句以某個宏指令名定義的一段指令系列以某個宏指令名定義的一段指令系列指令性命令指令格式:指令性命令指令格式: 標(biāo)號:標(biāo)號:前綴前綴 指令助記符指令助記符 操作數(shù)操作數(shù);注釋;
7、注釋 方括號表示的成分可以選用或缺省;方括號表示的成分可以選用或缺??; 標(biāo)號是后面緊跟標(biāo)號是后面緊跟“ “ :”的一個的一個標(biāo)識符。標(biāo)識符。給該行指令在存儲器中的首地給該行指令在存儲器中的首地址所起的名稱,主要作為轉(zhuǎn)移指令、調(diào)用指令和循環(huán)指令的使用標(biāo)號;址所起的名稱,主要作為轉(zhuǎn)移指令、調(diào)用指令和循環(huán)指令的使用標(biāo)號; 一個源程序中,每個標(biāo)識符的定義是唯一的,以字母開頭,不能是匯一個源程序中,每個標(biāo)識符的定義是唯一的,以字母開頭,不能是匯編語言采用的編語言采用的保留字保留字; 前綴可以是一個或多個,如重復(fù)前綴、總線封鎖前綴等;前綴可以是一個或多個,如重復(fù)前綴、總線封鎖前綴等; 指令助記符指令助記符
8、指出該條語句的基本操作功能,指出該條語句的基本操作功能,可以是機(jī)器指令、偽指可以是機(jī)器指令、偽指令和宏指令的助記符令和宏指令的助記符,是必須有的部分;,是必須有的部分; 操作數(shù)可以是一個、兩個或沒有,由指令類型決定,若有兩個操作數(shù),操作數(shù)可以是一個、兩個或沒有,由指令類型決定,若有兩個操作數(shù),前面為目的操作數(shù),后面為源操作數(shù),中間用前面為目的操作數(shù),后面為源操作數(shù),中間用逗號逗號隔開;隔開; 注釋是以注釋是以“ “ ;”開始的字符串開始的字符串可以用英文或者中文書寫可以用英文或者中文書寫,注釋字段是注釋字段是語句的非執(zhí)行部分,語句的非執(zhí)行部分,不影響程序的匯編與執(zhí)行,僅用于增加源程序的可讀不影
9、響程序的匯編與執(zhí)行,僅用于增加源程序的可讀性。性。4.2 4.2 偽指令偽指令 偽指令偽指令偽指令語句是為偽指令語句是為匯編程序匯編程序和和連接程序連接程序提供一提供一些必要控制的管理性語句,些必要控制的管理性語句,是給匯編程序命令,告訴匯編程是給匯編程序命令,告訴匯編程序如何去處理匯編語言的源程序,如何生成目標(biāo)代碼的指令序如何去處理匯編語言的源程序,如何生成目標(biāo)代碼的指令語句,語句,稱為指示性語句。稱為指示性語句。匯編時,它不產(chǎn)生目標(biāo)代碼,即當(dāng)匯編時,它不產(chǎn)生目標(biāo)代碼,即當(dāng)匯編形成目標(biāo)程序后則不存在了。匯編形成目標(biāo)程序后則不存在了。 在匯編語言中,所有符號常量、變量名、標(biāo)號、過程名、在匯編語
10、言中,所有符號常量、變量名、標(biāo)號、過程名、記錄名、指令助記符、寄存器名等都可稱為符號,這些符號記錄名、指令助記符、寄存器名等都可稱為符號,這些符號可以通過偽指令重新命名或定義新的類型屬性??梢酝ㄟ^偽指令重新命名或定義新的類型屬性。 MASM-86 MASM-86中規(guī)定了幾十種偽指令相當(dāng)豐富,我們只介中規(guī)定了幾十種偽指令相當(dāng)豐富,我們只介紹常用的幾種。紹常用的幾種。指示性命令指令格式;指示性命令指令格式; 符號名符號名 定義符定義符 參數(shù)參數(shù)1,參數(shù),參數(shù)2,參數(shù),參數(shù)3, ;注釋;注釋4.2.1 4.2.1 符號定義偽指令符號定義偽指令1. EQU偽指令偽指令 格式:格式: EQUEQU 其中
11、,表達(dá)式可以是一個常數(shù),一個可以求出常數(shù)值的表達(dá)式,其中,表達(dá)式可以是一個常數(shù),一個可以求出常數(shù)值的表達(dá)式,一個寄存器名或一個指令助記符一個寄存器名或一個指令助記符, ,但表達(dá)式的值不能超過但表達(dá)式的值不能超過 65535 65535 。例如:例如: COUNT EQU 20 ;COUNT代替常數(shù)代替常數(shù)20 COUNT1 EQU COUNT+10 ; COUNT1代表表達(dá)式代表表達(dá)式COUNT+10C EQU CX ;C是寄存器是寄存器CX的同義語的同義語B EQU DS:BP+20 ;地址表達(dá)式;地址表達(dá)式DS:BP+20可由可由B代替代替有了以上賦值后,下列語句是正確的:有了以上賦值后,
12、下列語句是正確的: MOV AX,COUNT1注意:一個符號一經(jīng)注意:一個符號一經(jīng)EQUEQU賦值之后,在整個程序中,這個賦值之后,在整個程序中,這個符號不能重新再賦值,除非用符號不能重新再賦值,除非用PURGEPURGE偽指令解除定義。偽指令解除定義。 等號偽指令與等號偽指令與EQUEQU具有相同的功能,區(qū)別僅在于等號偽指具有相同的功能,區(qū)別僅在于等號偽指令定義的符號允許重新定義。令定義的符號允許重新定義。例:例: EMP = 60 ;定義;定義EMP等于常數(shù)等于常數(shù)60 EMP=EMP+1;又定義;又定義EMP等于常數(shù)等于常數(shù)61 格式:格式: 2.等號(賦值)偽指令等號(賦值)偽指令3.
13、3.解除符號定義偽指令解除符號定義偽指令 格式:格式: PURGE 符號符號1,符號,符號2. 功能:解除之前引用符號的定義功能:解除之前引用符號的定義4.2.2 4.2.2 內(nèi)存數(shù)據(jù)定義偽指令內(nèi)存數(shù)據(jù)定義偽指令 常用的數(shù)據(jù)定義偽指令有常用的數(shù)據(jù)定義偽指令有DBDB、DWDW、DDDD、DQDQ、DTDT,分別用來,分別用來定義字節(jié)、單字、雙字、四字及十字節(jié)類型變量。定義字節(jié)、單字、雙字、四字及十字節(jié)類型變量。 用于將所需要的數(shù)據(jù)放入指定的存儲單元中,或者是為程用于將所需要的數(shù)據(jù)放入指定的存儲單元中,或者是為程序分配指定數(shù)目的存儲單元,并根據(jù)情況對它們進(jìn)行初始化。序分配指定數(shù)目的存儲單元,并根
14、據(jù)情況對它們進(jìn)行初始化?;緫?yīng)用格式如下:基本應(yīng)用格式如下: 變量名變量名 DB/DB/DW/DD/DQ/DTDW/DD/DQ/DT 表達(dá)式表達(dá)式 其中:其中:變量名變量名是可選的,它代表所定義的第一單元的地址;是可選的,它代表所定義的第一單元的地址; 中的偽操作指令必須選用一種;中的偽操作指令必須選用一種; 表達(dá)式表達(dá)式這里的表達(dá)式可以是常數(shù)、數(shù)據(jù)表達(dá)式、地這里的表達(dá)式可以是常數(shù)、數(shù)據(jù)表達(dá)式、地址表達(dá)式、字符串和數(shù)據(jù)表格等。址表達(dá)式、字符串和數(shù)據(jù)表格等。 1. DB:定義字節(jié)變量,其后的每一個表達(dá)式占一個字節(jié)定義字節(jié)變量,其后的每一個表達(dá)式占一個字節(jié)。 2. DW:定義字變量,其后的每定義字
15、變量,其后的每個表達(dá)式的值占二個字節(jié),個表達(dá)式的值占二個字節(jié),低字節(jié)在低地址,高字節(jié)在高地址。低字節(jié)在低地址,高字節(jié)在高地址。 3. DD:定義雙字變量,其后的每一個表達(dá)式的值占四個字定義雙字變量,其后的每一個表達(dá)式的值占四個字節(jié),同樣低字節(jié)在低地址,高字節(jié)在高地址節(jié),同樣低字節(jié)在低地址,高字節(jié)在高地址。 4. DQ:定義四字變量,其后的每一個表達(dá)式的值占八個字定義四字變量,其后的每一個表達(dá)式的值占八個字節(jié),低字節(jié)放低地址,高字節(jié)放高地址。節(jié),低字節(jié)放低地址,高字節(jié)放高地址。 5. DT:定義十個字節(jié),其后的每一個表達(dá)式的值占十個字:定義十個字節(jié),其后的每一個表達(dá)式的值占十個字節(jié)。一般用于存放
16、壓縮的節(jié)。一般用于存放壓縮的BCD碼。碼。 6. 復(fù)制操作符復(fù)制操作符 DUP 格式:格式: n n DUP DUP 表達(dá)式表達(dá)式 用于定義重復(fù)變量,用于定義重復(fù)變量,DUP是重復(fù)數(shù)據(jù)操作符,是重復(fù)數(shù)據(jù)操作符,n表示重復(fù)表示重復(fù)次數(shù),括號內(nèi)的表達(dá)式表示要重復(fù)的內(nèi)容。次數(shù),括號內(nèi)的表達(dá)式表示要重復(fù)的內(nèi)容。 例例1 1:VAR1 DB 20H; 給變量給變量VAR1分配一字節(jié)單元,分配一字節(jié)單元, 并賦值為并賦值為20H其中,其中,VAR1VAR1是它的標(biāo)號是它的標(biāo)號( (名稱名稱) )部分,它代表由偽指令部分,它代表由偽指令DBDB分配的分配的那個單元的符號地址,又叫做變量名。那個單元的符號地址
17、,又叫做變量名。例例2 2: DAT2 DW 3456H, 3456H, 0,?, 1024H0,?, 1024H例例3 3: TAB DB 10 DUPTAB DB 10 DUP(0 0) ;數(shù)組變量數(shù)組變量TABTAB有有1010為為0 0的字節(jié)元素的字節(jié)元素 DAT210H24H56H34H00H00H4.2.3 4.2.3 段定義偽指令段定義偽指令(程序塊定義)(程序塊定義)80868086利用存儲器分段技術(shù)管理存儲器信息,段定義偽指令可利用存儲器分段技術(shù)管理存儲器信息,段定義偽指令可使我們按段來組織程序和使用存儲器。使我們按段來組織程序和使用存儲器。在匯編和連接時,控在匯編和連接時,
18、控制段的定位、組合和連接。制段的定位、組合和連接。其格式為:其格式為: SEGMENT 定位方式定位方式連接方式連接方式類別類別名名 段體段體 ENDS段名:段名:由編程者為該段起的名字由編程者為該段起的名字 ,起始段名與預(yù)結(jié)束段,起始段名與預(yù)結(jié)束段名必須相同。名必須相同。其中定位方式、連接方式和類別名是可選的,若選兩其中定位方式、連接方式和類別名是可選的,若選兩個以上時,書寫時順序必須與格式中的順序一致。個以上時,書寫時順序必須與格式中的順序一致。 2.定位方式:定位方式:告訴匯編程序(告訴匯編程序(MASM.EXEMASM.EXE)對該段匯編時,該段)對該段匯編時,該段的起始邊界的要求的起
19、始邊界的要求??梢杂锌梢杂? 4種選擇種選擇: : PAGE:段超始地址的最低段超始地址的最低8 8位必須為位必須為0 0,它使得段間可能留有,它使得段間可能留有1 1到到255255個字節(jié)的間隙。個字節(jié)的間隙。 PARA:段起始地址的最低段起始地址的最低4 4位必須為位必須為0 0,它使得段間留有它使得段間留有1 1到到1515個字節(jié)的間隙個字節(jié)的間隙 。 WORD:段起始地址的最低段起始地址的最低1 1位必須為位必須為0 0,即從偶地址開始。,即從偶地址開始。 BYTE;段起始地址為任意值,段起始地址為任意值,它使得段間不留有任何間隙。它使得段間不留有任何間隙。 在實際應(yīng)用中,每個段的定位
20、類型常選在實際應(yīng)用中,每個段的定位類型常選PARAPARA(節(jié))(節(jié))型。型。因為若選因為若選PAGEPAGE(頁)型,將會使相鄰的段間有較大(頁)型,將會使相鄰的段間有較大空間的浪費;而選空間的浪費;而選WORDWORD或或BYTEBYTE型,又很難做到使一個段型,又很難做到使一個段的偏移地址從的偏移地址從0000H0000H開始。開始。 3. 3. 連接方式(組合類型):表示本段與其它段的關(guān)系,是為連接程序連接方式(組合類型):表示本段與其它段的關(guān)系,是為連接程序提供信息的,可以有提供信息的,可以有6 6種選擇。種選擇。1)NONE:表示本段與其它段邏輯上不發(fā)生關(guān)系,有獨立的段地址,表示本
21、段與其它段邏輯上不發(fā)生關(guān)系,有獨立的段地址,這是系統(tǒng)隱含的連接方式(缺省時)。這是系統(tǒng)隱含的連接方式(缺省時)。2)PUBLIC:連接時該段與其他模塊中說明為連接時該段與其他模塊中說明為PUBLIC的的同名同類別的同名同類別的段鏈接起來共用一個段地址,形成一個物理段。段鏈接起來共用一個段地址,形成一個物理段。 段地址同,偏移地址不同。段地址同,偏移地址不同。例例1 1:DATA1 SEGMENT PUBLIC X DB 10H DATA1 ENDS DATA1 SEGMENT PUBLIC Y DW 1234H DATA1 ENDS 例例2 2:DATA1 SEGMENT X DB 10H Y
22、 DW 1234H DATA1 ENDS3)STACK:連接方式與連接方式與PUBLIC,但此段作為堆棧段。,但此段作為堆棧段。 源程序中至少有一個堆棧段。源程序中至少有一個堆棧段。4)COMMON:連接程序為本段和其它連接程序為本段和其它同名同類別的同名同類別的段指定相同的段基址。段指定相同的段基址。因而這些段是因而這些段是相互重疊的相互重疊的。 連接后,段的長度是各模塊同名段中最大的連接后,段的長度是各模塊同名段中最大的COMMON段長度。段長度。 5) MEMORY:連接程序?qū)驯径味ㄎ辉诒贿B接在一起的其它所有段之上,:連接程序?qū)驯径味ㄎ辉诒贿B接在一起的其它所有段之上,即高地址區(qū)域。即
23、高地址區(qū)域。6) AT 連接程序的把本段地址設(shè)為表達(dá)式的值所指定的段連接程序的把本段地址設(shè)為表達(dá)式的值所指定的段地址上,位移量為地址上,位移量為0。不能用于代碼段的連接不能用于代碼段的連接。 例如例如 AT 1234H ;表示該段段基址為;表示該段段基址為12340H 4.4.類別名類別名: : 類別名是編程者給各段的一種名字信息。連接程序?qū)㈩悇e名相類別名是編程者給各段的一種名字信息。連接程序?qū)㈩悇e名相同的段組成一個段組,用它們共同的類別名字作為這個段組的名字。通常使同的段組成一個段組,用它們共同的類別名字作為這個段組的名字。通常使用的類別有用的類別有 STACK STACK ,CODECOD
24、E,DATADATA等等。等等。類別必須用單引號類別必須用單引號引起來。引起來。 使用段定義語句的說明:使用段定義語句的說明: 源程序模塊中的某一段,可使用一對源程序模塊中的某一段,可使用一對SEGMENT和和ENDS編寫完畢,也編寫完畢,也可以分為多對可以分為多對SEGMENT和和ENDS編寫,只要使用相同的段名即可。但這編寫,只要使用相同的段名即可。但這些段的些段的SEGMENT語句的連接方式、定義方式、分類名應(yīng)相同,不得相互語句的連接方式、定義方式、分類名應(yīng)相同,不得相互矛盾,或者以先出現(xiàn)矛盾,或者以先出現(xiàn)SEGMENTSEGMENT語句為準(zhǔn),其余均省略不寫。語句為準(zhǔn),其余均省略不寫。
25、4.2.4 4.2.4 段寄存器說明偽指令段寄存器說明偽指令 段寄存器說明偽指令段寄存器說明偽指令A(yù)SSUME 用來設(shè)定程序中各實際的用來設(shè)定程序中各實際的段與各段寄存器之間的關(guān)系,段與各段寄存器之間的關(guān)系,格式如下:格式如下: ASSUME段寄存器段寄存器:段名段名 ,段寄存器段寄存器:段名段名 功能:告訴匯編程序哪個段寄存器將為哪個段名尋址。功能:告訴匯編程序哪個段寄存器將為哪個段名尋址。 其中:其中:段寄存器名為段寄存器名為CSCS、DSDS、ESES和和SSSS中的一個;中的一個; 段名為程序中由段名為程序中由SEGMENTSEGMENT定義的段之段名。定義的段之段名。 ASSUMEA
26、SSUME偽指令只是設(shè)定了哪個段寄存器指向哪一個段,并偽指令只是設(shè)定了哪個段寄存器指向哪一個段,并沒有給各段寄存器裝入實際的值。所以一般在程序要用指令沒有給各段寄存器裝入實際的值。所以一般在程序要用指令來完成給段寄存器賦初值。來完成給段寄存器賦初值。注意:注意:CSCS的值在程序初始化時由匯編程序自動給出,因此的值在程序初始化時由匯編程序自動給出,因此一般不在程序中賦值。堆棧段可以不用一般不在程序中賦值。堆棧段可以不用ASSUMEASSUME語句,此時利語句,此時利用系統(tǒng)設(shè)置的堆棧。用系統(tǒng)設(shè)置的堆棧。例例46 如某一匯編語言源程序如下:如某一匯編語言源程序如下: NAME ASMPLE DAT
27、A SEGMENT X DB 10H Y DW 2020H DATA ENDS STACK SEGMENT DW 128DUP(?(?) STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX CODE ENDS. END START不能向段寄存不能向段寄存器送立即數(shù)器送立即數(shù)4.2.5 4.2.5 定位偽指令定位偽指令1. 起址定位起址定位 偽指令偽指令ORG 格式為格式為: ORG 功能功能:該指令后生成的目標(biāo)代碼(該指令后生成的目標(biāo)代
28、碼(程序或數(shù)據(jù)代碼)程序或數(shù)據(jù)代碼),從表,從表達(dá)式提供的達(dá)式提供的偏移地址偏移地址開始存放開始存放。 2.2.地址定位偽指令地址定位偽指令 EVEN格式:格式: EVEN 功能:功能:告訴匯編程序把以下的程序或數(shù)據(jù)從告訴匯編程序把以下的程序或數(shù)據(jù)從偶地址開始存放偶地址開始存放。例如例如:DATA SEGMENT X DB 64H EVEN Y DW 1234H ORG 06H Z DB A DATA ENDS64-3412-41偏移地址偏移地址內(nèi)容內(nèi)容0000H000100020003000400050006A4.2.6 4.2.6 子程序(子程序(過程定義)過程定義)定義偽指令定義偽指令子
29、程序:具有一定功能的程序段。子程序通常以過程的形式編寫。子程序:具有一定功能的程序段。子程序通常以過程的形式編寫。 格式:格式:子程序名子程序名PROC 類型類型 NEAR/FAR RET 子程序名子程序名ENDP 1 1)子程序名是為該過程取的名字,具有與語句標(biāo)號相同的子程序名是為該過程取的名字,具有與語句標(biāo)號相同的屬性;屬性; 2 2)類型屬性可以有類型屬性可以有NEARNEAR和和FARFAR兩種。若類型缺省或為兩種。若類型缺省或為NEARNEAR時,時,表示該過程只能為所在段的程序調(diào)用;若為表示該過程只能為所在段的程序調(diào)用;若為FARFAR時,則可被跨時,則可被跨段調(diào)用。段調(diào)用。 3
30、3)RETRET為過程返回指令,不能省,否則過程將無法返回。返為過程返回指令,不能省,否則過程將無法返回。返回指令屬于段內(nèi)返回還是段間返回與過程類型有關(guān)?;刂噶顚儆诙蝺?nèi)返回還是段間返回與過程類型有關(guān)。 4.2.6 4.2.6 模塊定義偽指令模塊定義偽指令 設(shè)計大型程序時一般采用??旎Y(jié)構(gòu),先將程序分模塊編設(shè)計大型程序時一般采用??旎Y(jié)構(gòu),先將程序分模塊編寫成不同的源程序文件,并分別命名。匯編時也將產(chǎn)生各個不寫成不同的源程序文件,并分別命名。匯編時也將產(chǎn)生各個不同的目標(biāo)代碼文件,再通過連接程序連接成一個完整的程序。同的目標(biāo)代碼文件,再通過連接程序連接成一個完整的程序。說明:說明: 模塊名是為該模
31、塊起的名字模塊名是為該模塊起的名字( (以字母開頭,最多以字母開頭,最多6 6個字符),個字符),NAME語句可缺省,若缺省,該模塊的源程序文件名就是模塊語句可缺省,若缺省,該模塊的源程序文件名就是模塊名;名; 若該模塊是主模塊,若該模塊是主模塊,ENDEND語句后跟一個標(biāo)號,它表示模塊執(zhí)語句后跟一個標(biāo)號,它表示模塊執(zhí)行時的起始地址,是該模塊第一條行時的起始地址,是該模塊第一條指令性語句指令性語句的標(biāo)號的標(biāo)號。 ENDEND總是放在程序的最后通知匯編程序,源程序到此結(jié)束??偸欠旁诔绦虻淖詈笸ㄖ獏R編程序,源程序到此結(jié)束。 1.1.模塊開始偽指令模塊開始偽指令格式格式: NAME 模塊名模塊名2.
32、2.模塊結(jié)束指令模塊結(jié)束指令格式格式: END 標(biāo)號標(biāo)號/過程名過程名 功能:功能:由由NAMENAME開始到開始到ENDEND之間定義一個匯之間定義一個匯編語言源程序模塊。編語言源程序模塊。* *4.2.8 4.2.8 外部符號定義偽指令(外部符號定義偽指令(程序模塊連接)1. 公用符號公用符號PUBLIC 格式:格式:PUBLIC ,1 ,符號名符號名2,2,功能:表示該模塊中的符號常量、變量、標(biāo)號、過程名等可以被其它模功能:表示該模塊中的符號常量、變量、標(biāo)號、過程名等可以被其它模塊引用;塊引用; 2. 2. 引用符號引用符號 EXTRN 格式:格式:EXTRN 符號符號1 1:類型:類型
33、 ,符號,符號2 2:類型,:類型, 功能:表示在其它模塊中定義過并說明為功能:表示在其它模塊中定義過并說明為PUBLIC的那些符號,在本模塊的那些符號,在本模塊中需要引用;中需要引用; * *4.2.9 4.2.9 記錄記錄 偽指令偽指令 這種偽指令用于對一組這種偽指令用于對一組/一類信息可定義為記錄形式一類信息可定義為記錄形式按位按位實現(xiàn)信息組實現(xiàn)信息組合。包括有:合。包括有: 1.記錄定義偽指令記錄定義偽指令 RECORD(寬度(寬度116) 2.記錄內(nèi)存分配偽指令(記錄的預(yù)置)記錄內(nèi)存分配偽指令(記錄的預(yù)置) 3.記錄操作符記錄操作符 WIDTH、MASK* *4.2.10 4.2.1
34、0 結(jié)構(gòu)結(jié)構(gòu) 偽指令偽指令 結(jié)構(gòu)就是相互關(guān)聯(lián)的一組數(shù)據(jù)的某種組合形式。使用結(jié)構(gòu),往往需要結(jié)構(gòu)就是相互關(guān)聯(lián)的一組數(shù)據(jù)的某種組合形式。使用結(jié)構(gòu),往往需要進(jìn)行以下幾步工作:進(jìn)行以下幾步工作: 結(jié)構(gòu)的定義,結(jié)構(gòu)的預(yù)置(分配),結(jié)構(gòu)的引用結(jié)構(gòu)的定義,結(jié)構(gòu)的預(yù)置(分配),結(jié)構(gòu)的引用1.1.結(jié)構(gòu)的定義結(jié)構(gòu)的定義格式:格式: 結(jié)構(gòu)名結(jié)構(gòu)名 STRUC . . 結(jié)構(gòu)名結(jié)構(gòu)名 ENDS功能:功能:用偽指令用偽指令STRUCSTRUC和和ENDSENDS把相關(guān)數(shù)據(jù)定義語句組合起來,把相關(guān)數(shù)據(jù)定義語句組合起來,便構(gòu)成一個完整的結(jié)構(gòu)。并不具體分配內(nèi)存空間,僅對結(jié)構(gòu)的便構(gòu)成一個完整的結(jié)構(gòu)。并不具體分配內(nèi)存空間,僅對結(jié)構(gòu)的
35、使用作說明。使用作說明。例如,對于學(xué)生成績情況,可定義一個結(jié)構(gòu)例如,對于學(xué)生成績情況,可定義一個結(jié)構(gòu)STUDENT: STUDENT STRUC NO DW ? NAME1 DB,ABCD SEX DB ? SCORE DB? STUDENT ENDSSTUDENT叫做結(jié)構(gòu)名,結(jié)構(gòu)內(nèi)數(shù)據(jù)定義語句中變量名叫叫做結(jié)構(gòu)名,結(jié)構(gòu)內(nèi)數(shù)據(jù)定義語句中變量名叫做結(jié)構(gòu)字段名,如做結(jié)構(gòu)字段名,如NAME1、NO、 SEX 、SCORE都是都是結(jié)構(gòu)字段名。各項數(shù)據(jù)稱為結(jié)構(gòu)的字段。結(jié)構(gòu)字段名。各項數(shù)據(jù)稱為結(jié)構(gòu)的字段。結(jié)構(gòu)的定義完成之后,就好像在某些高級語言中結(jié)構(gòu)的定義完成之后,就好像在某些高級語言中完成了完成了某些數(shù)
36、據(jù)類型的定義。某些數(shù)據(jù)類型的定義。2. 結(jié)構(gòu)分配結(jié)構(gòu)分配格式:格式:結(jié)構(gòu)變量名結(jié)構(gòu)變量名 結(jié)構(gòu)名結(jié)構(gòu)名 其中結(jié)構(gòu)名是結(jié)構(gòu)定義時用的名字。其中結(jié)構(gòu)名是結(jié)構(gòu)定義時用的名字。結(jié)構(gòu)變量名是程序中具體使用的變量,它與具體的結(jié)構(gòu)變量名是程序中具體使用的變量,它與具體的存儲空間及數(shù)存儲空間及數(shù)據(jù)據(jù)相聯(lián)系,程序中可直接引用它。相聯(lián)系,程序中可直接引用它。字段值表用來給結(jié)構(gòu)變量賦初值,表中各字段的排列順序及類型字段值表用來給結(jié)構(gòu)變量賦初值,表中各字段的排列順序及類型應(yīng)與結(jié)構(gòu)定義時一致,各字段間以逗號分開。應(yīng)與結(jié)構(gòu)定義時一致,各字段間以逗號分開。 例如,對前面定義的例如,對前面定義的STUDENT結(jié)構(gòu),可定義一些
37、結(jié)構(gòu)變量,每一個結(jié)構(gòu),可定義一些結(jié)構(gòu)變量,每一個變量代表一個學(xué)生的信息。設(shè)有兩個學(xué)生,則可有:變量代表一個學(xué)生的信息。設(shè)有兩個學(xué)生,則可有:STU1 STUDENT STU2 STUDENT 若不在預(yù)置語句中放入學(xué)生的實際信息,而是在程序運行過程中來若不在預(yù)置語句中放入學(xué)生的實際信息,而是在程序運行過程中來放入,則仍需開辟一定的存儲區(qū),可以這樣來預(yù)置:放入,則仍需開辟一定的存儲區(qū),可以這樣來預(yù)置:STU1 STUDENT STU2 STUDENT 或者:或者: STU STUDENT 2 DUP() 3. 結(jié)構(gòu)的引用結(jié)構(gòu)的引用程序中引用結(jié)構(gòu)變量,則和其它變量一樣,可直接寫結(jié)構(gòu)程序中引用結(jié)構(gòu)變量
38、,則和其它變量一樣,可直接寫結(jié)構(gòu)變量名。變量名。若要引用結(jié)構(gòu)變量中的某一字段,則采用如下形式:若要引用結(jié)構(gòu)變量中的某一字段,則采用如下形式:(1 1)格式)格式1 1:結(jié)構(gòu)變量名:結(jié)構(gòu)變量名結(jié)構(gòu)字段名結(jié)構(gòu)字段名 (2 2)格式)格式2 2: 地址寄存器地址寄存器結(jié)構(gòu)字段名結(jié)構(gòu)字段名 即先將結(jié)構(gòu)變量的起始地址的偏移量送某個地址寄存器即先將結(jié)構(gòu)變量的起始地址的偏移量送某個地址寄存器若要引用結(jié)構(gòu)變量若要引用結(jié)構(gòu)變量STU1中的中的SCORE字段,則以下兩種用法都是正確的字段,則以下兩種用法都是正確的; MOV AL,STU SCORE MOV BX,OFFSET STU1 MOV AL,BX SCO
39、RE由此看到,若需要查詢某個學(xué)生的某門成績,利用結(jié)構(gòu)就很簡單方便,由此看到,若需要查詢某個學(xué)生的某門成績,利用結(jié)構(gòu)就很簡單方便,而不必去計算這個數(shù)據(jù)的地址。而不必去計算這個數(shù)據(jù)的地址。4.2.11 4.2.11 塊注釋塊注釋 偽指令偽指令格式:格式:COMMENT 定界符定界符 注釋注釋 定界符定界符其中定界符為任意非空字符,一般用其中定界符為任意非空字符,一般用/或或*號號一般對程序中的單行注釋可用一般對程序中的單行注釋可用;號引導(dǎo)號引導(dǎo)。較長的注釋可用較長的注釋可用COMMENT偽指令定義。偽指令定義。例如:例如: COMMENT / 注釋注釋 ./ 4.3 4.3 表達(dá)式及運算符表達(dá)式及
40、運算符 在匯編語言中指令的操作數(shù)可以是常數(shù)、寄存器、變量、在匯編語言中指令的操作數(shù)可以是常數(shù)、寄存器、變量、標(biāo)號,還可以是表達(dá)式。標(biāo)號,還可以是表達(dá)式。 表達(dá)式的組成表達(dá)式的組成: 運算對象:運算對象:常量、變量、標(biāo)號;常量、變量、標(biāo)號; 運算符:運算符:算術(shù)運算符、邏輯運算符、關(guān)系運算符、算術(shù)運算符、邏輯運算符、關(guān)系運算符、 分析運算符和屬性運算符分析運算符和屬性運算符共共5 5種。種。表達(dá)式的運算:表達(dá)式的運算: 表達(dá)式的運算和運算指令不同,它是由匯編程序表達(dá)式的運算和運算指令不同,它是由匯編程序匯編時匯編時完成完成,運算所得結(jié)果再作為語句操作數(shù)使用。,運算所得結(jié)果再作為語句操作數(shù)使用。
41、匯編程序在匯編過程中計算表達(dá)式,最終得到一個數(shù)值;匯編程序在匯編過程中計算表達(dá)式,最終得到一個數(shù)值;程序運行之前,就已經(jīng)計算出了表達(dá)式的值;所以,程序程序運行之前,就已經(jīng)計算出了表達(dá)式的值;所以,程序運行速度沒有變慢,但增強(qiáng)程序的可讀性。運行速度沒有變慢,但增強(qiáng)程序的可讀性。4.3.14.3.1常數(shù)、變量和標(biāo)號常數(shù)、變量和標(biāo)號 4.3.1.1 4.3.1.1 常數(shù)常數(shù) 常數(shù):是在匯編時已經(jīng)確定的常數(shù)值,常數(shù)可以是常數(shù):是在匯編時已經(jīng)確定的常數(shù)值,常數(shù)可以是“數(shù)值常數(shù)數(shù)值常數(shù)”和和“字符常數(shù)字符常數(shù)”。1.1.數(shù)值型常數(shù)數(shù)值型常數(shù) 十進(jìn)制十進(jìn)制由由0 9數(shù)字組成,數(shù)字組成,以字母以字母D(d)結(jié)
42、尾(缺省情況可以省略)結(jié)尾(缺省情況可以省略)100,255D二進(jìn)制二進(jìn)制由由0和和1兩個數(shù)字組成,以字母兩個數(shù)字組成,以字母B(b)結(jié)尾)結(jié)尾01100100B十六進(jìn)制十六進(jìn)制由由0 9、A F數(shù)字組成,以字母數(shù)字組成,以字母H(h)結(jié))結(jié)尾,以字母開頭的常數(shù)需要加一個前導(dǎo)尾,以字母開頭的常數(shù)需要加一個前導(dǎo)064H,0FFH0B800H八進(jìn)制八進(jìn)制由由0 7數(shù)字組成,以字母數(shù)字組成,以字母Q(q)結(jié)尾)結(jié)尾)732Q實數(shù)實數(shù)由整數(shù)、小數(shù)和指數(shù)組成(浮點表示)由整數(shù)、小數(shù)和指數(shù)組成(浮點表示)以十進(jìn)制形式給出以十進(jìn)制形式給出-0.31E+42. 2. 字符常數(shù)字符常數(shù) 字符常數(shù)是用單引號或雙引
43、號括起來的單個字符或多個字符,其數(shù)值字符常數(shù)是用單引號或雙引號括起來的單個字符或多個字符,其數(shù)值是每個字符對應(yīng)的是每個字符對應(yīng)的ASCIIASCII碼值。碼值。4.3.1.2 4.3.1.2 變量變量 變量常以變量常以變量名變量名的形式出現(xiàn)在程序中,可以看作是存放數(shù)據(jù)的存儲單的形式出現(xiàn)在程序中,可以看作是存放數(shù)據(jù)的存儲單元的元的符號地址符號地址,它用來定義存儲器中的數(shù)據(jù)。,它用來定義存儲器中的數(shù)據(jù)。 變量具有三種屬性:變量具有三種屬性: 段屬性:變量所在邏輯段的段地址;段屬性:變量所在邏輯段的段地址; 偏移地址屬性:變量所在段的段內(nèi)偏移地址;偏移地址屬性:變量所在段的段內(nèi)偏移地址; 類型屬性:
44、變量占用存儲單元的字節(jié)數(shù):類型屬性:變量占用存儲單元的字節(jié)數(shù): BYTE字節(jié)型;字節(jié)型; WORD字型;字型; DWORD雙字型,四字節(jié);雙字型,四字節(jié); QWORD四字型,八字節(jié)四字型,八字節(jié) ; TBYTE五字型,十字節(jié)。五字型,十字節(jié)。 變量的類型屬性是由定義變量的偽指令變量的類型屬性是由定義變量的偽指令DB、DW、DD、DQ、DT確定確定。 注意:注意:變量實質(zhì)上是指內(nèi)存單元的數(shù)據(jù),雖然內(nèi)存單元地變量實質(zhì)上是指內(nèi)存單元的數(shù)據(jù),雖然內(nèi)存單元地 址不變,但其中存放的數(shù)據(jù)可以改變;址不變,但其中存放的數(shù)據(jù)可以改變; 變量需要事先定義才能使用;變量需要事先定義才能使用; 定義后的變量可以利用變
45、量名等方法引用其中的定義后的變量可以利用變量名等方法引用其中的 數(shù)據(jù),即變量的數(shù)值。數(shù)據(jù),即變量的數(shù)值。 4.3.1.3 4.3.1.3 標(biāo)號標(biāo)號 標(biāo)號標(biāo)號是給指令性語句所在單元地址取的名字,它表明是給指令性語句所在單元地址取的名字,它表明該指令在存儲器中的位置該指令在存儲器中的位置符號地址,可作為轉(zhuǎn)移類指令符號地址,可作為轉(zhuǎn)移類指令的操作數(shù)。的操作數(shù)。 它也有三種屬性:它也有三種屬性: 段屬性:段屬性:標(biāo)號(指令代碼)所在段的段地址;標(biāo)號(指令代碼)所在段的段地址; 偏移地址屬性:偏移地址屬性:標(biāo)號(指令代碼)所在段的段內(nèi)偏移地址;標(biāo)號(指令代碼)所在段的段內(nèi)偏移地址; 距離屬性(也稱類型屬
46、性):距離屬性(也稱類型屬性): NEAR:近標(biāo)號,表示該標(biāo)號在段內(nèi)使用;近標(biāo)號,表示該標(biāo)號在段內(nèi)使用; FAR: 遠(yuǎn)標(biāo)號,表示該標(biāo)號在段間使用。遠(yuǎn)標(biāo)號,表示該標(biāo)號在段間使用。 4.3.2 4.3.2 表達(dá)式及運算符表達(dá)式及運算符1.算術(shù)運算符算術(shù)運算符 算術(shù)運算符有:算術(shù)運算符有: + +(加)、(加)、- -(減)、(減)、* *(乘)、(乘)、/ /(除)、(除)、MODMOD(模除)、(模除)、SHLSHL(左移)、(左移)、SHRSHR(右移)共(右移)共7 7種。種。 注意點:注意點:除(除(/ /)只取商,模除()只取商,模除(MODMOD)只取余,)只取余,SHLSHL一次相一
47、次相當(dāng)于當(dāng)于* *2 2,SHRSHR一次相當(dāng)于一次相當(dāng)于/2/2。 例如:例如:mov ax,3mov ax,3* *4+5 4+5 ;等價于等價于 mov ax,17mov ax,17 19 mod 7 = 5 19 mod 7 = 5 ;其中;其中MODMOD也稱為也稱為取模取?;蚧蛉∮嗳∮?,它產(chǎn)生,它產(chǎn)生 除法之后的除法之后的余數(shù)。余數(shù)。移位運算符實現(xiàn)對移位運算符實現(xiàn)對數(shù)值數(shù)值的左移、右移的邏輯操作;移入低的左移、右移的邏輯操作;移入低位或高位的是位或高位的是0 0。格式為:數(shù)值表達(dá)式格式為:數(shù)值表達(dá)式 SHL/SHR SHL/SHR 移位次數(shù)移位次數(shù)例如:例如:mov al,0101
48、b SHL (2mov al,0101b SHL (2* *2);2);等價于等價于 mov al,01010000bmov al,01010000b 以上七種運算可直接對數(shù)字進(jìn)行運算,但對地址的運算,以上七種運算可直接對數(shù)字進(jìn)行運算,但對地址的運算,只用加法和減法才具有實際意義,并且要求進(jìn)行加、減的兩個只用加法和減法才具有實際意義,并且要求進(jìn)行加、減的兩個地址應(yīng)在同一段內(nèi),否則運算結(jié)果便不是一個有效地址了。地址應(yīng)在同一段內(nèi),否則運算結(jié)果便不是一個有效地址了。 例:這是一個程序的片段,分析算術(shù)運算符的使用例:這是一個程序的片段,分析算術(shù)運算符的使用。 DATA SEGMENT BUFFER D
49、B 2,3,5,7,4DATA ENDS CODE SEGMENT MOV AL,BUFFER3 ;將;將BUFFER字節(jié)單元以后的第三單元的內(nèi)容送字節(jié)單元以后的第三單元的內(nèi)容送AL ADD AL,3*2-5 MOD 3 ;將表達(dá)式;將表達(dá)式3*2-5 MOD 3的值和的值和AL的內(nèi)容相加送的內(nèi)容相加送AL MOV BL,01010000B SHR 4 ;將二進(jìn)制數(shù);將二進(jìn)制數(shù)01010000右移四次后送右移四次后送BL CODE ENDS2.2.邏輯運算符邏輯運算符 邏輯運算符對其操作數(shù)進(jìn)行邏輯運算符對其操作數(shù)進(jìn)行按位操作按位操作。邏輯運算只能用于數(shù)字表達(dá)式。邏輯運算只能用于數(shù)字表達(dá)式中。中
50、。 邏輯運算符有:邏輯運算符有:AND(AND(與與) )、OR(OR(或或) )、XOR(XOR(異或異或) )和和NOT(NOT(非非) )。例:例:MOV AL,0F0H AND 88H ;匯編成;匯編成 MOV AL,80H MOV DH,0F0H OR 88H ;匯編成;匯編成 MOV DH,0F8H AND BL,0F0H XOR 0AH ;匯編成;匯編成 AND BL,0FAH MOV CX,NOT 88H ;匯編成;匯編成 MOV CX,0FF77H 3.3.關(guān)系運算符關(guān)系運算符 關(guān)系運算符有關(guān)系運算符有EQEQ( (相等相等) )、NENE( (不相等不相等) )、LTLT(
51、 (小于小于) )、GTGT( (大于大于) )、LELE( (小于或等于小于或等于) )、GEGE( (大于或等于大于或等于) )共六種。共六種。 關(guān)系運算的結(jié)果只可能是兩種情況:對兩個運算對象進(jìn)行比較操作,關(guān)系運算的結(jié)果只可能是兩種情況:對兩個運算對象進(jìn)行比較操作,即關(guān)系成立或不成立。當(dāng)關(guān)系成立時(即關(guān)系成立或不成立。當(dāng)關(guān)系成立時(TRUETRUE) ,運算結(jié)果為全,運算結(jié)果為全1 1,不成,不成立(立(FALSEFALSE)為全)為全0 0。例如:例如:MOV AX,2 LT 5; ;2小于小于5關(guān)系成立關(guān)系成立 ;匯編成;匯編成: MOV AX, 0FFFFH4.4.分析運算符(取值運
52、算符)分析運算符(取值運算符) 分析運算符是對存儲器地址進(jìn)行運算的。它可以將存儲器地分析運算符是對存儲器地址進(jìn)行運算的。它可以將存儲器地址的三個重要屬性址的三個重要屬性, ,即段、偏移量和類型分離出來,返回到所在即段、偏移量和類型分離出來,返回到所在位置作操作數(shù)使用。位置作操作數(shù)使用。其操作對象必須是存儲器操作數(shù),即變量、其操作對象必須是存儲器操作數(shù),即變量、標(biāo)號或過程名標(biāo)號或過程名分析運算符共有五個:分析運算符共有五個:SEGSEG、OFFSETOFFSET、TYPETYPE、SIZESIZE和和LENGTHLENGTH使用格式為:取值運算符使用格式為:取值運算符 變量或標(biāo)號變量或標(biāo)號 返回
53、的結(jié)果是一個數(shù)值常量。返回的結(jié)果是一個數(shù)值常量。 1 1)取段地址運算符取段地址運算符 SEG格式:格式:SEG 該運算返回變量或標(biāo)號所在段的段地址(字常量)。該運算返回變量或標(biāo)號所在段的段地址(字常量)。 例:例:MOV AXMOV AX,SEG BUF SEG BUF ;BXBX變量變量BUFBUF的段地址的段地址 2 2)取段內(nèi)偏移地址符)取段內(nèi)偏移地址符 OFFSET OFFSET 該運算返回變量或標(biāo)號所在段的段內(nèi)偏移地址。該運算返回變量或標(biāo)號所在段的段內(nèi)偏移地址。 格式:格式:OFFSET OFFSET 例:設(shè)例:設(shè)DATA是從存儲器實際地址是從存儲器實際地址02000H開始的一個數(shù)
54、據(jù)段,定義如下:開始的一個數(shù)據(jù)段,定義如下: DATA SEGMENT VAR1 DB 20,30 VAR2 DW 2000H,3000H DATA ENDS 則:則: 1) MOV BX,SEG VAR1 ;匯編成:匯編成: MOV BXMOV BX,0200H0200H 2) MOV CX,SEG VAR2 ;匯編成:匯編成: MOV CXMOV CX,0200H0200H 可見,同段內(nèi)所有變量的段基址相同,所以用可見,同段內(nèi)所有變量的段基址相同,所以用SEG求出的數(shù)值相等。求出的數(shù)值相等。3)MOV AX3)MOV AX,OFFSET VAR1 OFFSET VAR1 ;匯編成匯編成 :
55、MOV AXMOV AX,0 04)MOV BX4)MOV BX,OFFSET VAR2 OFFSET VAR2 ;匯編成匯編成 :MOV BXMOV BX,2 2 3 3)取類型屬性運算符取類型屬性運算符 TYPETYPE 格式:格式:TYPE TYPE 該運算返回變量或標(biāo)號的該運算返回變量或標(biāo)號的類型值。類型值。 若運算對象是變量,則返回變量類型若運算對象是變量,則返回變量類型所占字節(jié)數(shù)。所占字節(jié)數(shù)。 若運算對象是標(biāo)號,則返回標(biāo)號的若運算對象是標(biāo)號,則返回標(biāo)號的距離屬性值距離屬性值; 類類 型型類型值類型值 變變 量量 BYTE BYTE 1 1 WORD WORD 2 2 DWORD D
56、WORD 4 4QWORD QWORD 8 8 TWORD TWORD 10 10 標(biāo)標(biāo)號號 NEAR NEAR -1-1補碼補碼 FAR FAR -2 -2 補碼補碼5)MOV AL5)MOV AL,TYPE VAR1 TYPE VAR1 ;匯編成匯編成 :MOV ALMOV AL,1 16)MOV BL6)MOV BL,TYPE VAR2 TYPE VAR2 ;匯編成匯編成 :MOV BLMOV BL,2 2 例如:例如:求上例求上例VAR1VAR1、VAR2VAR2的類型值。的類型值。4 4)取數(shù)組變量元素個數(shù)運算符取數(shù)組變量元素個數(shù)運算符 LENGTH LENGTH 如果變量是用重復(fù)數(shù)
57、據(jù)操作符如果變量是用重復(fù)數(shù)據(jù)操作符DUPDUP說明的,則返回說明的,則返回DUPDUP前前面的數(shù)值(即重復(fù)次數(shù));如果沒有面的數(shù)值(即重復(fù)次數(shù));如果沒有DUPDUP說明,則返回值總說明,則返回值總是是“1”1”。例例1:若定義:若定義:VAR1 DB 4DUP(1) VAR2 DW 2 DUP(1,2,3)則:則: LENGTH VAR14 LENGTH VAR22例例2:若定義:若定義:VAR1 DB 1,1,1,1 VAR2 DW 1,2,3,1,2,3則則 : LENGTH VAR11 LENGTH VAR21因此因此LENGTHLENGTH運算符只對用運算符只對用DUPDUP定義的變
58、量才有意義定義的變量才有意義。 5)取數(shù)組變量總字節(jié)數(shù)運算符取數(shù)組變量總字節(jié)數(shù)運算符 SIZESIZE 該運算符返回復(fù)制數(shù)組變量所占的總字節(jié)數(shù),相當(dāng)于該運算符返回復(fù)制數(shù)組變量所占的總字節(jié)數(shù),相當(dāng)于LENGTHLENGTH和和TYPETYPE兩個運算符返回值的乘積。兩個運算符返回值的乘積。 格式:格式:SIZE 變量變量當(dāng)當(dāng)DUP括號內(nèi)為括號內(nèi)為 單項數(shù)據(jù)時,它的值可由下列公式計算:單項數(shù)據(jù)時,它的值可由下列公式計算: SIZE x LENGTH x * TYPE x SIZE和和LENGTH的功能類似,也是只有用于由的功能類似,也是只有用于由DUP定義的變量定義的變量才才 有意義。有意義。例例
59、1:若定義:若定義:VAR1 DW 5DUP(?) 則:則: SIZE VAR110例例2:若定義:若定義:VAR1 DW ?,?,?,?,?,?,? ,?,? 則則 : SIZE VAR12 5. 屬性運算符屬性運算符 這種運算符為存儲器地址操作數(shù)這種運算符為存儲器地址操作數(shù)臨時指定一個新的屬性臨時指定一個新的屬性,而忽略當(dāng)前的屬性,所以又稱為屬性修改運算符。而忽略當(dāng)前的屬性,所以又稱為屬性修改運算符。運算符有:運算符有:PTRPTR、段屬性前綴、段屬性前綴、SHORTSHORT、THISTHIS、HIGHHIGH和和LOWLOW 1) 定義符號類型定義符號類型 PTR格式:格式: PTR
60、PTR 作用:作用: PTRPTR運算符賦予運算符賦予“表達(dá)式表達(dá)式”指定的指定的“類型類型” 在在PTRPTR表達(dá)式中出現(xiàn)的類型表達(dá)式中出現(xiàn)的類型可以是可以是BYTEBYTE、WORDWORD、DWORDDWORD、NEARNEAR、FARFAR或結(jié)構(gòu)名稱?;蚪Y(jié)構(gòu)名稱。 PTR PTR右邊的地址表達(dá)式可以右邊的地址表達(dá)式可以是標(biāo)號以及作為地址指針的寄存是標(biāo)號以及作為地址指針的寄存器、變量和數(shù)值的各種組合形式。器、變量和數(shù)值的各種組合形式。新的類型只在所處的指令內(nèi)有效。新的類型只在所處的指令內(nèi)有效。 例例1:已知內(nèi)存變量:已知內(nèi)存變量X1是字型是字型 執(zhí)行指令執(zhí)行指令“MOV ALMOV AL
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 婚姻出軌風(fēng)險控制與賠償保障協(xié)議書
- 高空航拍氣象監(jiān)測直升機(jī)空域服務(wù)協(xié)議
- 高效生物技術(shù)研發(fā)平臺共建合作協(xié)議
- 醫(yī)療機(jī)構(gòu)醫(yī)療服務(wù)價格合規(guī)性審計協(xié)議
- 離婚案件中家暴受害者精神損害賠償合同
- 煤礦安全風(fēng)險防范與經(jīng)營管理委托協(xié)議
- 影視動畫渲染能力租賃與專業(yè)團(tuán)隊協(xié)作保障協(xié)議
- 皮膚膿腫護(hù)理規(guī)范與操作要點
- 中班音樂活動《小雨沙沙》教案設(shè)計
- 剪紙工藝流程與審美特征
- 地下室開槽引流方案
- (必備)肌骨超聲課件
- 神經(jīng)病學(xué)人衛(wèi)版習(xí)題集題庫
- 螺旋式連續(xù)榨汁機(jī)的設(shè)計說明書
- DB36T 1570-2021花絨寄甲人工繁育技術(shù)規(guī)程_(高清版)
- 達(dá)希納(尼洛替尼)毒副反應(yīng)及處理
- 數(shù)控銑練手圖紙(經(jīng)典練習(xí)圖紙)(共18頁)
- 清產(chǎn)核資報表
- DOE(實驗設(shè)計)與Minitab培訓(xùn)DOE案例
- QC成果編制方式與要求
- 環(huán)氧地坪漆施工方案匯總
評論
0/150
提交評論