IBM匯編語言第4章:匯編語言程序格式課件_第1頁
IBM匯編語言第4章:匯編語言程序格式課件_第2頁
IBM匯編語言第4章:匯編語言程序格式課件_第3頁
IBM匯編語言第4章:匯編語言程序格式課件_第4頁
IBM匯編語言第4章:匯編語言程序格式課件_第5頁
已閱讀5頁,還剩69頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

內(nèi)容摘要匯編程序功能偽操作匯編語言程序格式上機(jī)過程第四章匯編語言程序格式語句的種類:指令語句:又稱為機(jī)器指令語句,是可經(jīng)過匯編程序翻譯成機(jī)器代碼的指令,是可執(zhí)行語句偽操作語句:又稱為偽指令語句或匯編控制命令語句,不會(huì)被翻譯成目標(biāo)代碼,是告訴匯編程序如何工作的命令,是非執(zhí)行語句宏指令語句:以宏定義名為助記符的指令語句,是可執(zhí)行語句4.2偽操作

數(shù)據(jù)定義偽指令

符號(hào)定義偽指令

段定義偽指令

過程定義偽指令

程序模塊的定義與通訊偽指令

宏定義偽指令

條件匯編偽指令

格式控制、列表控制及其它功能偽指令4.2偽操作8086宏匯編語言包括如下幾類偽指令:4.2.1處理器選擇偽操作.8086

選擇8086指令系統(tǒng).286

選擇80286指令系統(tǒng).286P

選擇保護(hù)方式下的80286指令系統(tǒng).386

選擇80386指令系統(tǒng).386P

選擇保護(hù)方式下的80386指令系統(tǒng).486

選擇80486指令系統(tǒng).486P

選擇保護(hù)方式下的80486指令系統(tǒng).586

選擇Pentium指令系統(tǒng).586P

選擇保護(hù)方式下的Pentium指令系統(tǒng)注:這類偽操作一般放在整個(gè)程序的最前面,若未給出,則默認(rèn)是.80864.2.2段定義偽操作segmentnameSEGMENT[align_type][combine_type][use_type][‘class’]…segmentnameENDS功能:定義了一個(gè)以SEGMENT偽操作開始,以ENDS偽操作結(jié)束,以段名命名的存儲(chǔ)段。其定位類型、組合類型、使用類型、‘類別’為賦給段名的屬性。1.完整的段定義偽操作語句格式:可有可無:若有,則各項(xiàng)的順序不能錯(cuò),且用空格分隔引號(hào)不能省例4.1data_seg1segment;definedatasegmentdata_seg1endsdata_seg2segment;defineextrasegmentdata_seg2endscode_segsegment;definecodesegment

assumecs:code_seg,ds:data_seg1,es:data_seg2start:movax,data_seg1movds,axmovax,data_seg2moves,ax…code_segends

endstart4.2.2段定義偽操作注:段名是為該段起的名字,用來指出匯編程序?yàn)樵摱畏峙涞拇鎯?chǔ)區(qū)起始位置,它有段地址和偏移地址兩個(gè)屬性4.2.2段定義偽操作(1).定位類型(align_type):說明段的起始位置應(yīng)有怎樣的邊界值

PARA:指定段的起始地址必須從小段邊界開始,即段起始址的最低一個(gè)十六進(jìn)制數(shù)位必須為0,偏移地址可以從零開始。若未指定定位類型,則默認(rèn)是PARABYTE:該段可以從任何地址開始,起始偏移地址可能不是零WORD:該段必須從字的邊界開始,即段起始地址必須為偶數(shù),也就是段起始地址的最低一個(gè)二進(jìn)制數(shù)位必須為0

DWORD:該段必須從雙字的邊界開始,即段起始地址最低二個(gè)二進(jìn)制數(shù)位必須為0

PAGE:該段必須從頁的邊界開始,即段起始地址最低二個(gè)十六進(jìn)制數(shù)位必須為04.2.2段定義偽操作(2).組合類型(combine_type):說明程序連接時(shí)的段合并方法

PRIVATE:該段為私有段,在連接時(shí)將不與其他模塊中的同名分段合并。若組合類型缺省時(shí),默認(rèn)為PRIVATE

PUBLIC:該段連接時(shí)可以把不同模塊中的同名段相連接而形成一個(gè)段,其連接次序由連接命令指定。每一分段都從小段的邊界開始,因此各模塊的原有段之間可能存在小于16個(gè)字節(jié)的間隙

