第三章匯編1of3_第1頁
第三章匯編1of3_第2頁
第三章匯編1of3_第3頁
第三章匯編1of3_第4頁
第三章匯編1of3_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 13.1概述概述 機器語言面向硬件,高級語言面向編程員。匯編語言是最接近機器語言的高級語言。用匯編語言編寫的程序稱匯編語言源程序。源程序要經過匯編、連接、加載成可執(zhí)行程序。任何可執(zhí)行程序可反匯編成匯編語言源程序匯編語言源程序匯編(MASM)機器碼LINK可執(zhí)行程序 21. 一個程序可用多個文件寫成2. 存儲器地址用一個名字替代且明確類型3.同一地址可具有不同類型且分別以不同名字區(qū)別4.能對給出的表達式進行計算5.具有宏功能。 3匯編語言源程序格式匯編語言源程序格式(實驗指示書實驗指示書P11)NAME MY_PROGRAM NAME MY_PROGRAM DATA SEGMENTDATA S

2、EGMENTBUFFER1 DB 0,1,2,3,4,5,6,7,8,9,10,11,12, 13,14,15BUFFER2 DB 10H DUP(0) MESS DB HAVE DONE,0DH,0AH,0DH,0AH,$ DATA ENDSDATA ENDSSTACK SEGMENT STACK SEGMENT STACKSTACK; ;自動安裝堆棧段自動安裝堆棧段 DB 100 DUP ( ? );堆棧深度堆棧深度100B100B STACK ENDSSTACK ENDS 邏輯數據段邏輯堆棧段 4CODE SEGMENTCODE SEGMENT ASSUME CSASSUME CS:CO

3、DECODE,DSDS:DATADATA, ESES:DATADATA,SSSS:STACKSTACKSTARTSTART: MOV AXMOV AX,DATADATA MOV DSMOV DS,AXAX; ;建立數據段建立數據段 MOV ESMOV ES,AXAX; ;數據段數據段, ,附加數據段重合附加數據段重合 LEA SILEA SI,BUFFER1;BUFFER1;源指針源指針 LEA DILEA DI,BUFFER2;BUFFER2;目標指針目標指針 MOV CXMOV CX,10H ;10H ;計數器計數器NEXTNEXT: MOV ALMOV AL,SISI ; ;取源數據取源

4、數據 MOV DIMOV DI,ALAL; ;存到目標存到目標邏輯代碼段 5 INC SI INC SI; ;修改源指針修改源指針 INC DIINC DI; ;修改目標指針修改目標指針 DEC CX ;DEC CX ;計數減計數減 1 1 JNZ NEXT ; JNZ NEXT ;重復傳重復傳1616字節(jié)字節(jié) LEA DXLEA DX,MESSMESS MOV AHMOV AH,9 9 INT 21HINT 21H MOV AHMOV AH,4CH4CH INT 21HINT 21HCODE ENDSCODE ENDSEND START END START ; ; 匯編結束,第一句執(zhí)行的語句

5、為匯編結束,第一句執(zhí)行的語句為 ; STARTSTART邏輯邏輯代碼段(續(xù)續(xù));顯示顯示提示信提示信息息;返回操返回操作系統作系統 6一、縱向分成一、縱向分成若干若干邏輯段邏輯段, ,段數不限段數不限邏輯段邏輯段 組裝成可執(zhí)行程序的物理段(組裝成可執(zhí)行程序的物理段(4 4個)個)二、橫向分四個域:二、橫向分四個域:名字名字 操作符操作符 操作數操作數 ;注釋;注釋(一)名字名字由字母、數字等組成由字母、數字等組成( (但不能以數字開頭但不能以數字開頭) )。1. 例如例如 段名、過程名、模塊名、段名、過程名、模塊名、 變量名、標號名等變量名、標號名等名字經常表示名字經常表示符號地址符號地址,主

