第四章匯編語言程序設計A_第1頁
第四章匯編語言程序設計A_第2頁
第四章匯編語言程序設計A_第3頁
第四章匯編語言程序設計A_第4頁
第四章匯編語言程序設計A_第5頁
已閱讀5頁,還剩128頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第三章習題第三章習題3-1, ,3-2, ,3-3, ,3-6, ,3-8, ,3-15, ,3-162.掌握宏匯編語言掌握宏匯編語言程序設計程序設計與與調(diào)試調(diào)試方法方法;3. 掌握宏匯編語言掌握宏匯編語言語法規(guī)則語法規(guī)則( (語句、偽指令、表達語句、偽指令、表達式、運算符式、運算符) );4.能用能用MASM、DOS功能調(diào)用和功能調(diào)用和BIOS功能調(diào)用設功能調(diào)用設計程序計程序;1.掌握宏匯編語言程序的掌握宏匯編語言程序的結(jié)構(gòu)結(jié)構(gòu);( (1) )匯編語言源程序匯編語言源程序:指按匯編語言語法規(guī)則編寫的源指按匯編語言語法規(guī)則編寫的源程序程序。( (2) )匯編匯編( (過程過程) ):將匯編語言

2、源程序翻譯成機器碼的過將匯編語言源程序翻譯成機器碼的過程稱為匯編過程或簡稱匯編程稱為匯編過程或簡稱匯編。( (3) )手工匯編與機器匯編手工匯編與機器匯編:( (4) )小匯編與宏匯編小匯編與宏匯編:( (5) )目標程序目標程序:匯編后所得的機器碼程序稱為目標程匯編后所得的機器碼程序稱為目標程序序。必須按嚴格的語法規(guī)則和規(guī)定的格式來編寫源程必須按嚴格的語法規(guī)則和規(guī)定的格式來編寫源程序序,才能正確匯編以生成可執(zhí)行程序才能正確匯編以生成可執(zhí)行程序。手寫匯編語手寫匯編語言源程序言源程序編輯程序編輯程序編輯編輯匯編語言匯編語言源程序源程序.ASM匯編程序匯編程序匯編匯編機器語言機器語言目標程序目標程

3、序.OBJ連接程序連接程序連接連接機器語言機器語言執(zhí)行程序執(zhí)行程序.EXE匯編語言源程序一般結(jié)構(gòu)匯編語言源程序一般結(jié)構(gòu)2、把程序設計成一個過程把程序設計成一個過程( (子程序子程序) )。我們用匯編我們用匯編語言設計的用戶程序都是運行在操作系統(tǒng)下語言設計的用戶程序都是運行在操作系統(tǒng)下,因此因此,從操作系統(tǒng)角度來看從操作系統(tǒng)角度來看,用戶程序都只是用戶程序都只是 操作系統(tǒng)中操作系統(tǒng)中的一個子程序的一個子程序。3、設計時應考慮程序運行結(jié)束后如何返回操作系設計時應考慮程序運行結(jié)束后如何返回操作系統(tǒng)統(tǒng)。4、舉例舉例: :一個一個完整的匯編語言源程序?qū)嵗暾膮R編語言源程序?qū)嵗?1、程序在內(nèi)存中的段結(jié)

4、構(gòu)程序在內(nèi)存中的段結(jié)構(gòu)。0DH,0AH例例在屏幕上顯示字符串在屏幕上顯示字符串“Hello, ,this is a sample program !”DATASEGMENT ;數(shù)據(jù)段數(shù)據(jù)段MSG1DB Hello, ,this is a sample program ! , ,13, ,10, , $ DATAENDSSTACKSEGMENTST1 DB 100 DUP( (?) ) ;堆棧段堆棧段TOPEQU $ST1STACKENDSCODE SEGMENT ;代碼段代碼段MAIN PROC FAR ASSUME CS:CODE, ,DS:DATA, ,SS:STACKSTART: MOV

5、AX, ,STACKMOVSS, ,AXMOVSP, ,TOP;設置自己的堆棧設置自己的堆棧PUSH DS ;正常返回所需段地址及偏移地址正常返回所需段地址及偏移地址 MOV AX, ,0 PUSH AX MOV AX, ,DATA ;送數(shù)據(jù)段段地址送數(shù)據(jù)段段地址 MOV DS, ,AX MOV AH, ,9 ;DOS 9號功能調(diào)用號功能調(diào)用,顯示字符串顯示字符串 MOV DX, ,OFFSET MSG1 INT 21H RET MAIN ENDP CODE ENDS END START每段均由偽指令每段均由偽指令SEGMENT開始開始,ENDS結(jié)束結(jié)束。 整個源程序用整個源程序用END語句結(jié)

6、尾語句結(jié)尾,END后面可跟該程序后面可跟該程序執(zhí)行的起始地址執(zhí)行的起始地址START。 這里把主程序建立為過程這里把主程序建立為過程,由由DOS調(diào)用該過程調(diào)用該過程,進進入程序后將入程序后將DS的內(nèi)容及的內(nèi)容及0作段地址和偏移地址入棧作段地址和偏移地址入棧,以便在程序結(jié)束時用以便在程序結(jié)束時用RET指令返回指令返回DOS。 若主程序開始時沒有用上面三條指令在堆棧中建立若主程序開始時沒有用上面三條指令在堆棧中建立返回信息返回信息,則在程序結(jié)束時就不能用則在程序結(jié)束時就不能用RET返回指令返回指令,而是使用而是使用4CH號號DOS功能調(diào)用功能調(diào)用,如下所示如下所示: MOV AX, ,4C00H

7、INT 21H 三段式結(jié)構(gòu)三段式結(jié)構(gòu): 數(shù)據(jù)段、堆棧段、代碼段數(shù)據(jù)段、堆棧段、代碼段匯編語言的上機過程匯編語言的上機過程1、源程序的源程序的編輯編輯建立建立:可用多種編輯程序建立可用多種編輯程序建立源程序源程序,但要求源程序用但要求源程序用ASCII碼存儲碼存儲,程序程序擴展名為擴展名為.ASM。2、匯編匯編3、連接連接: 建立建立DOS格式的可執(zhí)行文件格式的可執(zhí)行文件。4、程序前綴程序前綴PSP與可執(zhí)行文件與可執(zhí)行文件.COM、.EXE5、COMMAND.COM 命令解釋程序命令解釋程序6、DOS中程序的執(zhí)行過程中程序的執(zhí)行過程7、參考文獻參考文獻NEXT編編 輯輯源程序的編輯建立源程序的編