COMMON:該段在連接時(shí)可以把不同模塊中的同名段重疊而形成一個(gè)段,由于各同名分段有相同的起始地址,所以會(huì)產(chǎn)生覆蓋。COMMON的連接長度是各分段中的最大長度。重疊部分的內(nèi)容取決于排列在最后一段的內(nèi)容

ATexpression:使段地址是表達(dá)式所計(jì)算出來的16位值,但它不能用來指定代碼段

MEMORY:與PUBLIC同義

STACK:把不同模塊中的同名段組合而形成一個(gè)堆棧段,該段的長度為各原有段的總和,各原有段之間無PUBLIC所連接段中的間隙,而且桟頂可自動(dòng)指向連接后形成的大堆棧段的桟頂4.2.2段定義偽操作(3).使用類型(use_type):只適用于386及其后繼機(jī)型,用來說明使用16位尋址方式還是32位尋址方式

USE16:使用16位尋址方式,若使用類型缺省時(shí),則默認(rèn)是USE16USE32:使用32位尋址方式4.2.2段定義偽操作(4).類別類型(‘class’):在引號(hào)中給出連接時(shí)組成段組的類型名,類別說明并不能把相同類別的段合并起來,但在連接后形成的裝入模塊中,將把類別相同的所有段(它們不一定同名)存放在連續(xù)的存儲(chǔ)區(qū)中,先出現(xiàn)的在前,后出現(xiàn)的在后(但仍然是不同的段)且每段都有自己的起始地址4.2.2段定義偽操作例2:ASEGMENTPARAPUBLIC‘SEG1’A1DB55HDUP(0)AENDSBSEGMENTPARACOMMON‘SEG2’B1DB202HDUP(0)BENDS…0000H:0000H0000H:0054H0000H:0060HA段C段0017H:0000H0000H:0162H0017H:0201H0038H:0000HB段ASEGMENTPARAPUBLIC‘SEG1’A2DB103HDUP(0FFH)AENDSBSEGMENTPARACOMMON‘SEG2’B2DB104HDUP(0)BENDSCSEGMENTCCDB100HDUP(33H)CENDS0000空11個(gè)字節(jié)0FFH0FFH空13個(gè)字節(jié)0000空14個(gè)字節(jié)33H33H………0038H:00FFHA1A2B1和B2CC模塊1模塊2…4.2.2段定義偽操作ASSUMEsegmentregistername:segmentname[,segmentregistername:segmentname]功能:該語句一般出現(xiàn)在代碼段中,用來設(shè)定段寄存器與段之間的對應(yīng)關(guān)系,在程序中使用這條語句后,宏匯編程序就將這些段作為當(dāng)前可訪問段處理2.假定偽操作語句格式:CS:段名[,SS:段名,DS:段名,ES:段名,F(xiàn)S:段名,GS:段名]4.2.2段定義偽操作說明:(1)CS:段名必須要寫,否則會(huì)出錯(cuò)(2)一旦用ASSUME說明了當(dāng)前段,就應(yīng)立即將段首址送入相應(yīng)的段寄存器中;代碼段首址裝入CS中是在程序初始化時(shí)由系統(tǒng)自動(dòng)設(shè)置的,其它的都要通過指令完成4.2.2段定義偽操作grpnameGROUPsegname[,segname]功能:把不同段組成一個(gè)段組,以便在程序中對定義在不同段中的變量,都可以用同一個(gè)段寄存器進(jìn)行訪問3.段組定義偽操作語句格式:例4.5:END[lable]功能:表示源程序的結(jié)束,其中標(biāo)號(hào)lable指示程序開始執(zhí)行的起始地址語句格式:4.2.3程序開始和結(jié)束偽操作例:Win32匯編程序的基本結(jié)構(gòu).386.MODELFlat,C;說明使用段的情況.DATA………;定義有初始化值的變量.DATA?………;定義沒有進(jìn)行初始化的變量.CONST………;定義常量.CODE<label>;定義第一條指令的地址

………;代碼End<label>;表示源程序的結(jié)束4.2.4數(shù)據(jù)定義及存儲(chǔ)器分配偽操作[Variable]MnemonicOperand,…,Operand[;Comments]語句格式:(a)變量:是一個(gè)數(shù)據(jù)存儲(chǔ)單元的名字,數(shù)據(jù)存放地址的符號(hào)表示,即數(shù)據(jù)單元的符號(hào)地址

