山大微機原理與應用課件04匯編語言程序設計_第1頁
山大微機原理與應用課件04匯編語言程序設計_第2頁
山大微機原理與應用課件04匯編語言程序設計_第3頁
山大微機原理與應用課件04匯編語言程序設計_第4頁
山大微機原理與應用課件04匯編語言程序設計_第5頁
已閱讀5頁,還剩65頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第4章匯編語言程序設計1主要內容匯編語言源程序的結構匯編語言語句格式偽指令功能調用匯編語言程序設計24.1 匯編語言源程序了解:匯編語言源程序的結構匯編語言語句類型及格式3一、匯編語言源程序結構41. 匯編語言源程序與匯編程序匯編語言源程序匯編程序5用助記符編寫匯編程序匯編語言源程序機器語言目標程序源程序的編譯程序2. 匯編語言程序設計與執(zhí)行過程輸入匯編語言源程序(EDIT)匯編(MASM)鏈接(LINK)調試(TD)6源文件 . ASM目標文件 .OBJ可執(zhí)行文件.EXE最終程序二、匯編語言語句類型及格式71. 匯編語言語句類型指令性語句指示性語句8CPU執(zhí)行的語句,能夠生成目標代碼CPU不

2、執(zhí)行,而由匯編程序執(zhí)行的語句,不生成目標代碼2. 匯編語言語句格式 指令性語句: 標號: 前綴 助記符 操作數(shù),操作數(shù) ;注釋9指令的符號地址標號后要有冒號操作碼注釋前加分號指示性語句格式名字 偽指令助記符 操作數(shù) ,操作數(shù), ;注釋10變量的符號地址其后不加冒號指示性語句中至少有一個操作數(shù)3. 標號、名字標號后有冒號,在指令性語句前;名字后不加冒號,在指示性語句前。英文字母、數(shù)字及專用字符組成,最大長度不能超過31個,且不能由數(shù)字打頭,不能用保留字(如寄存器名,指令助記符,偽指令)。 114. 操作數(shù)寄存器存儲器單元常量變量或標號表達式12常 量數(shù)字常量字符串常量例:A MOV AL,A例:

3、ABCD13匯編時被譯成對應的ASCII碼41H,42H,43H,44H用單引號引起的字符或字符串變 量代表內存中的數(shù)據(jù)區(qū),程序中視為存儲器操作數(shù)變量的屬性: 變量所在段的段地址 變量單元地址與段首地址之 間的位移量。 字節(jié)型、字型和雙字型14段 值偏移量類 型表達式算術運算邏輯運算*關系運算取值運算和屬性運算其它運算15算術運算和邏輯運算符算術運算符+,-,*,/,MOD邏輯運算符AND,OR,NOT,XOR例:MOV AL,8 AND 4MOV AL,8+4-116取值運算符17取得其后變量或標號的偏移地址取得其后變量或標號的段地址TYPE 取變量的類型LENGTH 取所定義存儲區(qū)的長度S

4、IZE 取所定義存儲區(qū)的字節(jié)數(shù)用于分析存儲器操作數(shù)的屬性獲取變量的屬性值OFFSETSEG取值運算符例 MOV AX,SEG DATA MOV DS,AX MOV BX,OFFSET DATA LEA BX,DATA18等價于取值運算符例若BUFFER存儲區(qū)用如下偽指令定義: BUFFER DW 200 DUP(0) 則: TYPE BUFFER 等于2 LENGTH BUFFER等于200 SIZE BUFFER等于40019屬性運算符20 用于指定其后存儲器操作數(shù)的類型 運算符:PTR 例: MOV BYTR PTRBX,12H其它運算符方括號: 段重設符 段寄存器名: 21方括號中內容為