8、輯建立 調(diào)用全屏幕編輯程序調(diào)用全屏幕編輯程序EDIT、PE、WS等等,源程序文源程序文件的擴展名應為件的擴展名應為 .ASM。 返回返回也可用也可用WORD來編輯修改來編輯修改,存盤時存為擴展名存盤時存為擴展名為為 .TXT的文本文檔的文本文檔,然后用然后用DOS命令將其改為擴命令將其改為擴展名為展名為 .ASM即可即可。用用MASM.EXE或或ASM.EXE對源文件進行匯編對源文件進行匯編: 檢查源程序中語法錯誤檢查源程序中語法錯誤,給出出錯信息給出出錯信息; 產(chǎn)生目標文件產(chǎn)生目標文件( (.OBJ文件文件) )、列表文件列表文件( (.LST文文件件) )和對照文件和對照文件( (.CRF

9、文件文件) ); 展開宏指令展開宏指令。 返回返回回車符回車符 如一個如一個EXAMPLE.ASM源程序的匯編過程及屏源程序的匯編過程及屏幕顯示如下幕顯示如下: C: MASM EXAMPLE; 連連 接接匯編程序產(chǎn)生的二進制目標文件匯編程序產(chǎn)生的二進制目標文件( (.OBJ文件文件) )仍然不仍然不可執(zhí)行可執(zhí)行,必須經(jīng)過連接必須經(jīng)過連接,將它轉(zhuǎn)換成將它轉(zhuǎn)換成 .EXE文件才可執(zhí)文件才可執(zhí)行行,連接程序為連接程序為LINK.EXE,它可以把多個模塊連接在它可以把多個模塊連接在一起一起,這些模塊可以是庫文件或匯編程序產(chǎn)生的目標這些模塊可以是庫文件或匯編程序產(chǎn)生的目標文件文件。連接過程如下連接過程

10、如下: 返回返回C: LINK EXAMPLE; 如果連接多個目標文件如果連接多個目標文件,將多個目標文件名一次輸入將多個目標文件名一次輸入,中間用加號中間用加號“+”連接連接。 源程序沒有堆棧段源程序沒有堆棧段,連接結(jié)果給出無堆棧段的警告錯連接結(jié)果給出無堆棧段的警告錯誤誤,但不影響程序執(zhí)行但不影響程序執(zhí)行。 如果需要如果需要,可用可用EXE2BIN文件將文件將.EXE文件轉(zhuǎn)換文件轉(zhuǎn)換成成.COM文件文件,.COM文件也是可運行文件文件也是可運行文件。 內(nèi)內(nèi) 容容 偏移量偏移量INT 20H指令指令 0001H可用內(nèi)存大小可用內(nèi)存大小 0203H功能調(diào)用入口功能調(diào)用入口 0609H程序結(jié)束地址

11、程序結(jié)束地址 0A0DHctrl-c退出地址退出地址 0E11H錯誤退出地址錯誤退出地址 1215H 環(huán)境參數(shù)地址環(huán)境參數(shù)地址 2C2DHv程序段前綴程序段前綴( (PSP) )是是DOS為在為在其下將要運行的每個程序建立的其下將要運行的每個程序建立的控制塊控制塊。只有執(zhí)行程序裝入內(nèi)存只有執(zhí)行程序裝入內(nèi)存后才建立后才建立PSP。v程序段前綴包含執(zhí)行程序的各程序段前綴包含執(zhí)行程序的各種信息種信息:一一是執(zhí)行程序的有關信是執(zhí)行程序的有關信息息( (如命令行參數(shù)和內(nèi)存大小等如命令行參數(shù)和內(nèi)存大小等) );二二是程序調(diào)入前是程序調(diào)入前DOS系統(tǒng)的環(huán)境系統(tǒng)的環(huán)境信息信息。vPSP總是放在程序的前面總是放

12、在程序的前面,占用占用可用內(nèi)存低端的可用內(nèi)存低端的100H個字節(jié)個字節(jié)。返回返回可執(zhí)行文件可執(zhí)行文件.COM與與.EXEv.COM只由一個段組成只由一個段組成,最大長度為最大長度為64KB。文件裝文件裝入內(nèi)存后入內(nèi)存后,DS、ES、CS和和SS都指向都指向PSP的首址的首址。程序放在程序放在PSP之后之后( (由由DEBUG程序裝入程序裝入 .COM程序程序后后,查看查看IP值為值為100H) ),程序執(zhí)行時起始地址為程序執(zhí)行時起始地址為CS:100H,具體段基址由具體段基址由DOS操作系統(tǒng)定位操作系統(tǒng)定位。返回返回v.EXE可由多段組成可由多段組成,文件裝入內(nèi)存后文件裝入內(nèi)存后,DS和和ES

13、指向指向PSP的首址的首址。程序執(zhí)行時起始地址為程序執(zhí)行時起始地址為CS:00H,各段各段基址的實際值由基址的實際值由DOS操作系統(tǒng)定位操作系統(tǒng)定位。DOS中程序的執(zhí)行過程中程序的執(zhí)行過程執(zhí)行執(zhí)行DOS用戶程序時用戶程序時,通常需要從鍵盤輸入程序名通常需要從鍵盤輸入程序名( (即命令即命令) )。COMMAND.COM是是DOS的管理程序的管理程序,它首先判斷鍵盤輸入命令是內(nèi)部它首先判斷鍵盤輸入命令是內(nèi)部( (命令對應的程序命令對應的程序已駐留在內(nèi)存已駐留在內(nèi)存) )還是外部命令還是外部命令,若是后者若是后者,則檢查可則檢查可用存儲區(qū)的最低和最高地址用存儲區(qū)的最低和最高地址,然后在可用存儲區(qū)的

14、然后在可用存儲區(qū)的低端開始建立低端開始建立100H個單元的個單元的PSP區(qū)區(qū),在接下來的地在接下來的地址裝入程序本身址裝入程序本身,之后轉(zhuǎn)向程序入口地址開始執(zhí)行之后轉(zhuǎn)向程序入口地址開始執(zhí)行該程序該程序。返回返回本章參考文獻本章參考文獻有關有關.COM與與.EXE文件格式文件格式、程序前綴程序前綴PSP,DOS( (Disk Operation System) )操作系統(tǒng)中程序的操作系統(tǒng)中程序的執(zhí)行過程等內(nèi)容可參考執(zhí)行過程等內(nèi)容可參考:1.Steven Armbrust、Ted Forgeron著著,舒志勇舒志勇、劉劉東源譯東源譯. .DOS/ /BIOS使用詳解使用詳解. .電子工業(yè)出版電子工