屬性:(1)段屬性:指變量所在段的段地址(即屬于哪一段),在DS、ES、SS、FS或GS中(2)偏移屬性:定義變量的位置到段地址之間的字節(jié)數(shù),是16位無符號(hào)數(shù)或32位無符號(hào)數(shù)(3)類型屬性:定義該變量所保留的字節(jié)數(shù),即存放數(shù)據(jù)的長度,如DB、DW、DD、DF、DQ、DT字節(jié)字雙字3字4字5字386及其后繼機(jī)型4.2.4數(shù)據(jù)定義及存儲(chǔ)器分配偽操作(b)操作數(shù):允許出現(xiàn)以下類型的操作數(shù)(1)操作數(shù)是常數(shù)或數(shù)字表達(dá)式例4.7DATA_BYTEDB10,4,10HDATA_WORDDW100,100H,-5DATA_DWDD3*20,0FFFDH4.2.4數(shù)據(jù)定義及存儲(chǔ)器分配偽操作(b)操作數(shù):允許出現(xiàn)以下類型的操作數(shù)(2)操作數(shù)可以是字符串例4.8MESSAGEDB‘HELLO’DATA1DB‘AB’DATA2DW‘AB’

注:類型為DB時(shí)才能定義長度超過2個(gè)字符的字符串例:

要定義一個(gè)字符串‘ABCD’,則

STRINGDW‘ABCD’×STRINGDB‘ABCD’4.2.4數(shù)據(jù)定義及存儲(chǔ)器分配偽操作(b)操作數(shù):允許出現(xiàn)以下類型的操作數(shù)(3)操作數(shù)?:表示所定義的變量無確定初值例4.9ABCDB0,?,?,?,0DFFDW?,52,?4.2.4數(shù)據(jù)定義及存儲(chǔ)器分配偽操作(b)操作數(shù):允許出現(xiàn)以下類型的操作數(shù)(4)操作數(shù)字段用復(fù)制操作符DUP格式:nDUP(表達(dá)式)重復(fù)因子,正整數(shù),定義了n個(gè)數(shù)據(jù)存儲(chǔ)單元每個(gè)數(shù)據(jù)存儲(chǔ)單元的初值例4.10ARRAY1DB2DUP(0,1,2,?)ARRAY2DB100DUP(?)DUP可嵌套例4.11ARRAY3DB100DUP(0,2DUP(1,2),0,3)4.2.4數(shù)據(jù)定義及存儲(chǔ)器分配偽操作若變量類型為DW,則取值為地址表達(dá)式的偏移地址;若變量類型為DD,則低字取值為地址表達(dá)式的偏移地址,高字取值為地址表達(dá)式的段地址若變量類型為DF,則低2個(gè)字取值為地址表達(dá)式的偏移地址,第3個(gè)字取值為地址表達(dá)式的段地址386及其后繼機(jī)型具有16位段地址和32位偏移地址構(gòu)成的48位遠(yuǎn)地址例4.12:例4.13(b)操作數(shù):允許出現(xiàn)以下類型的操作數(shù)(5)操作數(shù)字段出現(xiàn)變量或標(biāo)號(hào),也就是出現(xiàn)了地址表達(dá)式:取其偏移地址值參加運(yùn)算例4.12:PAR1DW?PAR2DW?PAR3DW?DATA1DW?DATA2DW?PARAMETER_TABLEDWPAR1DWPAR2DWPAR3INTERSEG_DATADDDATA1DDDATA2例4.12:PAR1DW?PAR2DW?PAR3DW?DATA1DW?DATA2DW?PARAMETER_TABLEDWPAR1,PAR2,PAR3INTERSEG_DATADDDATA1,DATA2錯(cuò)誤原因:類型不匹配4.2.4數(shù)據(jù)定義及存儲(chǔ)器分配偽操作注:1.變量僅代表本數(shù)據(jù)存儲(chǔ)區(qū)中的第一個(gè)數(shù)據(jù)存儲(chǔ)單元的偏移地址例4.14:

OPER1DB?,?OPER2DW?,?

…MOVOPER1,0MOVOPER2,0例4.15:

OPER1DB1,2OPER2DW1234H,5678H

…MOVAX,OPER1+1MOVAL,OPER22.

變量的類型必須與指令的要求相符4.2.5符號(hào)定義偽操作語句格式:Expression_nameEQUExpression(1)表達(dá)式賦值偽操作EQU功能:也稱為等價(jià)偽指令,用來為常量、表達(dá)式及其它各種符號(hào)定義一個(gè)等價(jià)的符號(hào)名,但它并不申請分配存儲(chǔ)單元①為常量定義一個(gè)符號(hào)名,也就是符號(hào)常量例1:

CONSTANTEQU256ALPHAEQU7BETAEQUALPHA-2好處:使程序簡單明了,可讀性強(qiáng),增強(qiáng)程序的通用性必須先定義4.2.5符號(hào)定義偽操作(1)表達(dá)式賦值偽操作EQU②利用EQU命令為較復(fù)雜的表達(dá)式及源程序中的任何符號(hào),定義一個(gè)替換名DATAEQUHEIGHT+12;地址表達(dá)式賦以符號(hào)名BEQU[BP+8];變址引用賦以符號(hào)名BP8EQUDS:[BP+8];加段前綴的變址引用賦以符號(hào)名P8例3:4.2.5符號(hào)定義偽操作語句格式:Expression_name=Expression(2)等號(hào)偽操作=功能:與EQU語句類似區(qū)別:“=”允許重復(fù)定義“EQU”不允許重復(fù)定義例:EMP=7……EMP=EMP+1…不能用EQU注:同一符號(hào)名不能同時(shí)用EQU和=偽指令來分別定義4.2.5符號(hào)定義偽操作語句格式:variable_name/label_nameLABELtype(3)定義符號(hào)名偽操作LABEL功能:為下一個(gè)存儲(chǔ)單元定義一個(gè)指定類型的變量或標(biāo)號(hào),等價(jià)于variable_name/lable_nameEQUTHIStype注:為variable_name定義的type有:BYTE、WORD、DWORD、FWORD、QWORD、TBYTE;為label_name定義的type有:NEAR、FAR,對于16位段,NEAR為2字節(jié),F(xiàn)AR為4字節(jié),對于32位段,NEAR為4字節(jié),F(xiàn)AR為6字節(jié)4.2.5符號(hào)定義偽操作(3)定義符號(hào)名偽操作LABEL例4.16:BYTE_ARRAYLABELBYTEWORD_ARRAYDW50DUP(?)…MOVWORD_ARRAY+2,0;該數(shù)組的第3個(gè)和第4個(gè)字節(jié)置0MOVBYTE_ARRAY+2,0;該數(shù)組的第3個(gè)字節(jié)置0例:OUT1LABELFAR;定義了一個(gè)遠(yuǎn)標(biāo)號(hào)UUT1EXIT:LEADX,BUF;EXIT為近標(biāo)號(hào)…4.2.6地址計(jì)數(shù)器與對準(zhǔn)偽操作1、地址計(jì)數(shù)器$功能:用來記錄正在被匯編程序翻譯的語句的地址,也就是其內(nèi)容標(biāo)出了匯編程序當(dāng)前的工作位置注:①當(dāng)$用在指令中時(shí),表示本條指令的第一個(gè)字節(jié)的地址

②當(dāng)$用在偽操作的參數(shù)字段時(shí),表示地址計(jì)數(shù)器的當(dāng)前值說明:匯編程序?qū)⒃闯绦蚍g成目標(biāo)程序時(shí),每遇到一個(gè)新的段,就為該段分配一個(gè)初值為0的匯編$,然后,再對該段中的語句匯編,對凡是需要申請分配存儲(chǔ)單元的語句和產(chǎn)生目標(biāo)代碼的語句,匯編$則按該語句目標(biāo)代碼的長度增值4.2.6地址計(jì)數(shù)器與對準(zhǔn)偽操作1、地址計(jì)數(shù)器$例1:1000:2543JNE$+6…1000:2549MOVAX,BX…例4.17:ARRAYDW1,2,$+4,3,4,$+4例2:DATASEGMENTBUFDB‘12345ABCD’COUNTEQU$-BUFARRAYDW1,$,2+$,4-10DATAENDS;COUNT的值就是BUF數(shù)據(jù)區(qū)所占的字節(jié)數(shù)4.2.6地址計(jì)數(shù)器與對準(zhǔn)偽操作2、ORG偽操作功能:表達(dá)式的值是下一個(gè)存儲(chǔ)單元的偏移地址注:若程序中沒有設(shè)置“ORG”語句,一般情況每個(gè)邏輯段的起始地址為0000H說明:

該語句可以設(shè)置在程序段、數(shù)據(jù)段的任何位置語句格式:ORG

