第三章 程序格式_第1頁
第三章 程序格式_第2頁
第三章 程序格式_第3頁
第三章 程序格式_第4頁
第三章 程序格式_第5頁
已閱讀5頁,還剩87頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1第三章第三章匯編語言程序格式匯編語言程序格式(6(6課時)課時)2下面表示了匯編程序的處理過程:下面表示了匯編程序的處理過程:1 1、編輯程序文本:、編輯程序文本:PROG.ASMPROG.ASM 如:如:edit PROG.ASMedit PROG.ASM2 2、用、用MASMMASM匯編程序:匯編程序:prog.objprog.obj 如:如:MASM PROG.ASMMASM PROG.ASM3 3、用、用linklink連接連接: prog.exe: prog.exe 如:如:link prog.objlink prog.obj3匯編語言對匯編語言對源程序作二次掃描源程序作二次掃描:

2、以發(fā)現(xiàn)源程序中的語法錯誤,給出出錯信以發(fā)現(xiàn)源程序中的語法錯誤,給出出錯信 息。息。展開宏指令,處理偽操作。展開宏指令,處理偽操作。得到無語法錯誤的得到無語法錯誤的objobj文件(目標(biāo)代碼文件)。文件(目標(biāo)代碼文件)。4經(jīng)經(jīng)LINKLINK將將OBJOBJ文件與庫文件或其它目標(biāo)文件連接成文件與庫文件或其它目標(biāo)文件連接成可執(zhí)行的可執(zhí)行的EXEEXE文件,這個文件,這個EXEEXE文件就可在機(jī)器上運(yùn)文件就可在機(jī)器上運(yùn)行。行。5 匯編語言的語句除指令外,還可以由偽匯編語言的語句除指令外,還可以由偽指令指令和宏指令組成,本節(jié)只討論偽操作。(常用的)和宏指令組成,本節(jié)只討論偽操作。(常用的) 偽指令不象

3、機(jī)器指令那樣在程序運(yùn)行期間由偽指令不象機(jī)器指令那樣在程序運(yùn)行期間由計(jì)算機(jī)來執(zhí)行,它是在匯編程序?qū)υ闯绦騾R編期計(jì)算機(jī)來執(zhí)行,它是在匯編程序?qū)υ闯绦騾R編期間由匯編程序處理的操作。間由匯編程序處理的操作。6一、數(shù)據(jù)定義及存儲器分配偽指令一、數(shù)據(jù)定義及存儲器分配偽指令格式:格式:Variable Mnemonic OperandOperand;comments Variable Mnemonic OperandOperand;comments VariableVariable用符號地址表示,其作用與指令前的標(biāo)號相用符號地址表示,其作用與指令前的標(biāo)號相同(不跟冒號)如果語句中有變量則匯編程序使其記同(不

4、跟冒號)如果語句中有變量則匯編程序使其記以第一個字節(jié)的偏移地址,可有可無。以第一個字節(jié)的偏移地址,可有可無。 7注釋(注釋(commentscomments):):用來說明該偽操作的功能??捎杏脕碚f明該偽操作的功能??捎锌蔁o??蔁o。操作數(shù)(操作數(shù)(operandoperand):):字段中的變量或標(biāo)號可以是字字段中的變量或標(biāo)號可以是字符串,數(shù)字,復(fù)制操作符符串,數(shù)字,復(fù)制操作符dupdup可使用表達(dá)式。如:可使用表達(dá)式。如:VariableVariableconstant expressionconstant expressionlabellabelconstant expressioncon

5、stant expression存儲器中應(yīng)存存儲器中應(yīng)存入表達(dá)式的值入表達(dá)式的值8助記符助記符(mnemonic)(mnemonic): 可以把其后跟著的數(shù)據(jù)存入指定的存儲單可以把其后跟著的數(shù)據(jù)存入指定的存儲單元,或只分配存儲空間而不存入確定的數(shù)值。元,或只分配存儲空間而不存入確定的數(shù)值。字段說名所用,偽操作的助記符。常有以下幾字段說名所用,偽操作的助記符。常有以下幾種:種:9DB DB 定義字節(jié),其后的每個操作數(shù)都占有一個字節(jié)。定義字節(jié),其后的每個操作數(shù)都占有一個字節(jié)。DW DW 定義字,其后的每個操作數(shù)都占有一個字(低定義字,其后的每個操作數(shù)都占有一個字(低位字節(jié)在第一個字節(jié)地址中,高位字

6、節(jié)在第二個字位字節(jié)在第一個字節(jié)地址中,高位字節(jié)在第二個字節(jié)地址中;可存放偏移地址)。節(jié)地址中;可存放偏移地址)。10DD DD 定義雙字,其后的每個操作數(shù)都占有二個字,定義雙字,其后的每個操作數(shù)都占有二個字,可存放完整的地址。(如:第一個字為偏移地址,可存放完整的地址。(如:第一個字為偏移地址,第二個字為段地址)第二個字為段地址)DQ DQ 定義四個字,其后的每個操作數(shù)都占有四個字。定義四個字,其后的每個操作數(shù)都占有四個字。DT DT 定義十個字節(jié),其后的每個操作數(shù)都占有十定義十個字節(jié),其后的每個操作數(shù)都占有十個字節(jié);形成壓縮的個字節(jié);形成壓縮的BCDBCD碼。碼。11例如:例如: D1 DB