6、要是主要是變量、標號變量、標號 7定義在定義在數據段數據段(或附加數據段)的名字。(或附加數據段)的名字。 有兩方面屬性:有兩方面屬性:地址地址 (段基址和偏移地址)(段基址和偏移地址)內容內容類型類型 (字節(jié)(字節(jié)1 1/字字2 2/雙字雙字4 4)( (運算符運算符TYPETYPE) )。在在匯編匯編操作時對變量操作時對變量引用地址,引用地址,在在執(zhí)行執(zhí)行指令時對變量指令時對變量引用內容。引用內容。變量變量一般一般都按定義的類型引用。都按定義的類型引用。 8 標號:(程序標號)標號:(程序標號)定義在程序段(加冒號:)的名字。定義在程序段(加冒號:)的名字。代表一條指令(首字節(jié))的地址。代

7、表一條指令(首字節(jié))的地址。有兩方面屬性:有兩方面屬性:地址屬性(段基址和偏移地址)。地址屬性(段基址和偏移地址)。類型屬性(遠類型屬性(遠2/近近1)。)。 標號在程序中一般可理解成地址。標號在程序中一般可理解成地址。和標號類似的還有和標號類似的還有過程名:過程名:過程名過程名代表一個完整子程序的第一條可執(zhí)代表一個完整子程序的第一條可執(zhí)行指令的地址(入口)。行指令的地址(入口)。 91. 指令助記符:指令助記符:在匯編時變成指令的操作碼在匯編時變成指令的操作碼在執(zhí)行程序時完成在執(zhí)行程序時完成 ( 二)操作符(必有)二)操作符(必有)由指令助記符等構成的操作和操作碼一一對由指令助記符等構成的操

8、作和操作碼一一對應應2. 偽指令(偽操作):偽指令(偽操作):指示性操作指示性操作 指示指示MASM和和LINK程序工作程序工作在匯編在匯編和和連接連接過程中過程中完成完成偽指令的操作符本身偽指令的操作符本身無機器碼無機器碼對應對應 10宏指令宏指令本身不是本身不是CPU原有的指令,原有的指令,用戶提前將一段程序用戶提前將一段程序(多條指令、偽指令多條指令、偽指令)定定義義成一條宏指令成一條宏指令在源程序中將它當一般指令一樣在源程序中將它當一般指令一樣調用,調用,在匯編時在匯編時展開展開成成 原定義的各條指令的原定義的各條指令的機器碼機器碼。執(zhí)行程序時逐執(zhí)行程序時逐條指令條指令完成完成 。 1

9、1基本操作數,基本操作數,或基本操作數再加上或基本操作數再加上運算符運算符構成的構成的表達式表達式。0個、個、1個或多個,用逗號分隔。個或多個,用逗號分隔。用分號引出的說明語句,不被匯編處理。用分號引出的說明語句,不被匯編處理。建議建議開始不要用漢字開始不要用漢字寫注釋,以免輸入了漢寫注釋,以免輸入了漢字的標點,匯編時出錯。字的標點,匯編時出錯。(四)注釋(四)注釋 121. 常數:允許用多種不同數制輸入,但匯編后都要變成二進制: 0FFH 1111 1111B 0AH 0000 1010B輸入多位BCD數需裝扮成裝扮成 二進制或十六進制20 0001 0100B= 14H20H 0010 0

10、000B 后者按BCD理解是十進制的20。 字符(包括串)匯編成其 ASCII碼 A 41H匯編成 13 MOVSI, 0100H MOV DI, 0114H CLC; (CF) 0 MOV CL, 10 N1: MOVAL, SI MOVBL, 10SI ADC AL, BL DAA MOVDI, AL INCSI INCDI DECCL JNZN1 142. 寄存器:執(zhí)行指令時引用寄存器的內容例如: IN AL , 40H ADD AL , 3 ;AL內容加3偽指令和匯編運算不能引用寄存器的內容。例如: DT1 DB AL MOV BL, AL1都不行!因為偽指令在匯編時完成,匯編時某寄存

11、器的內容和用戶程序執(zhí)行到這一句時的內容是兩回事。 153. 標號:用于表示JMP / CALL / LOOP等的目標4. 變量:匯編時只能取地址(不能取內容)DATA SEGMENTDT1 DB 9,8DATA ENDS .CODE SEGMENT . MOV AL,DT1 ;匯編后是直接尋址;匯編后是直接尋址 MOV AL , DT1+1 ; 匯編時取地址匯編時取地址+1,即等于,即等于DT1下一個單元的地址下一個單元的地址標號和變量合稱存儲器操作數,有地址、內容兩方面的屬性:匯編時取地址;執(zhí)行指令時才能取內容 165. 運算表達式基本操作數再加上運算符 算術運算: + , - , * ,

12、/ , MOD , SHL , SHR 邏輯運算: AND , OR , XOR , NOT 關系運算: EQ , NE , LT , LE , GT , GE關系運算的結果:為假 = 0 為真 = -1(匯編中)最后以補碼賦給reg / mem ( FFH / FFFFH 等) 17 OFFSET 提取內存操作數的偏移地址 SEG 提取內存操作數的段基址 TYPE 提取內存操作數的類型 LENGTH 取用DUP定義的變量元素的個數 SIZE 取用DUP定義的變量所占字節(jié)數 18 LEA BX, BUFFER ;( LEA指令只有)立即尋址 MOV BX, BUFFER ; 直接尋址 執(zhí)行后