15、業(yè)出版社社,19892.陳文欽著陳文欽著. .BIOS研發(fā)技術剖析研發(fā)技術剖析. .清華大學出版清華大學出版社社,20013.潘名蓮潘名蓮,馬爭馬爭,惠林惠林. .微計算機原理微計算機原理. .電子工業(yè)出版電子工業(yè)出版社社。P184P186返回返回匯編語言程序格式匯編語言程序格式1. 指令性語句指令性語句與機器指令一一對應與機器指令一一對應格式格式:標號標號: 指令助記符指令助記符 操作數(shù)操作數(shù), ,操作數(shù)操作數(shù) ;注釋注釋3. 宏指令語句宏指令語句 宏指令語句由標號、宏指令和注釋組成宏指令語句由標號、宏指令和注釋組成。宏指令是由宏指令是由編 程 者 按 一 定 的 規(guī) 則 來 定 義 的 一

16、 種 較編 程 者 按 一 定 的 規(guī) 則 來 定 義 的 一 種 較 “ 宏宏大大”( (MACRO) )的指令的指令。一條宏指令可包括多條指令一條宏指令可包括多條指令或偽指令語句或偽指令語句。使源程序書寫精煉、可讀性好使源程序書寫精煉、可讀性好。2. 偽指令語句偽指令語句不產(chǎn)生機器碼不產(chǎn)生機器碼,為匯編程序和連接程為匯編程序和連接程序提供某些必要的控制的管理性語句序提供某些必要的控制的管理性語句。完成數(shù)據(jù)定義完成數(shù)據(jù)定義、存儲器分配、段定義、段設定、指示程序結(jié)束等功能存儲器分配、段定義、段設定、指示程序結(jié)束等功能。格式格式:名字名字 偽指令指示符偽指令指示符 操作數(shù)操作數(shù), ,操作數(shù)操作數(shù)

17、 ;注釋注釋語句中的操作數(shù)語句中的操作數(shù)匯編語言中使用的操作數(shù)匯編語言中使用的操作數(shù),可以是可以是常數(shù)常數(shù)、寄存器寄存器、存存儲器儲器( (變量變量或或標號標號) )或表達式或表達式。( (1) )常數(shù)常數(shù)固定值固定值,無屬性無屬性。( (2) )變量變量通常指存放在存儲單元中的值通常指存放在存儲單元中的值,可修改可修改。變量具有三個屬性變量具有三個屬性: 段屬性段屬性、偏移屬性偏移屬性、類型屬性類型屬性v段屬性段屬性( (SEGMENT) ) 指變量所在段的段基址指變量所在段的段基址,它必須它必須在一個段寄存器中在一個段寄存器中。v偏移屬性偏移屬性( (OFFSET) ) 指變量所在地址與所

18、在段的段指變量所在地址與所在段的段首地址之間的地址偏移字節(jié)數(shù)首地址之間的地址偏移字節(jié)數(shù)。v類型屬性類型屬性( (TYPE) ) 指變量中每個元素所包含的字指變量中每個元素所包含的字節(jié)數(shù)節(jié)數(shù),類型包括字節(jié)變量類型包括字節(jié)變量( (BYTE) )、字變量字變量( (WORD) )及及 雙字變量雙字變量( (DWORD) )等等。4. 語句中操作數(shù)語句中操作數(shù)標號具有三個屬性標號具有三個屬性: 段屬性、偏移屬性、類型段屬性、偏移屬性、類型v段屬性段屬性( (SEGMENT) ) 標號所在段的段基址標號所在段的段基址。標號標號的段是它所出現(xiàn)的那個代碼段的段是它所出現(xiàn)的那個代碼段,所以由所以由CS指示指

19、示。v偏移屬性偏移屬性( (OFFSET) ) 標號所在地址與所在段的段標號所在地址與所在段的段首址之間的偏移地址字節(jié)數(shù)首址之間的偏移地址字節(jié)數(shù)。( (3) )標號標號指令性語句所在地址的符號表示指令性語句所在地址的符號表示。v類型類型( (TYPE) ) 標號的類型屬性指在轉(zhuǎn)移指令中標號標號的類型屬性指在轉(zhuǎn)移指令中標號可轉(zhuǎn)移的距離可轉(zhuǎn)移的距離,也稱距離屬性也稱距離屬性。類型類型NEAR,只能實只能實現(xiàn)本代碼段內(nèi)轉(zhuǎn)移或調(diào)用現(xiàn)本代碼段內(nèi)轉(zhuǎn)移或調(diào)用; 類型類型FAR,可以作為其它可以作為其它代碼段中的目標地址代碼段中的目標地址,實現(xiàn)段間轉(zhuǎn)移或調(diào)用實現(xiàn)段間轉(zhuǎn)移或調(diào)用。( (4) )表達式表達式由常數(shù)

20、、寄存器、變量、標號與運由常數(shù)、寄存器、變量、標號與運算符組合而成的運算式算符組合而成的運算式。( (6) )保留字保留字匯編語言具有特殊含義的符號匯編語言具有特殊含義的符號,只只能作為固定的用途能作為固定的用途,不能作為標識符使用不能作為標識符使用。凡是凡是8086的的指令、偽指令、寄存器名指令、偽指令、寄存器名等都是保等都是保留字留字。因此因此,標號標號、變量名變量名、段名段名、過程名過程名、符號符號名等都不能使用保留字名等都不能使用保留字。( (5) )標識符標識符變量與標識符也稱為標識符變量與標識符也稱為標識符。程序塊定義偽指令程序塊定義偽指令一、程序分段定義偽指令一、程序分段定義偽指

21、令1. 段定義偽指令段定義偽指令SEGMENT/ /ENDS功能功能: 將一個邏輯段定義成一個整體將一個邏輯段定義成一個整體。( (1) )定位類型定位類型用來規(guī)定對段起始邊界的要求用來規(guī)定對段起始邊界的要求,可以有可以有4種選擇種選擇:PAGE、PARA、WORD、BYTE若定位類型缺省若定位類型缺省,則缺省值為則缺省值為PARA。段名段名 SEGMENT 定位類型定位類型 組合類型組合類型 類別類別 ; 段內(nèi)語句序列段內(nèi)語句序列段名段名 ENDS組合類型組合類型和和類別類別( (2) )組合類型組合類型為連接程序提供本段與其它段的關為連接程序提供本段與其它段的關系信息系信息。6種類型如下種