7、 10D1 DB 10,4 4,10H10H D2 DW 100 D2 DW 100,100H100H,-5-5 D3 DD 3 D3 DD 3* *2020,OFFFDHOFFFDH D4 DB AB D4 DB AB D5 DW AB D5 DW AB在匯編期間存儲器中存中數(shù)據(jù)情況如圖:在匯編期間存儲器中存中數(shù)據(jù)情況如圖:120A0A040410106464000000000101FBFBFFFF3C3C000000000000FDFDFFFF0000000041424241ABBAD1D2D3(100d)(100H) D4(-5d) D5(60d)(10H)(4d)(10d)13當(dāng)使用復(fù)

8、制操作符時,格式為當(dāng)使用復(fù)制操作符時,格式為: :Variable Mnemonic repeat-count Variable Mnemonic repeat-count dup(operand,operand)dup(operand,operand)repeat-count: repeat-count: 可以是值為正整數(shù)的一個表達(dá)式,用可以是值為正整數(shù)的一個表達(dá)式,用來指定括號中操作數(shù)的重復(fù)次數(shù)。來指定括號中操作數(shù)的重復(fù)次數(shù)。dup dup 操作數(shù)可以嵌套。操作數(shù)可以嵌套。14例如:例如:A1 DB 3dup (0, 2dup(1,2), 3)A1 DB 3dup (0, 2dup(1,2

9、), 3) 則匯編結(jié)果如圖則匯編結(jié)果如圖: :150000010102020101020203030000010102020101020203030000010102020101020203031次次dup2次次3次次16注意:注意:(1)(1)在數(shù)據(jù)定義偽操作前面的變量值是該偽指令中在數(shù)據(jù)定義偽操作前面的變量值是該偽指令中第一個數(shù)據(jù)項(xiàng)在當(dāng)前段內(nèi)的第一字節(jié)的偏移地址。第一個數(shù)據(jù)項(xiàng)在當(dāng)前段內(nèi)的第一字節(jié)的偏移地址。(2) (2) 它們具有隱含的類型屬性它們具有隱含的類型屬性( (以字節(jié)為單位來表以字節(jié)為單位來表示每個數(shù)據(jù)項(xiàng)的長度示每個數(shù)據(jù)項(xiàng)的長度) )。17如:如:DBDB的類型屬性為的類型屬性為