constantexpression4.2.6地址計(jì)數(shù)器與對準(zhǔn)偽操作2、ORG偽操作例1:DATASEGMENTORG100HXDB12HYDW?DATAENDS例2:VECTORSSEGMENTORG10VECT1DW47A5HORG20VECT2DW0C596HDATAENDS;X的EA=100H;Y的EA=101H;VECT1的EA=0AH;VECT2的EA=14H4.2.6地址計(jì)數(shù)器與對準(zhǔn)偽操作2、ORG偽操作例3:DATASEGMENTORG100HXDB12HYDW?ORG$+8ZDD12345678HDATAENDS;表示跳過8個(gè)字節(jié)的存儲(chǔ)區(qū),如果要訪問此存儲(chǔ)區(qū),則可以BUFFERLABELBYTEORG$+8BUFFERDB8DUP(?)4.2.6地址計(jì)數(shù)器與對準(zhǔn)偽操作3、EVEN偽操作例:DATASEGMENTEVENWORD_ARRAYDW100DUP(?)DATAENDS功能:指定下一個(gè)變量或指令開始于偶數(shù)字節(jié)地址說明:

用該偽操作可以保證字?jǐn)?shù)組從偶數(shù)地址開始……這樣,訪問該字內(nèi)容只需訪問一次內(nèi)存4.2.6地址計(jì)數(shù)器與對準(zhǔn)偽操作4、ALIGN偽操作例:DATASEGMENTALIGN4ARRAYDD25DUP(?)DATAENDS功能:保證雙字?jǐn)?shù)組邊界從4的倍數(shù)開始說明:

其中boundary必須是2的冪,當(dāng)它等于2時(shí)就等價(jià)于EVEN偽操作……語句格式:ALIGN

boundary4.2.7基數(shù)控制偽操作例:MOVBX,0FFHMOVBX,0FDHMOVBX,178功能:把默認(rèn)的十進(jìn)制改變?yōu)?~16范圍內(nèi)的任何基數(shù)說明:

expression表示基數(shù)值(用十進(jìn)制數(shù)表示)語句格式:.RADIX

expression.RADIX16MOVBX,0FFMOVBX,0FDHMOVBX,178D4.3匯編語言程序格式[name]operationOperand[;Comments]語句格式:語句的種類:指令語句:又稱為機(jī)器指令語句,是可經(jīng)過匯編程序翻譯成機(jī)器代碼的指令,是可執(zhí)行語句偽操作語句:又稱為偽指令語句或匯編控制命令語句,不會(huì)被翻譯成目標(biāo)代碼,是告訴匯編程序如何工作的命令,是非執(zhí)行語句宏指令語句:以宏定義名為助記符的指令語句,是可執(zhí)行語句可有可無4.3.1名字項(xiàng)名字:由字母A~Z(a~z),數(shù)字0~9,特殊字符?、·

、@、_、$組成的字符串,不能以數(shù)字開始,最長31個(gè)字符,如用·,則必須是第一個(gè)字符(1)標(biāo)號(hào):是機(jī)器指令語句存放地址的符號(hào)表示,即一個(gè)指令單元的符號(hào)地址,也可以是過程名(符號(hào)地址)屬性:(a)段屬性:指定義標(biāo)號(hào)所在段的段地址(即屬于哪一段),在CS中(b)偏移屬性:定義標(biāo)號(hào)處到段地址之間的字節(jié)數(shù),是16位無符號(hào)數(shù),在IP中或是32位無符號(hào)數(shù)(c)類型屬性:在代碼段中定義,后跟“:”NEARPTR說明:段內(nèi)直接引用(默認(rèn)類型)FARPTR說明:段間直接引用即缺省不寫時(shí)為NEAR型4.3.1名字項(xiàng)名字:由字母A~Z(a~z),數(shù)字0~9,特殊字符?、·

、@、—

、$組成的字符串,不能以數(shù)字開始,最長31個(gè)字符(2)變量:是一個(gè)數(shù)據(jù)存儲(chǔ)單元的名字,數(shù)據(jù)存放地址的符號(hào)表示,即數(shù)據(jù)單元的符號(hào)地址

屬性:(a)段屬性:指變量所在段的段地址(即屬于哪一段),在DS、ES、SS、FS或GS中(b)偏移屬性:定義變量的位置到段地址之間的字節(jié)數(shù),是16位無符號(hào)數(shù)或32位無符號(hào)數(shù)(c)類型屬性:定義該變量所保留的字節(jié)數(shù),即存放數(shù)據(jù)的長度,如DB、DW、DD、DF、DQ、DT字雙字3字4字5字386及其后繼機(jī)型字節(jié)

后不跟“:”4.3.1名字項(xiàng)名字:由字母A~Z(a~z),數(shù)字0~9,特殊字符?、·

、@、—

、$組成的字符串,不能以數(shù)字開始,最長31個(gè)字符注:①變量或標(biāo)號(hào)不能重名

②名字不能與保留關(guān)鍵字相同

