版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1第第4 4章章匯編語言程序設計匯編語言程序設計2主要內容n匯編語言源程序的結構匯編語言源程序的結構n匯編語言語句格式匯編語言語句格式n偽指令偽指令n功能調用功能調用n匯編語言程序設計匯編語言程序設計34.1 匯編語言源程序了解:了解:n匯編語言源程序的結構匯編語言源程序的結構n匯編語言語句類型及格式匯編語言語句類型及格式4一、匯編語言源程序結構51. 匯編語言源程序與匯編程序n匯編語言源程序匯編語言源程序n匯編程序匯編程序用助記符編寫用助記符編寫匯編程序匯編程序匯編語言匯編語言源程序源程序機器語言機器語言目標程序目標程序源程序的編譯程序源程序的編譯程序62. 匯編語言程序設計與執(zhí)行過程n輸入
2、匯編語言源程序(輸入匯編語言源程序(EDIT)n匯編(匯編(MASM)n鏈接(鏈接(LINK)n調試(調試(TD)源文件源文件 . ASM目標文件目標文件 .OBJ可執(zhí)行文件可執(zhí)行文件.EXE最終程序最終程序7二、匯編語言語句類型及格式二、匯編語言語句類型及格式81. 匯編語言語句類型指令性語句指令性語句指示性語句指示性語句CPU執(zhí)行的語句,執(zhí)行的語句,能夠生成目標代碼能夠生成目標代碼CPU不執(zhí)行,而由匯不執(zhí)行,而由匯編程序執(zhí)行的語句,編程序執(zhí)行的語句,不生成目標代碼不生成目標代碼92. 匯編語言語句格式 指令性語句:指令性語句: 標號:標號: 前綴前綴 助記符助記符 操作數操作數,操作數操作
3、數 ;注釋;注釋指令的符號地址指令的符號地址標號后要有冒號標號后要有冒號操作碼操作碼注釋前加分號注釋前加分號10指示性語句格式名字名字 偽指令助記符偽指令助記符 操作數操作數 ,操作數,操作數, ;注釋;注釋變量的符號地址變量的符號地址其后不加冒號其后不加冒號指示性語句中至指示性語句中至少有一個操作數少有一個操作數113. 標號、名字n標號后有冒號,在指令性語句前;名字后不加標號后有冒號,在指令性語句前;名字后不加冒號,在指示性語句前。冒號,在指示性語句前。n英文字母、數字及專用字符組成英文字母、數字及專用字符組成, ,最大長度不最大長度不能超過能超過3131個個, ,且不能由數字打頭且不能由
4、數字打頭, ,不能用保留字不能用保留字( (如寄存器名如寄存器名, ,指令助記符指令助記符, ,偽指令偽指令) )。 124. 操作數寄存器寄存器存儲器單元存儲器單元常量常量變量或標號變量或標號表達式表達式13常 量n數字常量數字常量n字符串常量字符串常量n例:例:A nMOV AL,An例:例:ABCD匯編時被譯成對應的匯編時被譯成對應的ASCII碼碼用單引號引起的字符或字符串用單引號引起的字符或字符串14變 量n代表內存中的數據區(qū),程序中視為存儲器代表內存中的數據區(qū),程序中視為存儲器操作數操作數n變量的屬性:變量的屬性: 變量所在段的段地址變量所在段的段地址 變量單元地址與段首地址之變量單
5、元地址與段首地址之 間的位移量。間的位移量。 字節(jié)型、字型和雙字型字節(jié)型、字型和雙字型段段 值值偏移量偏移量類類 型型15表達式算術運算算術運算邏輯運算邏輯運算*關系運算關系運算取值運算和屬性運算取值運算和屬性運算其它運算其它運算16算術運算和邏輯運算符n算術運算符算術運算符n+,-,*,/,MODn邏輯運算符邏輯運算符nAND,OR,NOT,XORn例:例:nMOV AL,8 AND 4nMOV AL,8+4-117取值運算符取得其后變量或標號的偏移地址取得其后變量或標號的偏移地址取得其后變量或標號的段地址取得其后變量或標號的段地址TYPE 取取LENGTH 取所定義存儲區(qū)的長度取所定義存儲
6、區(qū)的長度SIZE 取所定義存儲區(qū)的字節(jié)數取所定義存儲區(qū)的字節(jié)數n用于分析存儲器操作數的屬性用于分析存儲器操作數的屬性n獲取變量的屬性值獲取變量的屬性值OFFSETSEG18取值運算符例 MOV AX,SEG DATA MOV DS,AX MOV BX,OFFSET DATA LEA BX,DATA等價于等價于19取值運算符例n若若BUFFER存儲區(qū)用如下偽指令定義:存儲區(qū)用如下偽指令定義: BUFFER DW 200 DUP(0)BUFFER DW 200 DUP(0) 則:則: TYPETYPE BUFFER BUFFER 等于等于2 2 LENGTH BUFFERLENGTH BUFFER
7、等于等于200200 SIZE BUFFERSIZE BUFFER等于等于40040020屬性運算符n 用于指定其后存儲器操作數的類型用于指定其后存儲器操作數的類型n 運算符:運算符:PTRn 例:例: MOV BYTR PTRBX,12H21其它運算符n方括號:方括號: n段重設符段重設符 段寄存器名:段寄存器名: 方括號中內容為操作數的偏移地址方括號中內容為操作數的偏移地址用于修改默認的段基地址用于修改默認的段基地址224.2 偽指令掌握:掌握:n偽指令的格式及實現的操作偽指令的格式及實現的操作n偽指令的應用偽指令的應用23偽指令n由匯編程序執(zhí)行的由匯編程序執(zhí)行的“指令系統(tǒng)指令系統(tǒng)”n作用
8、:作用:n定義變量;定義變量;n分配存儲區(qū)分配存儲區(qū)n定義邏輯段;定義邏輯段;n指示程序開始和結束;指示程序開始和結束;n定義過程等。定義過程等。24常用偽指令數據定義偽指令數據定義偽指令符號定義偽指令符號定義偽指令段定義偽指令段定義偽指令結束偽指令結束偽指令過程定義偽指令過程定義偽指令宏命令偽指令宏命令偽指令25一、數據定義偽指令n用于定義數據區(qū)中變量的類型及大小用于定義數據區(qū)中變量的類型及大小n格式:格式: 變量名變量名 偽指令助記符偽指令助記符 操作數,操作數, ;注釋注釋符號地址符號地址定義變量類型定義變量類型定義變量值定義變量值及區(qū)域大小及區(qū)域大小261. 數據定義偽指令助記符nDB
9、 定義的變量為字節(jié)型定義的變量為字節(jié)型nDW 定義的變量為字類型(雙字節(jié))定義的變量為字類型(雙字節(jié))nDD 定義的變量為雙字型(定義的變量為雙字型(4字節(jié))字節(jié))nDQ 定義的變量為定義的變量為4字型(字型(8字節(jié)字節(jié))nDT 定義的變量為定義的變量為10字節(jié)型字節(jié)型27數據定義偽指令例nDATA1 DB 11H,22H,33H,44HnDATA2 DW 11H,22H,3344HnDATA3 DD 11H*2,22H,33445566H以上變量在內存以上變量在內存中的存放形式中的存放形式28數據定義偽指令例_變量在內存中的分布變量在內存中的分布DATA111223344DATA222441
10、1000033DATA32200220000XX6655443329數據定義偽指令的幾點說明n偽指令的性質決定所定義變量的類型;偽指令的性質決定所定義變量的類型;n定義字符串必須用定義字符串必須用DB偽指令偽指令n例:例: DATA1 DB ABCD,66HABCD41H42H43H44H66H302. 重復操作符n作用:作用:n為一個數據區(qū)的各單元設置相同的初值為一個數據區(qū)的各單元設置相同的初值n目的:目的:n常用于聲明一個數據區(qū)常用于聲明一個數據區(qū)n格式:格式: 變量名變量名 偽指令助記符偽指令助記符 n DUP(初值,初值,)n例:例: BW 20 DUP(0)M1 DB 10 DUP(
11、5)20個初值為個初值為0的字單元的字單元10個初值為個初值為5的字節(jié)單元的字節(jié)單元313. “?”的作用n表示隨機值,用于預留存儲空間表示隨機值,用于預留存儲空間nMEM1 DB 34H,A,?,? DW 20 DUP(?)(?)預留預留40個字節(jié)單元,每單元初值為隨機值個字節(jié)單元,每單元初值為隨機值隨機數隨機數占占1個字節(jié)單元個字節(jié)單元32數據定義偽指令例nM1 DB How are you?nM2 DW 3 DUP(11H),3344Hn DB 4 DUP(?)(?)nM3 DB 3 DUP(22H,11H,?),?)變量在內存中的分區(qū)變量在內存中的分區(qū)33數據定義偽指令例M1How a
12、M211H11H00H44H33H r e you?11H00H00H隨機數隨機數M311H22H11H22H11H22HXXXXXXXXXXXXXX34二、符號定義偽指令n格式:格式:n符號名符號名 EQU EQU 表達式表達式n操作:操作:n用符號名取代后邊的表達式,不可重新定義用符號名取代后邊的表達式,不可重新定義n例:例:nCONSTANTCONSTANTEQUEQU100100nVAR EQU 30H+99HVAR EQU 30H+99HEQU說明的表達式不占用內存空間說明的表達式不占用內存空間35三、段定義偽指令n說明邏輯段的起始和結束;說明邏輯段的起始和結束;n說明不同程序模塊中
13、同類邏輯段之間的聯(lián)系說明不同程序模塊中同類邏輯段之間的聯(lián)系形態(tài)形態(tài)36段定義偽指令格式段名段名 SEGMENT SEGMENT 定位類型定位類型 組合類型組合類型 類別類別 段名段名 ENDSENDS說明邏輯段說明邏輯段的起點的起點說明不同模塊中同名段的說明不同模塊中同名段的組和連接方式組和連接方式37定位類型nPARA: 段的起點從節(jié)邊界開始段的起點從節(jié)邊界開始 (16個字節(jié)為個字節(jié)為1節(jié))節(jié))nBYTE: 段的起點從存儲器任何地址開始段的起點從存儲器任何地址開始nWORD:段的起點從偶地址開始段的起點從偶地址開始nPAGE: 段的起點從頁邊界開始段的起點從頁邊界開始 (256個字節(jié)為個字節(jié)
14、為1頁)頁)38組合類型n與其它模塊中的同名段在滿足定位類型的前提與其它模塊中的同名段在滿足定位類型的前提 下具有的組合方式:下具有的組合方式:nNONE: 不組合不組合nPUBLIC: 依次連接(順序由依次連接(順序由LINK程序確定)程序確定)nCOMMON: 覆蓋連接覆蓋連接nSTACK: 堆棧段的依次連接堆棧段的依次連接nAT 表達式:段定義在表達式值為段基的節(jié)邊界表達式:段定義在表達式值為段基的節(jié)邊界nMEMORY: 相應段在同名段的最高地址處。相應段在同名段的最高地址處。39類別n不同模塊連接時將相同類別的段放在連不同模塊連接時將相同類別的段放在連續(xù)的內存區(qū)域中續(xù)的內存區(qū)域中40段
15、定義偽指令例DATA SEGMENT MEM1 DB 11H,22H MEM2 DB Hello! MEM3 DW 2 DUP(?)(?)DATA ENDS變量在邏輯段變量在邏輯段中的位置就代中的位置就代表了它的偏移表了它的偏移地址地址表示變量所在表示變量所在邏輯段的段地邏輯段的段地址址表示變量的類表示變量的類型型41四、設定段寄存器偽指令n說明所定義邏輯段的性質說明所定義邏輯段的性質n格式:格式: ASSUME 段寄存器名段寄存器名:段名段名,段寄存器名,段寄存器名:段名,段名,42五、結束偽指令n表示源程序結束表示源程序結束n格式:格式: END 標號標號實際編程中必有,該實際編程中必有,
16、該處標號須與程序第處標號須與程序第1條條指令前的標號一致。指令前的標號一致。43匯編語言源程序結構數據段名數據段名 SEGMENT 數據段名數據段名 ENDS附加段名附加段名 SEGMENT 附加段名附加段名 ENDS堆棧段名堆棧段名 SEGMENT 堆棧段名堆棧段名 ENDS代碼段名代碼段名 SEGMENT 代碼段名代碼段名 ENDS END 44一個完整源程序結構例DSEG SEGMENT DATA1 DB 1,2, 3 DUP(?)(?) DATA2 DW 1234HDSEG ENDSESEG SEGMENT DB 20 DUP(?)(?)ESEG ENDSSSEG SEGMENT ST
17、ACK STACK DB 200 DUP(?)(?)SSEG ENDS表示該邏輯表示該邏輯段的段地址段的段地址此處還不能此處還不能確定邏輯段確定邏輯段的性質的性質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源程序源程序 代碼代碼段寄存器初始化段寄存器初始化將段地址送將段地址送相應的段相應的段寄存器寄存器說明各說明各邏輯段邏輯段的
18、性質的性質46例DATA SEGMENT TABLE DW 3400H,5600H,2300H,4500H, 2300H,1200H, 2344H,3500HDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS;DATASTART:MOV AX,DATA MOV DS,AX MOV BX,OFFSET TABLE MOV SI,6 A:JMP DWORD PTRBX+SI+2 畫出畫出TABLETABLE在內存中的存放情況在內存中的存放情況程序執(zhí)行完標號為程序執(zhí)行完標號為A A的指令后:的指令后: CS= CS=? IP= IP=?47程序3(續(xù)) MOV BX,OF
19、FSET TABLE MOV SI,06HA:JMP DWORD PTRBX+SI+2 程序執(zhí)行完標號為程序執(zhí)行完標號為A的指令后:的指令后: CS=? IP=?48六、過程定義偽指令n用于定義一個過程體用于定義一個過程體n格式:格式: 過程名過程名 PROC NEAR / FAR RET 過程名過程名 ENDPP157例例過程的入過程的入口地址口地址過程定義及調用例n定義延時子程序定義延時子程序 nDELAY PROCn PUSH BXn PUSH CXn MOV BL,2nNEXT: MOV CX,4167nW10M: LOOP W10Mn DEC BLn JNZ NEXTn POP CX
20、n POP BXn RETnDELAY ENDP49n調用延時子程序:調用延時子程序: nCALL DELAY 50七、宏命令偽指令n 源程序中由匯編程序識別的具有獨源程序中由匯編程序識別的具有獨 立功能的一段程序代碼立功能的一段程序代碼n格式:格式: 宏命令名宏命令名 MACRO ENDM宏體宏體宏宏八、其它偽指令 段內程序代碼或變量的起始偏移地址段內程序代碼或變量的起始偏移地址n格式:格式:nORG 表達式表達式n例:例:nDATA SEGMENTn ORG 200n M1 DB 12H,4 DUP(0)n M2 DW 1234HnDATA ENDS計算值為計算值為非負常數非負常數ORGM
21、10034121200M2200205524.3 功能調用nBIOSn駐留在駐留在ROM中的基本輸入中的基本輸入/輸出系統(tǒng)輸出系統(tǒng)n加電自檢,裝入引導,主要加電自檢,裝入引導,主要I/O設備處理程序及接口控制設備處理程序及接口控制nBIOS功能調用使程序員不必了解硬件操作的細節(jié)而功能調用使程序員不必了解硬件操作的細節(jié)而實現相應的操作。實現相應的操作。nDOSn磁盤操作系統(tǒng)磁盤操作系統(tǒng)n相比相比BIOS,對硬件的依賴性小,對硬件的依賴性小nDOSDOS功能與功能與BIOSBIOS功能均通過中斷方式調用功能均通過中斷方式調用。DOS中斷與BIOS中斷nDOS中斷包括:中斷包括:n設備設備管理,管理
22、,n在某些情況下,同樣的功能既可選擇在某些情況下,同樣的功能既可選擇DOS中斷中斷,也可選擇,也可選擇BIOS中斷中斷53DOS調用和BIOS調用的基本步驟n將調用參數裝入指定的寄存器;將調用參數裝入指定的寄存器;n將功能號裝入將功能號裝入AH;n按中斷類型號調用按中斷類型號調用DOS或或BIOS中斷;中斷;n檢查返回參數是否正確。檢查返回參數是否正確。5455一、一、DOS 功能調用n說明:說明:nDOS中斷是包含多個子功能的功能包;中斷是包含多個子功能的功能包;n各子功能用功能號區(qū)分;各子功能用功能號區(qū)分;n用軟中斷指令調用,中斷類型碼固定為用軟中斷指令調用,中斷類型碼固定為21H。n調用
23、格式:調用格式:nMOV AH,功能號功能號 INT 21H561. 單字符輸入n調用方法:調用方法: MOV AH,01 INT 21Hn輸入的字符在輸入的字符在AL中中57單字符輸入例GET_KEY:GET_KEY: MOVMOVAH,1AH,1 INTINT21H21H CMPCMPAL,AL,Y Y JZ JZ YESYES CMP CMPAL,AL,N N JZ JZ NONO JMP JMPGET_KEYGET_KEY YES: YES: NO: NO: 交互式應交互式應 答程序答程序582. 字符串輸入n注意問題:注意問題:n調用格式調用格式n字符輸入緩沖區(qū)的定義字符輸入緩沖區(qū)的
24、定義59調用格式 功能號功能號OAH 字符串在內存中的存放地址字符串在內存中的存放地址nINT 21Hn AHn DS:DX60定義字符緩沖區(qū)n用戶自定義緩沖區(qū)格式:用戶自定義緩沖區(qū)格式:0DHN1N2整個緩沖區(qū)整個緩沖區(qū)最大可鍵入字符數最大可鍵入字符數實際鍵入字符數實際鍵入字符數存放鍵入的字符存放鍵入的字符存放字符個數:存放字符個數:25561輸入字符串程序段n DAT1 DB 20,?,?,20 DUP(?)(?) n LEA DX,DAT1 MOV AH,0AH INT 21H在數據段在數據段中定義中定義62輸入緩沖區(qū)14H ?20個字節(jié)個字節(jié)定義后的輸入緩定義后的輸入緩沖區(qū)初始狀態(tài):沖
25、區(qū)初始狀態(tài):633. 單字符顯示輸出 功能號功能號O2H 待輸出字符待輸出字符nINT 21Hn AHn DL64單字符顯示輸出例nMOVAH,02nMOVDL,41HnINT21H執(zhí)行結果:執(zhí)行結果:屏幕顯示屏幕顯示A654. 字符串輸出顯示 功能號功能號O9H 待輸出字符串的偏移地址待輸出字符串的偏移地址nINT 21Hn AHn DS:DX66字符串輸出顯示n注意點:注意點:n被顯示的字符串必須以被顯示的字符串必須以$ $結束;結束;n所顯示的內容不應出現非可見的所顯示的內容不應出現非可見的ASCIIASCII碼;碼;n若考慮輸出格式需要,在定義字符串后,加上若考慮輸出格式需要,在定義字
26、符串后,加上回車符和換行符?;剀嚪蛽Q行符。67字符串輸出顯示例DATA SEGMENT MESS1 DB Input String:, 0DH,0AH,$DATA ENDSCODE SEGMENT MOV AH,09MOV DX,OFFSET MESS1INT21H 5. 返回操作系統(tǒng)(DOS)功能n功能號:功能號:n4CHn調用格式:調用格式:nMOV AH,4CHnINT 21Hn功能:功能:n程序執(zhí)行完該程序執(zhí)行完該2條語句后能正常返回條語句后能正常返回OSn常位于程序結尾處。常位于程序結尾處。68二、BIOS功能調用n通過中斷指令調用相應的通過中斷指令調用相應的BIOS中斷服務程序中
27、斷服務程序nBIOS中斷服務程序實際上是一些對端口的輸中斷服務程序實際上是一些對端口的輸入輸出操作,是微機系統(tǒng)中軟件與硬件之間入輸出操作,是微機系統(tǒng)中軟件與硬件之間的一個可編程接口。的一個可編程接口。n光驅、硬盤管理;中斷設置等光驅、硬盤管理;中斷設置等69附錄附錄D鍵盤狀態(tài)檢驗n可利用類型碼為可利用類型碼為16H的的BIOS中斷判斷是否有中斷判斷是否有任意鍵按下任意鍵按下n調用格式:調用格式:nAHnINT 16Hn判斷方法:判斷方法:n若若ZF=0n若若ZF=170功能號功能號1有鍵按下有鍵按下無鍵按下無鍵按下例:在屏幕上顯示信息,當有任意鍵按下時退出在屏幕上顯示信息,當有任意鍵按下時退出71DSEG SEGMENT MESS DB Hello,World!,0DH,0AH,$DSEG ENDSCSEG
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學一年級20以內連加連減口算練習題1080道非常好
- 如何預防兒童齲齒
- 《胸腔引流導管》課件
- 園林綠化行業(yè)客服工作心得
- 電子工程師電子設備設計與調試
- 旅游景點保安工作總結
- 優(yōu)化教學管理提升教學效果計劃
- 服裝業(yè)衛(wèi)生保障策略
- 乒乓球拍球鞋行業(yè)銷售工作總結
- 娛樂休閑科技應用總結
- 2023-2024學年人教版高中信息技術必修二第二章第二節(jié)《 信息系統(tǒng)的開發(fā)過程》教案
- 2024六年級英語上冊 Module 9 Unit 1 Do you want to visit the UN building教案 外研版(三起)
- 2024年廣東省高中學業(yè)水平合格性考試語文試卷真題(含答案解析)
- 混凝土股東合同范本
- 人教版九年級英語知識點復習課件全冊
- 2024年7月國家開放大學專科《辦公室管理》期末紙質考試試題及答案
- 2024年自然資源部直屬企事業(yè)單位公開招聘考試筆試(高頻重點提升專題訓練)共500題附帶答案詳解
- 五金材料采購投標方案(技術方案)
- 客運站春運安全行車教育
- 乳腺腔鏡手術介紹
- 服裝的生產方案
評論
0/150
提交評論