10、1 1 即占一個字節(jié)即占一個字節(jié) DWDW的類型屬性為的類型屬性為2 2 即占二個字節(jié)即占二個字節(jié) DDDD的類型屬性為的類型屬性為4 4 即占四個字節(jié)即占四個字節(jié) DQDQ的類型屬性為的類型屬性為8 8 即占八個字節(jié)即占八個字節(jié) DTDT的類型屬性為的類型屬性為10 10 即占十個字節(jié)即占十個字節(jié) 可以使用(可以使用(1 1)PTRPTR屬性操作符改變操作數(shù)的類型。屬性操作符改變操作數(shù)的類型。 (2 2)LABELLABEL偽操作來定義。偽操作來定義。18使用使用PTRPTR格式為:格式為: type PTR Variablctype PTR Variablcconstant express

11、ionconstant expression例:例:A1 DB 1A1 DB 1,2 2 A2 DW 1234H A2 DW 1234H, 5678H5678H ?MOV AXMOV AX,WORD PTR A1+1WORD PTR A1+1;運(yùn)行結(jié)果;運(yùn)行結(jié)果(AX)=3402H(AX)=3402HMOV ALMOV AL,BYTE PTR A2+1BYTE PTR A2+1;運(yùn)行結(jié)果;運(yùn)行結(jié)果(AL)=12H(AL)=12H19使用使用LABELLABEL的格式:的格式: namenameLABEL typeLABEL type;為;為 BYTE,WORD,DWORDBYTE,WORD,D

12、WORDor :Variable-name LABEL type;or :Variable-name LABEL type;數(shù)據(jù)項(xiàng)的表示法。數(shù)據(jù)項(xiàng)的表示法。20二、表達(dá)式賦值偽操作二、表達(dá)式賦值偽操作: : 有時程序中多次出現(xiàn)同一個表達(dá)式,為方便起有時程序中多次出現(xiàn)同一個表達(dá)式,為方便起見可以用賦值偽操作給表達(dá)式賦予一個名字。見可以用賦值偽操作給表達(dá)式賦予一個名字。格式:格式: xpression-name EQU Expressionxpression-name EQU Expression21 其中表達(dá)式可以是其中表達(dá)式可以是任何有效的操作數(shù)格式,任何有效的操作數(shù)格式,可以是任何可以求出常

13、可以是任何可以求出常數(shù)值的表達(dá)式,任數(shù)值的表達(dá)式,任何有效的助記符。何有效的助記符。表達(dá)式中如果有變表達(dá)式中如果有變量或標(biāo)號的表達(dá)式,量或標(biāo)號的表達(dá)式,則應(yīng)先定義,再使則應(yīng)先定義,再使用用EQUEQU22例如:例如:ABC EQU 256 ABC EQU 256 DATA EQU ABC+12 DATA EQU ABC+12 B EQU BP+2 B EQU BP+2 P8 EQU DS:BP+8 P8 EQU DS:BP+8另:等號()偽操作可以代替另:等號()偽操作可以代替EQUEQU使用,使用, 差別在于差別在于“”可重復(fù)定義可重復(fù)定義如:如:EMPEMP, ,EMP=EMP+1EMP=

14、EMP+123三三. .段定義偽操作段定義偽操作格式為:格式為:segment name SEGMENTsegment name SEGMENT . . . . . . segment name ENDS segment name ENDS中間部分:對數(shù)據(jù)段,堆棧段來說,一般是存中間部分:對數(shù)據(jù)段,堆棧段來說,一般是存儲單元的定義儲單元的定義, ,分配等偽操作分配等偽操作, ,對代碼段則是指對代碼段則是指令及偽操作令及偽操作. .24用用ASSUMEASSUME偽操作來明確段和段寄存器的關(guān)系偽操作來明確段和段寄存器的關(guān)系: :格式格式:ASSUME assignment,assignment:

15、ASSUME assignment,assignment其中其中assignmentassignment說明分配情況說明分配情況: :segment register namesegment register name:segment namesegment name 必須是必須是CS,DS,SS,ES CS,DS,SS,ES 必須是由必須是由SEGMENTSEGMENT定義的定義的 段名段名用用ASSUME NOTHINGASSUME NOTHING可取消前面由可取消前面由ASSUMEASSUME所指定的所指定的段寄存器段寄存器. .25注意注意: :由由ASSUMEASSUME操作只能指定

16、某個段分配給哪個段操作只能指定某個段分配給哪個段寄存寄存器器, ,它并不能把段地址裝入相應(yīng)的段寄存器中它并不能把段地址裝入相應(yīng)的段寄存器中, ,所所以在代碼段中,還必須把段地址裝入相應(yīng)的段寄以在代碼段中,還必須把段地址裝入相應(yīng)的段寄存器中。存器中。( (如程序中如程序中MOV AX,data;MOV DS ,AX)MOV AX,data;MOV DS ,AX)代碼段的這一操作是在程序初始化時完成的。代碼段的這一操作是在程序初始化時完成的。26 如果需要用連接程序與其他程序摸塊相連接如果需要用連接程序與其他程序摸塊相連接時時, ,就需要使用就需要使用SEGMENTSEGMENT的類型及屬性說明。

17、的類型及屬性說明。格式為格式為:segment-name SEGMENT aliga-type:segment-name SEGMENT aliga-type combine-type combine-type class class . . . . . . segment-name ENDS segment-name ENDS27定位類型定位類型(aligh-type)(aligh-type)可以是可以是: :PARA PARA 指定的起始必須從子段邊界開始指定的起始必須從子段邊界開始, ,既段地既段地 址的最低的址的最低的1616進(jìn)制數(shù)必須為進(jìn)制數(shù)必須為0.0.BYTE BYTE 該段可以

18、從任何地址開始該段可以從任何地址開始: :WORD WORD 該段必須從字的邊界開始該段必須從字的邊界開始, ,既段地址必須既段地址必須 為偶數(shù)為偶數(shù). .28組合類型組合類型(conline-type)(conline-type)可以是可以是: :PUBLIC PUBLIC 該段連接時將與有相同名字的其他分該段連接時將與有相同名字的其他分段連接在一起段連接在一起, ,其連接次序由連接命令指定。其連接次序由連接命令指定。29COMMON COMMON 該段在連接時與其它同名分段有相同的該段在連接時與其它同名分段有相同的起始地址產(chǎn)生覆蓋。起始地址產(chǎn)生覆蓋。COMMONCOMMON的連接長度是各分

19、段的連接長度是各分段中的最大長度中的最大長度. .AT expressim AT expressim 使段的起始地址是表達(dá)式所計(jì)算使段的起始地址是表達(dá)式所計(jì)算出來的出來的1616位段地址位段地址. .但它不能用來指定代碼段。但它不能用來指定代碼段。30STACK STACK 指定該段在運(yùn)行時為堆棧段的一部分。指定該段在運(yùn)行時為堆棧段的一部分。MEMORY MEMORY 指定該段將分配在所有其它連接在一起的指定該段將分配在所有其它連接在一起的段的前面(在高地址上)。如果連接時有幾個指段的前面(在高地址上)。如果連接時有幾個指定定MEMORYMEMORY的段則遇到第一段作為的段則遇到第一段作為ME

20、MEORYMEMEORY段。其段。其它則作為它則作為COMMONCOMMON段。段。類別類別(class)(class)連接時用于組成段組的名字。連接時用于組成段組的名字。31四、程序開始和結(jié)束偽操作四、程序開始和結(jié)束偽操作程序的開始可用程序的開始可用NAMENAME和和TITLETITLE為模塊取名字為模塊取名字. . ( (并不是必要的并不是必要的) )格式格式: NAME module-name: NAME module-name TITLE text TITLE text;可指定第一頁上打印的標(biāo)題;可指定第一頁上打印的標(biāo)題;texttext最多可有最多可有6060個字符;若程序中無個字

21、符;若程序中無NAMENAME偽操作偽操作, ,則匯編則匯編程序?qū)⒂贸绦驅(qū)⒂胻exttext中的前六個字符作為模塊名。中的前六個字符作為模塊名。 32程序結(jié)束操作符程序結(jié)束操作符: :格式格式: END label: END label其中其中l(wèi)abellabel指定程序開始執(zhí)行起始地址。若指定程序開始執(zhí)行起始地址。若多個程序模塊相連接多個程序模塊相連接, , 則只有主程序要使用則只有主程序要使用標(biāo)號標(biāo)號, , 其它子程序模塊則只用其它子程序模塊則只用ENDEND而不必指而不必指定標(biāo)號。定標(biāo)號。33五、對準(zhǔn)偽操作五、對準(zhǔn)偽操作(1)EVEN(1)EVEN偽操作偽操作使下一個字節(jié)地址變成偶數(shù)使下

