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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

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

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

符號定義偽指令

段定義偽指令

過程定義偽指令

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

宏定義偽指令

條件匯編偽指令

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

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

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

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

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

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

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

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

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

選擇保護方式下的Pentium指令系統(tǒng)注:這類偽操作一般放在整個程序的最前面,若未給出,則默認是.80864.2.2段定義偽操作segmentnameSEGMENT[align_type][combine_type][use_type][‘class’]…segmentnameENDS功能:定義了一個以SEGMENT偽操作開始,以ENDS偽操作結束,以段名命名的存儲段。其定位類型、組合類型、使用類型、‘類別’為賦給段名的屬性。1.完整的段定義偽操作語句格式:可有可無:若有,則各項的順序不能錯,且用空格分隔引號不能省例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段定義偽操作注:段名是為該段起的名字,用來指出匯編程序為該段分配的存儲區(qū)起始位置,它有段地址和偏移地址兩個屬性4.2.2段定義偽操作(1).定位類型(align_type):說明段的起始位置應有怎樣的邊界值

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

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

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

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

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

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

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

MEMORY:與PUBLIC同義

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

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

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

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

注:類型為DB時才能定義長度超過2個字符的字符串例:

要定義一個字符串‘ABCD’,則

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

OPER1DB?,?OPER2DW?,?

…MOVOPER1,0MOVOPER2,0例4.15:

OPER1DB1,2OPER2DW1234H,5678H

…MOVAX,OPER1+1MOVAL,OPER22.

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

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

②當$用在偽操作的參數(shù)字段時,表示地址計數(shù)器的當前值說明:匯編程序?qū)⒃闯绦蚍g成目標程序時,每遇到一個新的段,就為該段分配一個初值為0的匯編$,然后,再對該段中的語句匯編,對凡是需要申請分配存儲單元的語句和產(chǎn)生目標代碼的語句,匯編$則按該語句目標代碼的長度增值4.2.6地址計數(shù)器與對準偽操作1、地址計數(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地址計數(shù)器與對準偽操作2、ORG偽操作功能:表達式的值是下一個存儲單元的偏移地址注:若程序中沒有設置“ORG”語句,一般情況每個邏輯段的起始地址為0000H說明:

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

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

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

其中boundary必須是2的冪,當它等于2時就等價于EVEN偽操作……語句格式:ALIGN

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

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

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

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

、@、—

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

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

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

、@、—

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

②名字不能與保留關鍵字相同

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

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

ASCⅡ碼值‘A’~‘Z’

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

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

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

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

TYPE格式:TYPE

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

如表達式是標號,其回送值是-1,-2

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

LENGTH格式:LENGTH

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

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

SIZE格式:SIZE

Variable4)數(shù)值回送操作符:把特征或存儲區(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ù)項(c)運算符和操作符:例4.27:MOVBX,OFFSETOPER_SEG

OFFSET格式:OFFSET

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

SEG格式:SEG

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

PTR格式:type

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

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

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

THIS格式:variable_name/lable_name

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

HIGH和LOW格式:HIGH常量或地址表達式

LOW常量或地址表達式功能:HIGH取其后的常量或地址表達式的高位字節(jié)LOW取其后的常量或地址表達式的低位字節(jié)4.3.3操作數(shù)項(c)運算符和操作符: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ù)項(c)運算符和操作符:5)屬性操作符:主要有PTR、段操作符、SHORT、THIS、HIGH、LOW、HIGHWORD、LOWWORD

HIGHWORD和LOWWORD格式:HIGHWORD常量或地址表達式

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

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

LOWWORD取其后的常量或地址表達式的低位字4.3.4注釋項注釋:以分號開始,說明指令的功能和作用,不會產(chǎn)生目標代碼,可以一行或多行例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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論