22、類型如下:NONE、PUBLIC、STACK、COMMON、AT表表達式達式、MEMORY。 NEXT( (3) )類別類別編程者給各段賦予的一種名字信息編程者給各段賦予的一種名字信息。連接程序?qū)㈩悇e名相同的段組成一個段組連接程序?qū)㈩悇e名相同的段組成一個段組,用它們用它們共同的類別名作為這個段組的名字共同的類別名作為這個段組的名字。類別必須用單類別必須用單撇號撇起來撇號撇起來。通常使用的類別有通常使用的類別有 STACK 、 CODE 、 DATA 等等等等。定位類型定位類型用來規(guī)定對段起始邊界的要求用來規(guī)定對段起始邊界的要求,可以有可以有4種選擇種選擇:PAGE 段起始地址的段起始地址的最低

23、最低8 8位位必須為必須為0,即從一頁即從一頁(PAGE)的起點開始的起點開始。 起始地址起始地址00000000返回返回PARA 段起始地址的段起始地址的最低最低4 4位位必須為必須為0,即從某一節(jié)即從某一節(jié)(PARAGRAPH)的邊界開始的邊界開始。起始地址起始地址0000 WORD 段始址的段始址的最低位最低位必須為必須為0,從從偶地址偶地址開始開始。起始地址起始地址0BYTE 段起始地址為任意值段起始地址為任意值,可從可從任何字節(jié)任何字節(jié)開始開始。起始地址起始地址若定位類型缺省若定位類型缺省,則缺省值為則缺省值為PARA。組合類型組合類型v NONE 表示本段與其它段邏輯上不發(fā)生關系表

24、示本段與其它段邏輯上不發(fā)生關系,每段都有自每段都有自己的基地址己的基地址。這是缺省的組合類型這是缺省的組合類型。v PUBLIC 連接程序首先將本段與其它同名同類別的段相鄰連接程序首先將本段與其它同名同類別的段相鄰地連接在一起地連接在一起,然后為所有這些段指定一個共同的段基址然后為所有這些段指定一個共同的段基址。v STACK 與與PUBLIC同樣處理同樣處理, ,但此段作為堆棧段但此段作為堆棧段。當多個當多個程序模塊連接在一起時程序模塊連接在一起時,各模塊中至少有一個模塊內(nèi)有一個各模塊中至少有一個模塊內(nèi)有一個STACK段段。返回返回v COMMON 表示該段與其他模塊中被說明成表示該段與其他

25、模塊中被說明成COMMON的的同名同類別段共用一個段起始地址同名同類別段共用一個段起始地址, ,且相互覆蓋且相互覆蓋。組合后組合后, ,段的長度是各模塊同名段中最大的段的長度是各模塊同名段中最大的COMMON段長度段長度。 v AT 表達式表達式 表示該段應按絕對地址定位表示該段應按絕對地址定位, ,段基址為數(shù)值表段基址為數(shù)值表達式的值達式的值, ,位移量為位移量為0。但此方式不能用來指定代碼段但此方式不能用來指定代碼段。v MEMORY 連接程序?qū)驯径味ㄎ辉诒贿B接在一起的其它連接程序?qū)驯径味ㄎ辉诒贿B接在一起的其它所有段之上所有段之上。若有多個若有多個MEMORY段段, ,匯編程序認為所遇

26、到匯編程序認為所遇到的第一個為的第一個為MEMORY, ,其余為其余為COMMON。2. 段指示偽指令段指示偽指令ASSUMEvASSUME偽指令用來指示程序中的段與偽指令用來指示程序中的段與CPU中段寄中段寄存器之間的關系存器之間的關系。格式格式:vASSUME 段寄存器名段寄存器名:段名段名 ,段寄存器名段寄存器名:段名段名,v段名為程序中已定義過的任何段名或組名段名為程序中已定義過的任何段名或組名,也可以也可以是表達式是表達式“SEG 變量變量”或或“SEG 標號標號”,或者關或者關鍵字鍵字NOTHING。vNOTHING表示以前為段寄存器所作的指示已被取表示以前為段寄存器所作的指示已被

27、取消消,以后程序運行時不再需要該寄存器以后程序運行時不再需要該寄存器,除非再用除非再用ASSUME給其重新定義給其重新定義。v段寄存器必須正確賦值才能指向指定的段段寄存器必須正確賦值才能指向指定的段。注意注意:使用使用ASSUME偽指令偽指令,僅僅僅僅告訴告訴匯編程序哪個匯編程序哪個段寄存器設定指向哪一個段段寄存器設定指向哪一個段,并沒有給各段寄存器并沒有給各段寄存器裝入實際的值裝入實際的值。而而段地址的真正裝入還必須通過給段地址的真正裝入還必須通過給段寄存器賦值的執(zhí)行性指令來完成段寄存器賦值的執(zhí)行性指令來完成。所以在程序的所以在程序的操作部分操作部分,要用指令來完成給段寄存器賦初值要用指令來

28、完成給段寄存器賦初值。例例如如: CODE SEGMENTASSUME CS:CODE,DS:DATA,ES:NOTHING,SS:STOCKMOV AX,DATAMOV DS,AX 一般地一般地,由由ASSUME指示過的段寄存器都應賦值指示過的段寄存器都應賦值。但但CS寄存器是一個例外寄存器是一個例外,CS值是由值是由DOS把把 .EXE模模塊裝入內(nèi)存時自動設定的塊裝入內(nèi)存時自動設定的,而不能用上述方式裝入而不能用上述方式裝入段地址值段地址值,但但ASSUME偽指令中一定要給出偽指令中一定要給出CS段段寄存器對應的正確寄存器對應的正確段名段名ASSUME偽指令所在偽指令所在段的段名段的段名。

29、對對堆棧段若不指示不賦值堆棧段若不指示不賦值,此時利用的此時利用的是系統(tǒng)設置的堆棧是系統(tǒng)設置的堆棧。3. 分組偽指令分組偽指令GROUPGROUP是群或組的意思是群或組的意思,它用來把程序塊中若干它用來把程序塊中若干不同名的段集合成一個組不同名的段集合成一個組,并賦予一個組名并賦予一個組名,使它們使它們都裝入一個物理段中都裝入一個物理段中( (64KB) )。這樣這樣,組內(nèi)各段間組內(nèi)各段間的轉(zhuǎn)移都可以看作段內(nèi)轉(zhuǎn)移的轉(zhuǎn)移都可以看作段內(nèi)轉(zhuǎn)移。GROUP偽指令的格式如下偽指令的格式如下: 組名組名 GROUP 段名段名1, ,段名段名2, , 其中段名也可為表達式其中段名也可為表達式: “SEG 變