22、一個字節(jié)地址變成偶數(shù), ,一個字的地址最一個字的地址最好從偶地址開始好從偶地址開始, , 所以對于數(shù)組為保證其從偶所以對于數(shù)組為保證其從偶地址開始地址開始, ,可以在它前面用可以在它前面用EVENEVEN偽操作來達(dá)到偽操作來達(dá)到這一目的。這一目的。如:如:EVENEVEN WORD-ARRAY DW 100dup(?) WORD-ARRAY DW 100dup(?).34(2)ORG constant expression(2)ORG constant expressionORGORG偽操作可以使下一個字節(jié)的地址為常數(shù)表偽操作可以使下一個字節(jié)的地址為常數(shù)表達(dá)式的值。達(dá)式的值。例:例:ORG 1

23、0 ORG 10 V1 DW 47A5H V1 DW 47A5H則則V1V1的地址為的地址為0AH(0AH(偏移地址偏移地址) )35匯編程序?qū)υ闯绦騾R編的過程中,使用地址計(jì)匯編程序?qū)υ闯绦騾R編的過程中,使用地址計(jì)數(shù)器來保存當(dāng)前正在匯編的指令的地址,地址數(shù)器來保存當(dāng)前正在匯編的指令的地址,地址計(jì)數(shù)器的值用計(jì)數(shù)器的值用$ $來表示,匯編語言允許用戶直來表示,匯編語言允許用戶直接用接用$ $來引用地址計(jì)數(shù)器的值。來引用地址計(jì)數(shù)器的值。36例:例:JNE $+6JNE $+6;轉(zhuǎn)向地址是;轉(zhuǎn)向地址是JNEJNE指令的首地址加指令的首地址加 上上6 6 OGR 0074H OGR 0074H arra

24、y DW 1 array DW 1,2 2,$+4$+4,3 3,4 4,$+4$+4匯編后的存儲區(qū)將如圖所示匯編后的存儲區(qū)將如圖所示(見下頁)(見下頁)37010002007C00030004008200array0074(0078+4)00797B007A7C7D(7E+4)38六、基數(shù)控制偽操作六、基數(shù)控制偽操作 匯編程序默認(rèn)的數(shù)為十進(jìn)制,因而除非專門匯編程序默認(rèn)的數(shù)為十進(jìn)制,因而除非專門指定,匯編程序把程序中出現(xiàn)的數(shù)均看成十進(jìn)制指定,匯編程序把程序中出現(xiàn)的數(shù)均看成十進(jìn)制數(shù),當(dāng)使用其它基數(shù)表示的常數(shù)時,需要專門給數(shù),當(dāng)使用其它基數(shù)表示的常數(shù)時,需要專門給以標(biāo)記:以標(biāo)記:39二進(jìn)制數(shù)由二進(jìn)

25、制數(shù)由B B表示表示 如:如:00110100B00110100B 十進(jìn)制數(shù)由十進(jìn)制數(shù)由D D表示表示 如:如:165D165D八進(jìn)制數(shù)由八進(jìn)制數(shù)由O O或或Q Q表示表示 如:如:1677Q1677Q十六進(jìn)制數(shù)由十六進(jìn)制數(shù)由H H表示表示 如:如:0ABCDH0ABCDH(第一個(第一個符必須是符必須是0909)40可用可用RADIXRADIX偽操作將默認(rèn)的基數(shù)改變?yōu)閭尾僮鲗⒛J(rèn)的基數(shù)改變?yōu)?16216范圍的基范圍的基數(shù)。數(shù)。 如:如:MOV BXMOV BX,0FFH0FFH MOV BX MOV BX,178178 與與 RADIX 16RADIX 16 MOV BX MOV BX,0F