③不分大小寫如操作符、寄存器名、運(yùn)算符4.3.2操作項(xiàng)操作項(xiàng)(或操作碼項(xiàng)):指令助記符:匯編程序?qū)⑵浞g成機(jī)器指令偽指令助記符:匯編程序?qū)雌湟筇幚砗曛噶钪浄簠R編程序?qū)⑵浜暾归_,再翻譯成機(jī)器指令

助記符:一條指令操作碼的符號(hào)表示4.3.3操作數(shù)項(xiàng)操作數(shù)項(xiàng):可以是常數(shù)、寄存器、標(biāo)號(hào)、變量或由表達(dá)式組成(1)常數(shù):(a)數(shù)字常數(shù):二進(jìn)制數(shù)(B)、十進(jìn)制數(shù)(D)、十六進(jìn)制數(shù)(H)、八進(jìn)制數(shù)(O或Q)注:十六進(jìn)制的第一位若是“A”~“F”,則在前面加“0”例:0F6HF6H表示十六進(jìn)制數(shù)表示標(biāo)號(hào)或變量MOVBL,0A7H;0A7H是個(gè)常數(shù)BLMOVBL,A7H;A7H是個(gè)變量:(A7H)BL4.3.3操作數(shù)項(xiàng)(1)常數(shù):(b)字符串常數(shù):‘字符串’或“字符串”存在內(nèi)存中是其ASCⅡ碼值例:常用字符

ASCⅡ碼值‘A’~‘Z’

41H~5AH‘a(chǎn)’~‘z’

61H~7AH‘0’~‘9’

30H~39H(c)符號(hào)常數(shù):用EQU或“=”定義的符號(hào)常量MOVCX,COUNT…COUNTEQU100H……例:4.3.3操作數(shù)項(xiàng)(2)表達(dá)式:常數(shù)、寄存器、標(biāo)號(hào)、變量與一些運(yùn)算符和操作符相組合的序列(a)數(shù)字表達(dá)式:用常數(shù)、符號(hào)常數(shù)和算術(shù)、邏輯、關(guān)系運(yùn)算符組成的表達(dá)式例:(75*2+X)/Y(b)地址表達(dá)式:由變量、標(biāo)號(hào)、常數(shù)、寄存器、“+”、“-”運(yùn)算符和方括號(hào)組成的表達(dá)式意義:表示一個(gè)常數(shù)例:DATA+5VARY[BX][BX][SI+BP][BX+DI-6]意義:用以表示存儲(chǔ)單元地址,即表示一個(gè)存儲(chǔ)器操作數(shù)4.3.3操作數(shù)項(xiàng)(2)表達(dá)式:常數(shù)、寄存器、標(biāo)號(hào)、變量與一些運(yùn)算符和操作符相組合的序列地址表達(dá)式應(yīng)注意以下幾點(diǎn):MOVAX,SI+5①地址表達(dá)式中,不允許出現(xiàn)不帶方括號(hào)的寄存器符號(hào)×MOVAX,[SI+5]例:②在數(shù)據(jù)定義語句中,如果操作數(shù)是地址表達(dá)式,則該表達(dá)式不能帶寄存器符號(hào)和方括號(hào)ERRODW[SI+3]例:×③在數(shù)據(jù)定義語句中,如果操作數(shù)中出現(xiàn)變量或標(biāo)號(hào),則是取其EA值參加運(yùn)算4.3.3操作數(shù)項(xiàng)(2)表達(dá)式:常數(shù)、寄存器、標(biāo)號(hào)、變量與一些運(yùn)算符和操作符相組合的序列(c)運(yùn)算符和操作符:1)算術(shù)操作符:+、-、*、/、MOD例:19MOD7=MOD:取余運(yùn)算5例4.18:例4.19:可用于數(shù)字和地址表達(dá)式中4.3.3操作數(shù)項(xiàng)(c)運(yùn)算符和操作符:2)邏輯與移位操作符:NOT、AND、OR、XOR、SHL、SHR例4.20:INAL,PORT_VALOUTPORT_VALAND0FEH,AL邏輯運(yùn)算符移位運(yùn)算符按位操作,只能用于數(shù)字表達(dá)式中移位操作符格式:expressionSHL(或SHR)numshift功能:匯編程序?qū)xpression左移(或右移)numshift位,如果移位數(shù)大于15,則結(jié)果為0例4.21:ANDDX,PORT_VALAND0FEH符號(hào)常量4.3.3操作數(shù)項(xiàng)(c)運(yùn)算符和操作符:3)關(guān)系操作符:EQ、NE、LT、GT、LE、GE例4.22:MOVBX,((PORT_VALLT5)AND20)OR((PORT_VALGE5)AND30)定義:關(guān)系成立——0FFFFH