30、量名變量名”或或“SEG 標號標號”。4. ORG和和當前位置計數(shù)器當前位置計數(shù)器$匯編程序匯編源程序時匯編程序匯編源程序時,為遇到的每一個新定義的為遇到的每一個新定義的段設置一個初值為段設置一個初值為0的位置計數(shù)器的位置計數(shù)器。對該段進行匯對該段進行匯編時編時,對需要占用存儲器的語句對需要占用存儲器的語句( (包括偽指令及指令包括偽指令及指令性語句性語句) )分配存儲單元分配存儲單元,所有被占用的存儲單元數(shù)累所有被占用的存儲單元數(shù)累加到一起作為位置計數(shù)器的值加到一起作為位置計數(shù)器的值?!?”反映位置計數(shù)反映位置計數(shù)器的當前值器的當前值,它的值表示匯編程序所能分配的下一它的值表示匯編程序所能分

31、配的下一個存儲單元的偏移地址個存儲單元的偏移地址,$可出現(xiàn)在表達式中可出現(xiàn)在表達式中。格式如下格式如下: ORG 表達式表達式例例:STACK SEGMENT ST1 DW 100 DUP( (?) )STACKPOINT DW $ ;( (STACKPOINT) )=0C8HSTACK ENDS表達式的值應該是非負的整數(shù)表達式的值應該是非負的整數(shù),而且要保證計數(shù)器而且要保證計數(shù)器指針定位在指針定位在065535之間之間。下面是使用下面是使用ORG偽指令語句的例子偽指令語句的例子:CSEG SEGMENT ORG 2 ;目標代碼從目標代碼從0002H開始產(chǎn)生開始產(chǎn)生 ORG $+3 ;跳過三個

32、字節(jié)跳過三個字節(jié)后生成目標代碼后生成目標代碼 CSEG ENDS 其中其中,$ 表示位置計數(shù)器的當前值表示位置計數(shù)器的當前值,它可以在表達式它可以在表達式中使用中使用,它的值是程序下一個所能分配的存儲器單它的值是程序下一個所能分配的存儲器單元的偏移地址元的偏移地址。5. 程序結(jié)束偽指令程序結(jié)束偽指令END格式格式: END 標號名標號名功能功能: 標記匯編源程序結(jié)束標記匯編源程序結(jié)束。END是偽指令助記符是偽指令助記符,不可缺省不可缺省,放在源程序的最放在源程序的最后一行后一行,每個模塊只有一個每個模塊只有一個END。匯編程序到匯編程序到END語句停止匯編語句停止匯編。標號名是該程序中第一條可

33、執(zhí)行語句的標號名標號名是該程序中第一條可執(zhí)行語句的標號名,可可以以缺省缺省,若一個程序包含多個模塊若一個程序包含多個模塊,END后面帶的后面帶的標號為主程序模塊中的標號名稱標號為主程序模塊中的標號名稱。二、過程定義偽指令二、過程定義偽指令PROC/ /ENDP在程序設計中在程序設計中,往往將一些重復出現(xiàn)的語句組定義往往將一些重復出現(xiàn)的語句組定義為子程序為子程序。子程序又稱為過程子程序又稱為過程,可由可由CALL指令來指令來調(diào)用調(diào)用。過程定義的格式為過程定義的格式為: 注意事項注意事項: 過程名是由用戶設定的標識符過程名是由用戶設定的標識符,過程名在程序中過程名在程序中可以作為標號使用可以作為標

34、號使用。過程名過程名 PROC NEAR/ /FAR ;語句序列語句序列 RET n ;語句序列語句序列 過程名過程名 ENDP PROC和和ENDP必須必須成對成對出現(xiàn)出現(xiàn)。 每一過程中至少得有一個每一過程中至少得有一個RET n語句語句,n可缺省可缺省, ,整個過程執(zhí)行的最后一條語句必須是整個過程執(zhí)行的最后一條語句必須是RET n。 過程的類型有過程的類型有NEAR和和FAR。缺省為缺省為NEAR類類型型。 過程可以過程可以“嵌套嵌套”使用使用,即過程又可以調(diào)用別即過程又可以調(diào)用別的過程的過程。 過程還可以過程還可以“遞歸遞歸”使用使用,即過程又可以調(diào)用即過程又可以調(diào)用過程本身過程本身。S

35、EGX SEGMENT SUB1 PROC FAR CALL SUB2 ;過程過程“嵌套嵌套” RETSUB1 ENDP PROC NEAR RET ENDP CALL FAR PTR SUB1 ;段內(nèi)調(diào)用但要用段間調(diào)用來實現(xiàn)段內(nèi)調(diào)用但要用段間調(diào)用來實現(xiàn) SEGX ENDS SEGY SEGMENT CALL FAR PTR SUB1 ;段間調(diào)用段間調(diào)用 SEGY ENDS 三、程序塊間通信偽指令三、程序塊間通信偽指令PUBLIC和和EXTRN匯編語言程序設計可采用多模塊結(jié)構(gòu)匯編語言程序設計可采用多模塊結(jié)構(gòu),在多模塊間在多模塊間相互訪問時相互訪問時,應在每一模塊內(nèi)交待清楚以下兩方面應在每一模塊

36、內(nèi)交待清楚以下兩方面信息信息: 本模塊內(nèi)定義的變量和標號本模塊內(nèi)定義的變量和標號( (包括過程名包括過程名) ),哪些哪些可 以 作 為 外 部 標 識 符 被 其 它 模 塊 訪 問可 以 作 為 外 部 標 識 符 被 其 它 模 塊 訪 問 ?這 是這 是PUBLIC的功能的功能。 本模塊將訪問哪些外部標識符本模塊將訪問哪些外部標識符?這是由這是由EXTRN提供的提供的。格式格式: PUBLIC 符號符號1, ,符號符號2, , EXTRN 符號符號1:類型類型, ,符號符號2:類型類型, , 其中符號可以是符號常數(shù)其中符號可以是符號常數(shù)、變量變量、標號或過程名標號或過程名。 在一個模塊