26、F0FF MOV BX MOV BX,178D178D 是等價的。是等價的。 字符中可以看成串常數(shù),字符中可以看成串常數(shù),用單或雙引號括起,用單或雙引號括起,得到的是字符串的得到的是字符串的ASCASC碼值。碼值。41匯編語言源程序中每個語句可以由四項(xiàng)成,格式:匯編語言源程序中每個語句可以由四項(xiàng)成,格式:name operatim operand ;commentname operatim operand ;comment名字項(xiàng)名字項(xiàng) 操作碼操作碼 操作數(shù)的操作數(shù)的 注釋注釋 助記符助記符42一、名字項(xiàng)一、名字項(xiàng) 可以是標(biāo)號或變量可以是標(biāo)號或變量, ,用來表示本語句的符號地用來表示本語句的符號

27、地址。只有當(dāng)需要用地址訪問該語句時它才需要出現(xiàn)。址。只有當(dāng)需要用地址訪問該語句時它才需要出現(xiàn)。 名字項(xiàng)第一個字符必須為名字項(xiàng)第一個字符必須為A AZ Z中的一個字符,中的一個字符,所用字符有:所用字符有:A AZ,0Z,09 9及主用字符及主用字符 ?,-,$,?,-,$,431 1、標(biāo)號、標(biāo)號標(biāo)號代碼段中定義,后面跟冒號標(biāo)號代碼段中定義,后面跟冒號(:)(:),也可以用,也可以用LABLELABLE或或EQUEQU定義定義, , 定義可以作為過程名定義。定義可以作為過程名定義。( (經(jīng)常出現(xiàn)在轉(zhuǎn)移經(jīng)常出現(xiàn)在轉(zhuǎn)移,CALL,CALL指令的操作數(shù)字段指令的操作數(shù)字段) )標(biāo)號有三種屬性:段,偏移

28、及類型標(biāo)號有三種屬性:段,偏移及類型段屬性:段屬性: 定義標(biāo)號的段起始地址,此值必須在定義標(biāo)號的段起始地址,此值必須在 個段寄存器中,而標(biāo)號的段則總是在個段寄存器中,而標(biāo)號的段則總是在 CSCS寄存器中。寄存器中。44偏移屬性:標(biāo)號的偏移地址時偏移屬性:標(biāo)號的偏移地址時1616位無符號數(shù)位無符號數(shù), ,它代它代表從段起始地址到定義標(biāo)號的位置之間的字節(jié)數(shù)。表從段起始地址到定義標(biāo)號的位置之間的字節(jié)數(shù)。類型屬性:用來指出該標(biāo)號是在本段內(nèi)引用類型屬性:用來指出該標(biāo)號是在本段內(nèi)引用, ,還是還是在其它段中引用:在其它段中引用:段內(nèi)引用稱段內(nèi)引用稱NEARNEAR,指針長度為,指針長度為2 2字節(jié)字節(jié).(

29、.(數(shù)值為數(shù)值為-1)-1)段外引用稱段外引用稱FAR,FAR,指針長度為指針長度為4 4字節(jié)字節(jié).(.(數(shù)值為數(shù)值為-2)-2)452 2、變量、變量變量在除號代碼段以外的其它段中定義,后面無冒變量在除號代碼段以外的其它段中定義,后面無冒號。也可以用號。也可以用LABELLABEL或或EQUEQU來定義;經(jīng)常出現(xiàn)在操作來定義;經(jīng)常出現(xiàn)在操作數(shù)據(jù)段。也有三種屬性:數(shù)據(jù)段。也有三種屬性:段屬性:定義變量的段起始地址,此值必須在一個段屬性:定義變量的段起始地址,此值必須在一個段寄存器中。段寄存器中。46偏移屬性:是偏移屬性:是1616位無符號數(shù),代表從段的起始地址位無符號數(shù),代表從段的起始地址到定

30、義變量的位置之間的字節(jié)數(shù),在當(dāng)前段內(nèi)給出到定義變量的位置之間的字節(jié)數(shù),在當(dāng)前段內(nèi)給出變量的偏移值等于當(dāng)前地址計(jì)數(shù)器變量的偏移值等于當(dāng)前地址計(jì)數(shù)器( (可用可用$ $表示表示).).類型屬性:定義變量所保留的字節(jié)數(shù)類型屬性:定義變量所保留的字節(jié)數(shù)如:如:BYTE(1BYTE(1字節(jié)長字節(jié)長) WORD(2) WORD(2字節(jié)字節(jié)) ) DWORD(4 DWORD(4字節(jié)字節(jié)) DQ(8) DQ(8字節(jié)字節(jié)) ) DT(10 DT(10字節(jié)字節(jié)) )47二、操作項(xiàng)二、操作項(xiàng)操作項(xiàng)是指令操作碼或宏指令的助記符操作項(xiàng)是指令操作碼或宏指令的助記符48三三. .操作數(shù)操作數(shù) 由一個或多個表達(dá)式組成,多個操