關(guān)系不成立——0當(dāng)PORT_VAL<5時(shí),匯編結(jié)果:MOVBX,20當(dāng)PORT_VAL≥5時(shí),匯編結(jié)果:MOVBX,304.3.3操作數(shù)項(xiàng)(c)運(yùn)算符和操作符:4)數(shù)值回送操作符:把特征或存儲(chǔ)區(qū)地址的一部分作為數(shù)值回送,主要有TYPE、LENGTH、SIZE、OFFSET、SEG例4.23:ARRAYDW1,2,3對于ADDSI,TYPEARRAY

TYPE格式:TYPE

expression功能:表示表達(dá)式的類型碼如表達(dá)式是變量,其回送值是1,2,4,6,8,10(字節(jié))

如表達(dá)式是標(biāo)號(hào),其回送值是-1,-2

如表達(dá)式是常數(shù),其回送值是0立即尋址DBDWDDDFDQDTNEARFAR4.3.3操作數(shù)項(xiàng)(c)運(yùn)算符和操作符:例4.24:FEESDW100DUP(0)對于MOVCX,LENGTHFEES

LENGTH格式:LENGTH

Variable例4.25:ARRAYDW1,2,3對于MOVCX,LENGTHARRAY例4.26:TABLEDB‘ABCD’

對于MOVCX,LENGTHTABLE4)數(shù)值回送操作符:把特征或存儲(chǔ)區(qū)地址的一部分作為數(shù)值回送,主要有TYPE、LENGTH、SIZE、OFFSET、SEG功能:表示為變量分配的單元數(shù)如變量中使用DUP,則回送分配給該變量的單元數(shù)否則,其回送值是1立即尋址4.3.3操作數(shù)項(xiàng)(c)運(yùn)算符和操作符:

SIZE格式:SIZE

Variable4)數(shù)值回送操作符:把特征或存儲(chǔ)區(qū)地址的一部分作為數(shù)值回送,主要有TYPE、LENGTH、SIZE、OFFSET、SEG功能:回送分配給該變量的字節(jié)數(shù)=LENGTHVariable*TYPEVariable例4.24:FEESDW100DUP(0)對于MOVCX,SIZEFEES例4.25:ARRAYDW1,2,3對于MOVCX,SIZEARRAY例4.26:TABLEDB‘ABCD’

對于MOVCX,SIZETABLE立即尋址4.3.3操作數(shù)項(xiàng)(c)運(yùn)算符和操作符:例4.27:MOVBX,OFFSETOPER_SEG

OFFSET格式:OFFSET

Variable或Label功能:回送變量或標(biāo)號(hào)的偏移地址值4)數(shù)值回送操作符:把特征或存儲(chǔ)區(qū)地址的一部分作為數(shù)值回送,主要有TYPE、LENGTH、SIZE、OFFSET、SEG立即尋址LEABX,OPER_SEG4.3.3操作數(shù)項(xiàng)(c)運(yùn)算符和操作符:例4.28:MOVBX,SEGOPER1

SEG格式:SEG

Variable或Label功能:回送變量或標(biāo)號(hào)的段地址值4)數(shù)值回送操作符:把特征或存儲(chǔ)區(qū)地址的一部分作為數(shù)值回送,主要有TYPE、LENGTH、SIZE、OFFSET、SEG立即尋址4.3.3操作數(shù)項(xiàng)(c)運(yùn)算符和操作符:5)屬性操作符:主要有PTR、段操作符、SHORT、THIS、HIGH、LOW、HIGHWORD、LOWWORD

PTR格式:type

PTRexpression功能:臨時(shí)定義存儲(chǔ)單元的類型或變量/標(biāo)號(hào)的類型(type)=BYTE、WORD、DWORD、FWORD、QWORD、TBYTE、FAR、NEAR注:表達(dá)式為地址表達(dá)式;表達(dá)式的段屬性和偏移屬性不變;4.3.3操作數(shù)項(xiàng)(c)運(yùn)算符和操作符:5)屬性操作符:主要有PTR、段操作符、SHORT、THIS、HIGH、LOW、HIGHWORD、LOWWORD