37、內(nèi)或者一個段內(nèi)由在一個模塊內(nèi)或者一個段內(nèi)由PUBLIC定義過的符定義過的符號號,可以在別的模塊或段內(nèi)直接引用可以在別的模塊或段內(nèi)直接引用; EXTRN說明本說明本模塊中使用的符號已在別的模塊或段內(nèi)定義過模塊中使用的符號已在別的模塊或段內(nèi)定義過。 類型可以是類型可以是: BYTE、WORD、DWORD; NEAR、FAR等等。當然當然,這里所有符號的類型必須和它們在其這里所有符號的類型必須和它們在其它模塊內(nèi)定義的類型保持一致它模塊內(nèi)定義的類型保持一致。分別匯編下面兩個程序分別匯編下面兩個程序、。 EXTRN RECEIVE:FAR SUBSEG SEGMENTCSEG SEGMENT RECEI

38、VE PROC FARSTART PROC FAR PUBLIC RECEIVE CALL RECEIVE RET RECEIVE ENDPSTART ENDP CSEG ENDS SUBSEG ENDS END END程序程序中無中無RECEIVE子程序子程序,由由EXTRN聲明來自外部聲明來自外部;程序程序聲明聲明RECEIVE此子程序可以共享此子程序可以共享。MASM中的表達式和運算符中的表達式和運算符1. 算術運算符算術運算符( (舉例舉例) )2. 邏輯運算符邏輯運算符3. 關系運算符關系運算符結(jié)果結(jié)果為為0FFFFH/ /0FFH或或0( (舉例舉例) )4. 數(shù)值返回運算符數(shù)值返

39、回運算符( (1) )SEG運算符運算符( (舉例舉例) )( (2) )OFFSET運算符運算符( (3) )TYPE運算符運算符求變量或標號的類型值求變量或標號的類型值( (4) )LENGTH運算符運算符確定某個變量所含的數(shù)據(jù)確定某個變量所含的數(shù)據(jù)元素的個數(shù)元素的個數(shù),由由DUP定義數(shù)據(jù)個數(shù)時才有效定義數(shù)據(jù)個數(shù)時才有效。( (5) )SIZE運算符運算符確定變量所含的字節(jié)存儲單元確定變量所含的字節(jié)存儲單元的總數(shù)的總數(shù),由由DUP定義數(shù)據(jù)個數(shù)時才有效定義數(shù)據(jù)個數(shù)時才有效。表達式和運算符表達式和運算符5. 屬性修改運算符屬性修改運算符( (1) )PTR運算符運算符; ( (2) )段超越前

40、綴段超越前綴運算符運算符;( (3) )SHORT運算符運算符;( (4) )THIS運算符運算符; ( (5) )HIGH和和LOW字節(jié)分離符字節(jié)分離符6. 其它運算符其它運算符7. 表達式由運算對象及運算符組成表達式由運算對象及運算符組成。匯編程序完成匯編程序完成 表達式的運算表達式的運算,運算結(jié)果作為語句的操作數(shù)使用運算結(jié)果作為語句的操作數(shù)使用。NEXT算術運算符算術運算符算術運算符完成算術運算算術運算符完成算術運算,它包括它包括+(加法加法)、( (減減法法) )、* *( (乘法乘法) )、/(/(除除) )、MOD( (求余求余) )以及以及SHL( (左左移移,左移左移1位相當于

41、乘位相當于乘2) )和和SHR( (右移右移,右移右移1位相當位相當于除于除2) )共七種運算共七種運算。 返回返回以上七種運算可直接對數(shù)字進行運算以上七種運算可直接對數(shù)字進行運算,但但對地址的對地址的運算運算,只用加法和減法才具有實際意義只用加法和減法才具有實際意義,并且要求并且要求進進行加行加、減的兩個地址應在同一段內(nèi)減的兩個地址應在同一段內(nèi),否則運算結(jié)果否則運算結(jié)果便不是一個有效地址了便不是一個有效地址了,對地址乘是沒有意義的對地址乘是沒有意義的。 通常是在標號上加通常是在標號上加/ /減某一個數(shù)字量減某一個數(shù)字量,例如例如DA1+2、K23各表示一個存儲單元的地址各表示一個存儲單元的地

42、址。應用舉例應用舉例DATA SEGMENTBUFFERDB 2,3,5,7,4DATA ENDSCODE SEGMENT MOV AL,BUFFER+3 ;將將BUFFER字節(jié)單元以后的第三單元的內(nèi)容送字節(jié)單元以后的第三單元的內(nèi)容送ALMOV AH,3* *25 MOD 3 ;將表達式將表達式3* *25MOD 3的值送的值送ALMOV BH,010lB SHL 4 ;將二進制數(shù)將二進制數(shù)0101B左移四次后送左移四次后送BHMOV BL,01010000B SHR 4 ;將二進制數(shù)將二進制數(shù)01010000B右移四次后送右移四次后送BL CODE ENDS返回返回邏輯運算符邏輯運算符邏輯運

43、算符對其操作數(shù)進行按位操作邏輯運算符對其操作數(shù)進行按位操作。邏輯運算符邏輯運算符有有:AND( (與與) )、OR( (或或) )、XOR( (異或異或) )和和NOT( (非非) ),其其中中NOT是單操作數(shù)其它是雙操作數(shù)運算符是單操作數(shù)其它是雙操作數(shù)運算符。 MOV AX, ,0FF00H AND 10AEH ;將兩個數(shù)相將兩個數(shù)相“與與”的結(jié)果送的結(jié)果送AX。 匯編成匯編成: MOV AX, ,1000H AND CX, ,00FFH AND 10AEH ;將表達式的值將表達式的值算 出 后算 出 后 , 再 和再 和 C X 相相 “ 與與 ” 。 匯 編 成匯 編 成 : A N D

44、 CX, ,00AEH返回返回從以上兩例可看出從以上兩例可看出:邏輯運算是在匯編時完成的邏輯運算是在匯編時完成的,表達式的值由匯編程序表達式的值由匯編程序確定確定,不影響標志位不影響標志位,而邏輯指令是在程序執(zhí)行時完成而邏輯指令是在程序執(zhí)行時完成邏輯操作的邏輯操作的。0FF00H和和00FFH與一個與一個16位數(shù)相位數(shù)相“與與”,可以分別可以分別提取其高提取其高8位和低位和低8位位,這種技術通常稱為這種技術通常稱為“屏蔽屏蔽”。關系運算符關系運算符關系運算符有關系運算符有EQ( (相等相等) )、NE( (不相等不相等) )、LT( (小小于于) )、GT( (大于大于) )、LE( (小于或

45、等于小于或等于) )、GE( (大于或大于或等于等于) )共六種共六種。 返回返回關系運算都是雙操作數(shù)運算關系運算都是雙操作數(shù)運算,它的運算對象只能是它的運算對象只能是兩個性質(zhì)相同兩個性質(zhì)相同的項目的項目。對兩個性質(zhì)不同的項目進對兩個性質(zhì)不同的項目進行關系運算是無意義的行關系運算是無意義的。 關系運算的結(jié)果只可能是兩種情況關系運算的結(jié)果只可能是兩種情況: 即關系成立即關系成立或不成立。當關系成立時或不成立。當關系成立時,運算結(jié)果為運算結(jié)果為0FFFFH或或0FFH, ,否則為否則為0。 MOV AX, ,2 LT 5 匯編匯編成成: MOV AX,0FFFFH ;2小于小于5關系成立關系成立