5、操作數(shù)的偏移地址用于修改默認的段基地址4.2 偽指令掌握:偽指令的格式及實現(xiàn)的操作偽指令的應用22偽指令由匯編程序執(zhí)行的“指令系統(tǒng)”作用:定義變量;分配存儲區(qū)定義邏輯段;指示程序開始和結束;定義過程等。23常用偽指令數(shù)據(jù)定義偽指令符號定義偽指令段定義偽指令結束偽指令過程定義偽指令宏命令偽指令24一、數(shù)據(jù)定義偽指令用于定義數(shù)據(jù)區(qū)中變量的類型及大小格式: 變量名 偽指令助記符 操作數(shù), ;注釋25符號地址定義變量類型定義變量值及區(qū)域大小1. 數(shù)據(jù)定義偽指令助記符DB 定義的變量為字節(jié)型DW 定義的變量為字類型(雙字節(jié))DD 定義的變量為雙字型(4字節(jié))DQ 定義的變量為4字型(8字節(jié))DT 定義的

6、變量為10字節(jié)型26數(shù)據(jù)定義偽指令例DATA1 DB 11H,22H,33H,44HDATA2 DW 11H,22H,3344HDATA3 DD 11H*2,22H,33445566H27以上變量在內存中的存放形式數(shù)據(jù)定義偽指令例_變量在內存中的分布28DATA111223344DATA2224411000033DATA32200220000XX66554433數(shù)據(jù)定義偽指令的幾點說明偽指令的性質決定所定義變量的類型;定義字符串必須用DB偽指令例: DATA1 DB ABCD,66H29ABCD41H42H43H44H66H2. 重復操作符作用:為一個數(shù)據(jù)區(qū)的各單元設置相同的初值目的:常用于聲

7、明一個數(shù)據(jù)區(qū)格式: 變量名 偽指令助記符 n DUP(初值,)例: BW 20 DUP(0)M1 DB 10 DUP(0)303. “?”的作用表示隨機值,用于預留存儲空間MEM1 DB 34H,A,? DW 20 DUP(?)31預留40個字節(jié)單元,每單元為隨機值隨機數(shù)占1個字節(jié)單元數(shù)據(jù)定義偽指令例M1 DB How are you?M2 DW 3 DUP(11H),3344H DB 4 DUP(?)M3 DB 3 DUP(22H,11H,?)32變量在內存中的分區(qū)數(shù)據(jù)定義偽指令例33M1How aM211H11H00H44H33H r e you?11H00H00H隨機數(shù)M311H22H1

8、1H22H11H22HXXXXXXXXXXXXXX二、符號定義偽指令格式: 符號名 EQU表達式操作: 用符號名取代后邊的表達式,不可重新定義例: CONSTANTEQU100 VAR EQU 30H+99H34EQU說明的表達式不占用內存空間三、段定義偽指令說明邏輯段的起始和結束;說明不同程序模塊中同類邏輯段之間的聯(lián)系形 態(tài)35段定義偽指令格式段名 SEGMENT 定位類型 組合類型 類別 段名 ENDS36說明邏輯段的起點說明不同模塊中同名段的組和連接方式定位類型PARA: 段的起點從節(jié)邊界開始 (16個字節(jié)為1節(jié))BYTE: 段的起點從存儲器任何地址開始WORD:段的起點從偶地址開始PA

9、GE: 段的起點從頁邊界開始 (256個字節(jié)為1頁)37組合類型與其它模塊中的同名段在滿足定位類型的前提 下具有的組合方式:NONE: 不組合PUBLIC: 依次連接(順序由LINK程序確定)COMMON: 覆蓋連接STACK: 堆棧段的依次連接AT 表達式:段定義在表達式值為段基的節(jié)邊界MEMORY: 相應段在同名段的最高地址處。38類別不同模塊連接時將相同類別的段放在連續(xù)的內存區(qū)域中39段定義偽指令例DATA SEGMENT MEM1 DB 11H,22H MEM2 DB Hello! MEM3 DW 2 DUP(?)DATA ENDS40變量在邏輯段中的位置就代表了它的偏移地址表示變量所