31、作數(shù)項(xiàng)之間用由一個或多個表達(dá)式組成,多個操作數(shù)項(xiàng)之間用逗號分開。在指令中,操作數(shù)項(xiàng)給出操作數(shù)地址;在逗號分開。在指令中,操作數(shù)項(xiàng)給出操作數(shù)地址;在偽操作、宏指令偽操作、宏指令中,操作數(shù)項(xiàng)中,操作數(shù)項(xiàng)給出它們所要求的參數(shù)。給出它們所要求的參數(shù)。操作數(shù)有數(shù)字表達(dá)式和地址表達(dá)式兩種。由常數(shù),寄操作數(shù)有數(shù)字表達(dá)式和地址表達(dá)式兩種。由常數(shù),寄存器,標(biāo)號,變量與一些操作符相組合成的序列。存器,標(biāo)號,變量與一些操作符相組合成的序列。491 1、算術(shù)操作符。、算術(shù)操作符。 ,/ /,MODMOD(指除法運(yùn)算后得到(指除法運(yùn)算后得到的余數(shù))如的余數(shù))如9/79/7商為商為1 1,余為,余為2 2都可用于數(shù)字和都

32、可用于數(shù)字和地址表達(dá)式,但當(dāng)用于地址時,只有當(dāng)其有明地址表達(dá)式,但當(dāng)用于地址時,只有當(dāng)其有明確的物理意義其結(jié)果才有效的(如乘、除地址確的物理意義其結(jié)果才有效的(如乘、除地址無效)無效)50例:寫出將數(shù)字組成例:寫出將數(shù)字組成A1A1的長度(字?jǐn)?shù))存入的長度(字?jǐn)?shù))存入CXCX寄存器的指令。寄存器的指令。A1 DW 1,2,3,4,5,6,7A1 DW 1,2,3,4,5,6,7END DW ?END DW ?指令為:指令為:MOV CX,(END-A1)/2MOV CX,(END-A1)/2匯編時形成指令:匯編時形成指令:MOV CX,7MOV CX,7512 2、 邏輯操作符。邏輯操作符。A

33、ND OR XOR NOT AND OR XOR NOT 按位操作,只能用于邏輯表按位操作,只能用于邏輯表達(dá)式。達(dá)式。523 3、關(guān)系操作符(、關(guān)系操作符(6 6種)種)EQ(EQ(相等)相等) NE(NE(不等)不等) LT(LT(小于)小于)GT(GT(大于)大于) LE(LE(小于或等于)小于或等于)GEGE(大于或等于)(大于或等于)兩操作數(shù)必須都是數(shù)字或是同一段內(nèi)的兩存儲兩操作數(shù)必須都是數(shù)字或是同一段內(nèi)的兩存儲器地址,計(jì)算的結(jié)果應(yīng)為邏輯值:器地址,計(jì)算的結(jié)果應(yīng)為邏輯值:1 1為真為真(0FFFFH0FFFFH),),0 0為假。為假。53例:例:MOV BX,(PORT-VAL LT

34、 5) AND 20) MOV BX,(PORT-VAL LT 5) AND 20) OR (PORT-VAL GE 5) AND 30) OR (PORT-VAL GE 5) AND 30) 則當(dāng)則當(dāng) PORT-VAL 5 PORT-VAL 5 PORT-VAL 5 時時 匯編為:匯編為:MOV BX,30MOV BX,30544 4、數(shù)值回送操作符、數(shù)值回送操作符 TYPE,LENGTH,SIZE, TYPE,LENGTH,SIZE, OFFSET,SEG 5OFFSET,SEG 5種。種。 TYPE:TYPE:格式格式:TYPE Variable :TYPE Variable 或或 la

35、bellabel如果是變量,則匯編程序?qū)⒒厮驮撟兞康囊宰止?jié)數(shù)如果是變量,則匯編程序?qū)⒒厮驮撟兞康囊宰止?jié)數(shù)表示的類型。表示的類型。DB 1, DW 2, DD 4,DB 1, DW 2, DD 4,DQ 8, DT 10DQ 8, DT 10如果是標(biāo)號則回送代表該標(biāo)號類型的數(shù)值如果是標(biāo)號則回送代表該標(biāo)號類型的數(shù)值NEAR -1, FAR -2NEAR -1, FAR -2 55例例:A1 DW 1,2,3:A1 DW 1,2,3 則則ADD SI,TYPE A1ADD SI,TYPE A1 ADD SI, 2 ADD SI, 256 LENGTH LENGTH 對于變量中使用對于變量中使用DUP

36、DUP時時, ,回送分配給該回送分配給該變量的單元數(shù);其它情況則回送變量的單元數(shù);其它情況則回送1 1。例例:FEES DW 100 dup(0):FEES DW 100 dup(0) 則則:MOV CX,LENGTH FEES MOV CX 100:MOV CX,LENGTH FEES MOV CX 100 MOV CX,LENGTH A1 MOV CX,1 MOV CX,LENGTH A1 MOV CX,157 SIZE SIZE 格式:格式:SIZE VariableSIZE Variable回送分配該變量的字節(jié)數(shù):回送分配該變量的字節(jié)數(shù):LENGTHLENGTH值和值和TYPETYPE