46、MOV AX, ,2 GT 5 匯編成匯編成: MOV AX,0 ;2大于大于5關系不成立關系不成立 應用舉例應用舉例返回返回AND AX,(,(NUMB LT 5) ) AND 30) ) OR (NUMB GE 5) ) AND 20) ) 當當NUMB5時時,匯編成匯編成 AND AX, ,30 NUMB5時時,匯編成匯編成 AND AX, ,20 AND出現(xiàn)在操作符位置是助記符出現(xiàn)在操作符位置是助記符,出現(xiàn)在操作數(shù)位出現(xiàn)在操作數(shù)位置是偽指令置是偽指令。SEG運算符運算符數(shù)值返回運算符是對存儲器地址進行運算的數(shù)值返回運算符是對存儲器地址進行運算的。它可它可以將存儲器地址的三個重要屬性以將

47、存儲器地址的三個重要屬性,即即段段、偏移量偏移量和和類型類型分離出來分離出來。 ( (1) ) SEG格式格式: SEG 變量名變量名或或標號名標號名SEG用來求取一個變量或標號的段基址用來求取一個變量或標號的段基址。返回返回例例 DATA是從存儲器實際地址是從存儲器實際地址02000H開始的一個開始的一個數(shù)據(jù)段如下數(shù)據(jù)段如下:DATA SEGMENTVAR1 DB 20, ,30VAR2 DW 2000H, ,3000HVAR3 DD 22002200H, ,33003300HDATA ENDS MOV BX, ,SEG VAR1 匯編成匯編成: MOV BX, ,0200H MOV CX,

48、 ,SEG VAR2 匯編成匯編成: MOV CX, ,0200H MOV DX, ,SEG VAR3 匯編成匯編成: MOV DX, ,0200H返回返回應用舉例應用舉例OFFSET運算符運算符返回返回 ( (2) ) OFFSET 格式格式:OFFSET 變量名變量名或或標號名標號名 OFFSET運算符返回一個變量或標號的段內(nèi)偏運算符返回一個變量或標號的段內(nèi)偏移地址值移地址值,是程序設計中常用的運算符是程序設計中常用的運算符。舉例舉例例例對上例中定義的數(shù)據(jù)段對上例中定義的數(shù)據(jù)段,用用OFFSET可以求出可以求出VAR2的段內(nèi)偏移地址的段內(nèi)偏移地址。MOV BX,OFFSET VAR2應用舉

49、例應用舉例DATA SEGMENTVAR1 DB 20,30VAR2 DW 2000H,3000HVAR3 DD 22002200H,33003300HDATA ENDS返回返回匯編成匯編成: MOV BX,2 ;變量變量VAR2的偏移量為的偏移量為2匯編程序?qū)⒆兞康钠频刂匪偷絽R編程序?qū)⒆兞康钠频刂匪偷紹X中中,相當于指令相當于指令:LEA BX,VAR2( (3) ) TYPE格式格式: TYPE 變量變量或或標號標號TYPE運算符可加在變量或標號的前面運算符可加在變量或標號的前面,所求出的是這所求出的是這些存儲器操作數(shù)的類型值些存儲器操作數(shù)的類型值。 TYPE加在變量前面返回的是這個變