13、BX的內容不同 LEA BX, BUFFER MOV BX, OFFSET BUFFER ; 立即尋址 執(zhí)行后 BX的內容相同 19 PTR 指定臨時類型(僅當前語句有效)例:DT1 DB 0FFH,3H INC DT1INC WORD PTR DT1 則 3FFH+1 = 400H 即,(DT1)=0, (DT1+1)=4但這一句之外DT1仍是字節(jié)類型;僅僅(DT1)=0,(DT1+1)不變不變 20ARWDW 1340H MOVAX , ARW ; AX=1340HMOVBL , ARB ; BL=40H可以反復用這兩個名字,以這兩種不同類型讀寫這一共同的內存區(qū)域ARBEQU THISBY

14、TE各種運算符的優(yōu)先級表P 127 表3.2; 不同的名字占用共同的內存兼有不同的類型 21偽操作符在匯編過程中完成,偽操作符在匯編過程中完成,本身無操作碼本身無操作碼1. 變量定義類變量定義類功能功能:定義定義類型:類型:DB、DW、DD 分配存儲器:確定所用存儲器分配存儲器:確定所用存儲器 賦予變量初值賦予變量初值 DATA DB 100, 0FFH 變量名字變量名字 偽操作符偽操作符 操作數(初值)操作數(初值) 22定義定義DB:定義字節(jié)類型變量:定義字節(jié)類型變量 DT1DT1DBDB1 1,7 7 DT2DT2DB ADFDB ADF一個變量內含多個字節(jié)的元素,一個變量內含多個字節(jié)的

15、元素,多字節(jié)順序排列地址連續(xù)。多字節(jié)順序排列地址連續(xù)。用途:定義字節(jié)類型數值。用途:定義字節(jié)類型數值。 定義字符串定義字符串(ASCII(ASCII碼)碼)變量名變量名3個元素個元素 01H 07H 41H 44H 46H DT1DT11 DT2DT21 上一個上一個 數據段數據段DT22 23一個變量內可以包含多個一個變量內可以包含多個相同類型相同類型的元素,的元素,元素的類型稱元素的類型稱TYPE 字節(jié)字節(jié)1、字、字2、雙字、雙字4.元素的個數稱元素的個數稱LENGTH變量的總字節(jié)數稱變量的總字節(jié)數稱SIZE SIZE LENGTH TYPE變量名始終指向第一個元素,變量名始終指向第一個元

16、素,變量名變量名1、2是偏移地址加,相加后還是地址,是偏移地址加,相加后還是地址,既不是元素內容加也不是元素下標的加。既不是元素內容加也不是元素下標的加。例如上頁中:例如上頁中:MOV AL , DT11 ; AL7,而不是,而不是2MOV AL , DT21 ; AL44H,而不是,而不是42H 241.定義單字節(jié)類型數值 源程序中可寫不同進制,匯編后全變?yōu)槎M制, 多個數值用逗號分隔,順序存放2.定義字符串 尤其是提示信息 25匯編時只能取存儲器操作數存儲器操作數地址,匯編運算中對存儲器操作數存儲器操作數的運算也是地址運算,運算結果一般還是地址。匯編時不能取存儲器操作數存儲器操作數內容,執(zhí)

17、行指令時才能取其內容。DT1 DB 9,8MOV AL , DT1+1 ;匯編時取地址+1,執(zhí)行指令時才能取其內容:AL8 26DWDW:定義:定義字字類型變量類型變量 以字為單位定義,在存儲以字為單位定義,在存儲器中低字節(jié)數放在地址器中低字節(jié)數放在地址較小單元、高字節(jié)數放較小單元、高字節(jié)數放在地址加在地址加1 1單元。單元。反序排反序排列!列!DT1 DW 5DT1 DW 5DT2 DW ABDT2 DW AB DW DT1 DW DT1DT1DT1的偏移地址是的偏移地址是00010001050042H41H0100DT1DT11DT2DT21上一個上一個地址地址DT2200010203040506DT23 271.定義雙字節(jié)類型數值 多個字順序排列、字內高低字節(jié)反序排列 立即數高位的零可以省略不寫2.定義定義存儲器操作數存儲器操作數的偏移地址的

溫馨提示

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

評論

0/150

提交評論