PTRMOV[BX],5×;類型不明確例:×;5不是地址表達(dá)式MOVAL,BYTEPTRBLOCKMOVBX,BLOCKJMPFARPTRNEXTMOVAL,SI×;類型不匹配×;SI不是地址表達(dá)式MOVBYTEPTR[BX],5MOV[BX],BYTEPTR5MOVAL,BYTEPTRSIMOVAX,SI4.3.3操作數(shù)項(xiàng)(c)運(yùn)算符和操作符:5)屬性操作符:主要有PTR、段操作符、SHORT、THIS、HIGH、LOW、HIGHWORD、LOWWORDPTR與EQU連用:可以給變量/標(biāo)號(hào)定義新的類型屬性,段屬性和偏移屬性不變例4.29:TWO_BYTEDW?ONE_BYTEEQUBYTEPTRTWO_BYTEOTHER_BYTEEQUBYTEPTR(TWO_BYTE+1)OTHER_BYTEEQUBYTEPTR(ONE_BYTE+1)OTHER_BYTEEQUONE_BYTE+14.3.3操作數(shù)項(xiàng)(c)運(yùn)算符和操作符:5)屬性操作符:主要有PTR、段操作符、SHORT、THIS、HIGH、LOW、HIGHWORD、LOWWORD段操作符:表示一個(gè)標(biāo)量、變量或地址表達(dá)式的段屬性表示形式:段寄存器:地址表達(dá)式(即段跨越前綴)

段名:地址表達(dá)式組名:地址表達(dá)式4.3.3操作數(shù)項(xiàng)(c)運(yùn)算符和操作符:5)屬性操作符:主要有PTR、段操作符、SHORT、THIS、HIGH、LOW、HIGHWORD、LOWWORDSHORT:表示JMP指令中轉(zhuǎn)向地址的屬性,是短跳轉(zhuǎn)4.3.3操作數(shù)項(xiàng)(c)運(yùn)算符和操作符:5)屬性操作符:主要有PTR、段操作符、SHORT、THIS、HIGH、LOW、HIGHWORD、LOWWORD

THIS格式:variable_name/lable_name

EQUTHIStype功能:與偽指令EQU連用,具有與PTR類似的功能,為下一個(gè)存儲(chǔ)單元定義一個(gè)指定類型的變量或標(biāo)號(hào),等價(jià)于variable_name/lable_nameLABLEtype(type)=BYTE、WORD、DWORD、FWORD、QWORD、TBYTE、FAR、NEAR4.3.3操作數(shù)項(xiàng)(c)運(yùn)算符和操作符:5)屬性操作符:主要有PTR、段操作符、SHORT、THIS、HIGH、LOW、HIGHWORD、LOWWORD

HIGH和LOW格式:HIGH常量或地址表達(dá)式

LOW常量或地址表達(dá)式功能:HIGH取其后的常量或地址表達(dá)式的高位字節(jié)LOW取其后的常量或地址表達(dá)式的低位字節(jié)4.3.3操作數(shù)項(xiàng)(c)運(yùn)算符和操作符:5)屬性操作符:主要有PTR、段操作符、SHORT、THIS、HIGH、LOW、HIGHWORD、LOWWORD

HIGH和LOW例:CONSTEQU0ABCDHMOVAH,HIGHCONSTMOVAL,LOWCONST例:ADW1234HMOVAL,LOWAMOVAH,HIGHA……;(AH)=;(AL)=;(AL)=;(AH)=0ABH0CDH34H12H立即尋址4.3.3操作數(shù)項(xiàng)(c)運(yùn)算符和操作符:5)屬性操作符:主要有PTR、段操作符、SHORT、THIS、HIGH、LOW、HIGHWORD、LOWWORD

HIGHWORD和LOWWORD格式:HIGHWORD常量或地址表達(dá)式

LOWWORD常量或地址表達(dá)式注:操作符的優(yōu)先級(jí)別如P143所示功能:MASM6.0具有的操作符

HIGHWORD取其后的常量或地址表達(dá)式的高位字

LOWWORD取其后的常量或地址表達(dá)式的低位字4.3.4注釋項(xiàng)注釋:以分號(hào)開始,說明指令的功能和作用,不會(huì)產(chǎn)生目標(biāo)代碼,可以一行或多行例1:例2:分行:一行未完,可用分行符(\),接著換行書寫,適用于masm6.0例如:studentdb‘zhangsan’,88,\

‘lisi’,90例1datareasegment;definedatasegmentdatareaendsprognamsegment;definecodesegmentmainprocfarassumecs:prognam,ds:datareastart:

pushdsmovax,datareasubax,axmovds,ax

pushax…movax,datareamovds,ax…movah,4ch;movax,4c00h

retint21hmainendpprognamendsendstart例1datar

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論