50、量的字節(jié)數(shù)加在變量前面返回的是這個變量的字節(jié)數(shù)。TYPE加在標號前面加在標號前面,返回該標號的屬性是返回該標號的屬性是-1( (NEAR) )或是或是-2( (FAR) )。TYPE運算符運算符字節(jié)變量字節(jié)變量( (DB定義定義) )1字型變量字型變量( (DW定義定義) )2雙字變量雙字變量( (DD定義定義) )4四字變量四字變量( (DQ定義定義)8十個字節(jié)十個字節(jié)( (DT定義定義) )10NEAR標號標號1FAR標號標號2返回返回舉例舉例應用舉例應用舉例DATA SEGMENTVAR1 DB 20,30VAR2 DW 2000H,3000HVAR3 DD 22002200H,3300

51、3300HDATA ENDS對于上例中定義的數(shù)據(jù)段對于上例中定義的數(shù)據(jù)段, ,則則:TYPE VAR11TYPE VAR22TYPE VAR34返回返回MOV AX, ,TYPE VAR1 ;匯編成匯編成 MOV AX, ,1MOV BX, ,TYPE VAR2 ;匯編成匯編成 MOV BX, ,2MOV CL, ,TYPE VAR3 ;匯編成匯編成 MOV CL, ,4( (4) ) LENGTHLENGTH運算符確定返回其后的變量所含的運算符確定返回其后的變量所含的數(shù)據(jù)元素的個數(shù)數(shù)據(jù)元素的個數(shù), ,即以變量類型即以變量類型( (字節(jié)字節(jié)、字或字或雙字雙字) )為單位的數(shù)據(jù)存儲單元的個數(shù)為單

52、位的數(shù)據(jù)存儲單元的個數(shù)。格式為格式為: LENGTH 變量變量 LENGTH的取值的取值,根據(jù)定義變量時根據(jù)定義變量時,數(shù)據(jù)定義數(shù)據(jù)定義偽指令助記符后面第一個表達式的形式來確偽指令助記符后面第一個表達式的形式來確定定。 如果助記符后面的第一個表達式為重復子句如果助記符后面的第一個表達式為重復子句“n DUP( (簡單表達式簡單表達式) )”,則取值為則取值為n,如果如果是其它形式表達式是其它形式表達式,則返回的結(jié)果都是則返回的結(jié)果都是1。返回返回舉例舉例LENGTH運算符運算符DATASEGMENTN1 DW 10 DUP( (0),),2367H, ,3 DUP( (1) )N2 DB BA

53、SIC , ,8 DUP(0)N3 DW 20, ,5 DUP(2)DATAENDSCODESEGMENTMOV AL,LENGTH N1 ;10ALMOV BL,LENGTH N2 ;1 BLMOV CL,LENGTH N3 ;1 CLCODE ENDS應用舉例應用舉例返回返回( (5) ) SIZESIZE確定返回其后的變量所含的字節(jié)存儲單元的總確定返回其后的變量所含的字節(jié)存儲單元的總數(shù)數(shù)。格式為格式為:SIZE 運算符運算符返回返回舉例舉例SIZE 變量變量SIZE返回的值是返回的值是LENGTH返回的值與返回的值與TYPE返回的返回的值的乘積值的乘積,即即:SIZE 變量變量LENGT

54、H 變量變量 * * TYPE 變量變量應用舉例應用舉例DATASEGMENTN1 DW 10 DUP( (0),),2367H, ,3 DUP( (1) )N2 DB BASIC , ,8 DUP( (0) )N3 DW 20, ,5 DUP( (2) )DATAENDS對于上面定義的數(shù)據(jù)段對于上面定義的數(shù)據(jù)段, ,則則:SIZE N1LENGTH N1 * * TYPE N110 * * 220返回返回SIZE N21 * * 11SIZE N31 * * 22這種運算符為存儲器地址操作數(shù)臨時指定一新的屬這種運算符為存儲器地址操作數(shù)臨時指定一新的屬性性,而忽略當前的屬性而忽略當前的屬性,故

55、稱為故稱為屬性修改運算符屬性修改運算符。( (1) ) PTRPTR用來生成一個新的存儲器地址操作數(shù)用來生成一個新的存儲器地址操作數(shù),并不實際并不實際分配存儲器分配存儲器。其格式為其格式為: 返回返回舉例舉例PTR 運算符運算符 類型類型 PTR 存儲器地址表達式存儲器地址表達式PTR將它將它左邊左邊的類型指定給的類型指定給右邊右邊的地址表達式的地址表達式。新新的類型由的類型由PTR指定指定,以前的類型則由定義此存儲單元以前的類型則由定義此存儲單元時的偽指令時的偽指令( (DB、DW等等) )確定確定。 在在PTR表達式中出現(xiàn)的類型可以是表達式中出現(xiàn)的類型可以是BYTE、WORD、DWORD、

56、NEAR、FAR等等。VAR1 DW 2030H 此時此時,VAR1的當前類型為的當前類型為WORD。應用舉例應用舉例返回返回應用應用: 用用PTR建立新的變量建立新的變量VAR2和和VAR3VAR2 EQU BYTE PTR VAR1VAR3 EQU BYTE PTR VAR1+1VAR1與與VAR2為同一存儲單元為同一存儲單元,但但類型類型卻不同卻不同。 TYPE VAR12 ; VAR1是是字型字型的的 TYPE VAR21 ; VAR2是是字節(jié)型字節(jié)型的的段超越前綴段超越前綴運算符運算符(2)(2)段超越前綴段超越前綴格式格式: 段寄存器名段寄存器名:地址表達式地址表達式例如例如,MO

57、V AX,ES:BX+SI以上是常用的段超越的情況以上是常用的段超越的情況。本運算符還有兩種形本運算符還有兩種形式式:段名段名:地址表達式地址表達式組名組名:地址表達式地址表達式返回返回( (3) )SHORT本運算符用來修飾本運算符用來修飾JMP指令中轉(zhuǎn)移地址的屬性指令中轉(zhuǎn)移地址的屬性,指指出轉(zhuǎn)移地址是在下一條指令地址出轉(zhuǎn)移地址是在下一條指令地址的的128+127個個字節(jié)范圍之內(nèi)字節(jié)范圍之內(nèi)。格式格式: SHORT 標號標號 SHORT 運算符運算符返回返回例如例如:JMP SHORT TAG TAG: 則標號則標號TAG與與JMP指令的距離不能大于指令的距離不能大于127個字節(jié)個字節(jié)。(

58、(4) )THISTHIS運算符像運算符像PTR一樣一樣,可以用來建立一個特殊類可以用來建立一個特殊類型的存儲器地址操作數(shù)型的存儲器地址操作數(shù),而不實際為它分配新的存而不實際為它分配新的存儲單元儲單元。用用THIS建立的存儲器地址操作數(shù)的段和建立的存儲器地址操作數(shù)的段和偏移量部分與目前所能分配的下一個存儲單元的段偏移量部分與目前所能分配的下一個存儲單元的段和偏移量相同和偏移量相同,但類型由但類型由THIS指定指定。THIS 運算符運算符返回返回舉例舉例格式格式: THIS 類型類型凡是凡是在在PTR中可以出現(xiàn)的類型中可以出現(xiàn)的類型,在在THIS中也允許出中也允許出現(xiàn)現(xiàn)。應用應用: 提高訪問變量

59、的靈活性提高訪問變量的靈活性。VAR2 EQU THIS BYTEVAR1 DW 2030H 返回返回應用舉例應用舉例此時此時, ,VAR1和和VAR2的段基址和偏移量都相同的段基址和偏移量都相同, ,但它但它們的類型不同,即們的類型不同,即TYPE VAR12TYPE VAR21字節(jié)分離符字節(jié)分離符( (5) ) HIGH和和LOWHIGH和和LOW被稱為字節(jié)分離符被稱為字節(jié)分離符。它們將一個它們將一個16位位的數(shù)或表達式的高字節(jié)和低字節(jié)分離出來的數(shù)或表達式的高字節(jié)和低字節(jié)分離出來。返回返回例例 COUNT EQU 2030H ; COUNT為一個符號常為一個符號常數(shù)數(shù),它等值于它等值于20

60、30H。則則:MOV AH,HIGH COUNT MOV AL,LOW COUNT匯編成匯編成: MOV AH,20H MOV AL,30H其它運算符其它運算符有有( )( )、 、 、MASK和和WIDTH等等6種種。 ( (1) ) 圓括號圓括號( )( )圓括號用來改變運算符的優(yōu)先級別圓括號用來改變運算符的優(yōu)先級別,( )( )中的運算符具中的運算符具有最高優(yōu)先權(quán)有最高優(yōu)先權(quán)。 ( (2) ) 方括號方括號 方括號主要用來表示地址表達式或多重變量的下標值方括號主要用來表示地址表達式或多重變量的下標值。 用用 表示地址表達式表示地址表達式; 用用 來表示多重變量的下標值來表示多重變量的下標

溫馨提示

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

評論

0/150

提交評論