10、在邏輯段的段地址表示變量的類型四、設定段寄存器偽指令說明所定義邏輯段的性質格式: ASSUME 段寄存器名:段名,段寄存器名:段名,41五、結束偽指令表示源程序結束格式: END 標號42匯編語言源程序結構數(shù)據(jù)段名 SEGMENT 數(shù)據(jù)段名 ENDS附加段名 SEGMENT 附加段名 ENDS43堆棧段名 SEGMENT 堆棧段名 ENDS代碼段名 SEGMENT 代碼段名 ENDS END 一個完整源程序結構例DSEG SEGMENT DATA1 DB 1,2, 3 DUP(?) DATA2 DW 1234HDSEG ENDSESEG SEGMENT DB 20 DUP(?)ESEG END

11、SSSEG SEGMENT STACK STACK DB 200 DUP(?)SSEG ENDS44一個完整源程序結構例45 CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG, ES:ESEG,SS:SSEG START:MOV AX,DSEG MOV DS,AX MOV AX,ESEG MOV ES,AX MOV AX,SSEG MOV SS,AX CSEG ENDS END START源程序 代碼段寄存器初始化將段地址送相應的段寄存器六、過程定義偽指令用于定義一個過程體格式: 過程名 PROC NEAR / FAR RET 過程名 ENDP46P157例過程入口的符號

12、地址過程定義及調用例定義延時子程序 DELAY PROC PUSH BX PUSH CX MOV BL,2NEXT: MOV CX,4167W10M: LOOP W10M DEC BL JNZ NEXT POP CX POP BX RETDELAY ENDP47調用延時子程序: CALL DELAY 七、宏命令偽指令 源程序中由匯編程序識別的具有獨 立功能的一段程序代碼格式: 宏命令名 MACRO ENDM48宏體宏八、其它偽指令 段內程序代碼或變量的起始偏移地址格式: ORG 表達式例: ORG 2000H49計算值為非負常數(shù)ORG其它偽指令NAME為目標程序設定一個名字格式: NAME 模

13、塊名TITLE為程序清單指定打印標題格式: TITLE 標題名504.3 功能調用DOS 功能調用 BIOS功能調用51DOS 功能調用包含多個子功能的功能包;用軟中斷指令調用,中斷類型碼固定為21H;各子功能采用功能號來區(qū)分。52DOS 功能調用設備管理目錄管理文件管理其它53DOS 功能調用調用格式: MOV AH,功能號 INT 21H54一、單字符輸入調用方法: MOV AH,01 INT 21H輸入的字符在AL中55單字符輸入例GET_KEY: MOVAH,1 INT21H CMPAL,Y JZ YES CMPAL,N JZ NO JMPGET_KEY YES: NO: 56交互式應

14、 答程序二、字符串輸入注意問題:調用格式字符輸入緩沖區(qū)的定義571. 調用格式58 功能號OAH 字符串在內存中的存放地址INT 21H AH DS:DX2. 定義字符緩沖區(qū)用戶自定義緩沖區(qū)格式:590DHN1N2整個緩沖區(qū)最大可鍵入字符數(shù)實際鍵入字符數(shù)存放鍵入的字符存放字符個數(shù):255輸入字符串程序段 DAT1 DB 20,?,20 DUP(?) LEA DX,DAT1 MOV AH,0AH INT 21H60在數(shù)據(jù)段中定義輸入緩沖區(qū)6114H ?20個字節(jié)定義后的輸入緩沖區(qū)初始狀態(tài):三、單字符顯示輸出 功能號O2H 待輸出字符INT 21H62 AH DL單字符顯示輸出例MOVAH,02MOVDL,41HINT21H63執(zhí)行結果:屏幕顯示A四、字符串輸出顯示64 功能號O9H 待輸出字符串的偏移地址INT 21H AH DS:DX字符串輸出顯示被顯示的字符串必須以$結束,且所顯示的 內容不應出現(xiàn)非可見的ASCII碼65字符串輸出顯示例DATA SEGMENTMESS1 DB Input String:, 0DH,0AH,$DATA ENDSCODE SEGMENT MOVAH,09MOVDX,OFFSET MESS1INT21H 6

溫馨提示

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

評論

0/150

提交評論