37、值值的乘積。的乘積。例:例:MOV CX,SIZE FEES MOV CX,200MOV CX,SIZE FEES MOV CX,200 MOV CX,SIZE A1 MOV CX,2 MOV CX,SIZE A1 MOV CX,258 OFFSET OFFSET 格式:格式:OFFSET VariableOFFSET Variable或或labellabel 回送變量或標(biāo)號的偏移地址回送變量或標(biāo)號的偏移地址例:例:MOV BX,OFFSET P1 LEA BX,P1MOV BX,OFFSET P1 LEA BX,P159 606162 6364 SHORT SHORT:JMPJMPJMP S

38、HORT TAGJMP SHORT TAG TAG: TAG: 65 THIS THIS 格式為:格式為:THIS type THIS type 或或 attributeattribute它可它可以象以象 PTR PTR 一樣建立一個指定類型(一樣建立一個指定類型(BYTEBYTE,WORDWORD或或DWORDDWORD)或指定距離()或指定距離(NEARNEAR,F(xiàn)ARFAR)的地址操作符,)的地址操作符,該操作符的段地址和偏移地址與下一個存儲單元的該操作符的段地址和偏移地址與下一個存儲單元的地址相同地址相同66例例1 1:F1 EQU THIS BYTEF1 EQU THIS BYTE

39、F2 DW 100 DUP F2 DW 100 DUP(?)(?)此時,此時,F(xiàn)1F1的偏移地址與的偏移地址與F2F2完全相同,但完全相同,但 F1F1是字節(jié)是字節(jié)類型,類型,F(xiàn)2F2是字類型。是字類型。67例例2 2:START EQU THIS FARSTART EQU THIS FAR MOV CX MOV CX, 100100此時,此時,MOVMOV指令有一個指令有一個FARFAR屬性的地址屬性的地址STARTSTART;這就允;這就允許其他段的許其他段的JMPJMP指令直接轉(zhuǎn)到指令直接轉(zhuǎn)到STARTSTART來。來。68 HIGH HIGH和和LOWLOW:字節(jié)分離操作符,它接收一個

40、樹或:字節(jié)分離操作符,它接收一個樹或地址表達(dá)式,地址表達(dá)式,HIGHHIGH取其高位字節(jié),取其高位字節(jié),LOWLOW取其低位字取其低位字節(jié)。節(jié)。例:例:CONST EQU OABCDHCONST EQU OABCDH MOV AH,HIGH CONST MOV AH MOV AH,HIGH CONST MOV AH,OABHOABH696 6、表達(dá)式的運(yùn)算次序:、表達(dá)式的運(yùn)算次序: 表達(dá)式中的運(yùn)算優(yōu)先級從高到低排列如下:表達(dá)式中的運(yùn)算優(yōu)先級從高到低排列如下: 圓括號中的項(xiàng),方括號中的項(xiàng),結(jié)構(gòu)變量(變量,圓括號中的項(xiàng),方括號中的項(xiàng),結(jié)構(gòu)變量(變量,字段)字段)LENGTHLENGTH,SIZES

41、IZE 名:(段取代)名:(段取代) PTRPTR,OFFSETOFFSET,SEGSEG,TYPETYPE,THISTHIS及段操作符。及段操作符。70 HIGH HIGH,LOWLOW 乘法,除法:乘法,除法:* *,/ /,MODMOD,SHLSHL,SHRSHR 加法,減法:加法,減法:+ +,- - 關(guān)系操作符關(guān)系操作符:EQ,NE,LT,LE,GT,GE:EQ,NE,LT,LE,GT,GE 邏輯邏輯NOTNOT 邏輯邏輯ANDAND 邏輯邏輯XOR,ORXOR,OR71四四. .注釋項(xiàng):注釋項(xiàng): 寫出本條(或本段)指令在程序中的功能寫出本條(或本段)指令在程序中的功能和作用,而不應(yīng)

42、該只寫指令的動作。和作用,而不應(yīng)該只寫指令的動作。 72程序結(jié)束時使用標(biāo)號為程序結(jié)束時使用標(biāo)號為4C4C的功能調(diào)用返回的功能調(diào)用返回DOSDOS。 MOV AX,4C00HMOV AX,4C00H INT 21H INT 21H73一一. .結(jié)構(gòu)結(jié)構(gòu)將不同類型的數(shù)據(jù)形成的數(shù)組,定義為結(jié)構(gòu)數(shù)將不同類型的數(shù)據(jù)形成的數(shù)組,定義為結(jié)構(gòu)數(shù)據(jù)類型:據(jù)類型:1.1.定義定義格式:結(jié)構(gòu)名格式:結(jié)構(gòu)名 STRUCSTRUC 字段名字段名 ; 如如DB,DW,DDDB,DW,DD等等 : 定義的一組變量定義的一組變量 : 名,稱為結(jié)構(gòu)字名,稱為結(jié)構(gòu)字 段名段名 結(jié)構(gòu)名結(jié)構(gòu)名 ENDSENDS 74例如:例如: A

43、BC STRUCABC STRUC A DB ? A DB ? B DB ABC12 B DB ABC12 C DW 120 C DW 120 ABC ENDS ABC ENDS注意:注意:“定義定義”僅為結(jié)構(gòu)定義并未給出存儲單僅為結(jié)構(gòu)定義并未給出存儲單元的分配和字段的值,即只有形式,無內(nèi)容,元的分配和字段的值,即只有形式,無內(nèi)容,它們的使用需通過結(jié)構(gòu)的存儲分配和設(shè)置來實(shí)它們的使用需通過結(jié)構(gòu)的存儲分配和設(shè)置來實(shí)現(xiàn)?,F(xiàn)。752.2.結(jié)構(gòu)變量的存儲分配與設(shè)置結(jié)構(gòu)變量的存儲分配與設(shè)置格式:結(jié)構(gòu)變量名格式:結(jié)構(gòu)變量名 結(jié)構(gòu)名結(jié)構(gòu)名 字段值表字段值表 所賦初值所賦初值實(shí)體,通過字段值表給出結(jié)構(gòu)中各名的存

44、儲分配實(shí)體,通過字段值表給出結(jié)構(gòu)中各名的存儲分配及初值,故結(jié)構(gòu)變量名與具體的存儲空間和數(shù)據(jù)及初值,故結(jié)構(gòu)變量名與具體的存儲空間和數(shù)據(jù)相連,可在程序中直接引用。相連,可在程序中直接引用。76如:如: SA ABC SA ABC SB ABC ; SB ABC ; 均用結(jié)構(gòu)定義的初值均用結(jié)構(gòu)定義的初值 SSA ABC 100 DUP ()SSA ABC 100 DUP ()773.3.結(jié)構(gòu)及字段的引用。結(jié)構(gòu)及字段的引用。通過結(jié)構(gòu)變量名及其字段名來使用結(jié)構(gòu)中的通過結(jié)構(gòu)變量名及其字段名來使用結(jié)構(gòu)中的字段,可有其它尋址方式。字段,可有其它尋址方式。如:如: MOV AL,SAAMOV AL,SAA MO

45、V AX,SBC MOV AX,SBC78注:結(jié)構(gòu)的定義與設(shè)置注:結(jié)構(gòu)的定義與設(shè)置 在在DSDS段段 結(jié)構(gòu)變量的引用結(jié)構(gòu)變量的引用 在在CSCS段段79結(jié)構(gòu)舉例:結(jié)構(gòu)舉例: DATA SEGMENTDATA SEGMENT SA STRUC SA STRUC C1 DW 0 C1 DW 0 C2 DW ? C2 DW ? C3 DB C3 DB 10DUP(?)10DUP(?) SA ENDS SA ENDS N1 SA N1 SA N2 SA ,20, N2 SA N3 SA N3 SA 100DUP()100DUP() DATA ENDS DATA ENDS80Stack segmentS

46、tack segment stack stack DB DB 200DUP(?)200DUP(?)Stack endsStack endsCODE segmentCODE segment ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATASTART: MOV AX,DATASTART: MOV AX,DATA MOV DS,AX MOV DS,AX;將;將N1,N2N1,N2的的C2C2字段值相加,結(jié)果存入字段值相加,結(jié)果存入AXAX中。中。81 MOV BX,offset N1 MOV BX,offset N1 MOV AX,BX.C2 MOV AX,

47、BX.C2 MOV BX,offset N2 MOV BX,offset N2 ADD AX,BX.C2 ADD AX,BX.C2 ;置;置N3N3結(jié)構(gòu)類型數(shù)組的結(jié)構(gòu)類型數(shù)組的C2C2字段為字段為AXAX中的和值。中的和值。 MOV BX,offset N3MOV BX,offset N3 MOV CX,length N3-1 MOV CX,length N3-1 MOV MOV SI,TYPE N3SI,TYPE N3;82 LP1LP1:MOV BX+SI.C2,AXMOV BX+SI.C2,AX ADD BX,SI ADD BX,SI;指向下一個數(shù)組元素;指向下一個數(shù)組元素 LOOP L

48、P1LOOP LP1 ;傳;傳N2N2的的C2C2字段為字段為0 0值值 XOR AX,AXXOR AX,AX MOV N2.C2,AX MOV N2.C2,AX MOV AH,4CH MOV AH,4CH INT 21H INT 21H CODE ENDS CODE ENDS END start END start83二、記錄二、記錄用來表示只要幾位就可以表示的數(shù)據(jù),與結(jié)用來表示只要幾位就可以表示的數(shù)據(jù),與結(jié)構(gòu)類似需先定義,在分配和設(shè)置數(shù)值后,才構(gòu)類似需先定義,在分配和設(shè)置數(shù)值后,才能引用能引用841 1、定義、定義: :格式為:格式為:記錄名記錄名recordrecord字段名:寬度字段名:寬度| =|

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論