第4章匯編語言程序設(shè)計(jì)_第1頁
第4章匯編語言程序設(shè)計(jì)_第2頁
第4章匯編語言程序設(shè)計(jì)_第3頁
第4章匯編語言程序設(shè)計(jì)_第4頁
第4章匯編語言程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 第4章匯編語言程序設(shè)計(jì)主要內(nèi)容 匯編語言源程序的結(jié)構(gòu) 匯編語言語句格式 偽指令 功能調(diào)用 匯編語言程序設(shè)計(jì) §4.1 匯編語言源程序 了解: 匯編語言源程序的結(jié)構(gòu) 匯編語言語句類型及格式一、匯編語言源程序結(jié)構(gòu)1. 匯編語言源程序與匯編程序 匯編語言源程序 用助記符編寫 匯編程序 源程序的編譯程序 匯編語言源程序 匯編程序 機(jī)器語言目標(biāo)程序2. 匯編語言程序設(shè)計(jì)與執(zhí)行過程 輸入?yún)R編語言源程序(EDIT) 源文件 . ASM 匯編(MASM) 目標(biāo)文件 .OBJ 鏈接(LINK) 可執(zhí)行文件.EXE 調(diào)試(TD) 最終程序二、匯編語言語句類型及格式1. 匯編語言語句類型指令性語句 CP

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

3、標(biāo)號 表達(dá)式常 量 數(shù)字常量 字符串常量 用單引號引起的字符或字符串 例:A MOV AL,A 例:ABCD 匯編時被譯成對應(yīng)的ASCII 碼41H,42H,43H,44H用單引號引起的字符或字符串變 量 代表內(nèi)存中的數(shù)據(jù)區(qū),程序中視為存儲器操作數(shù) 變量的屬性: 段 值 變量所在段的段地址 偏移量 變量單元地址與段首地址之 間的位移量。 類 型 字節(jié)型、字型和雙字型表達(dá)式 算術(shù)運(yùn)算 邏輯運(yùn)算 *關(guān)系運(yùn)算 取值運(yùn)算和屬性運(yùn)算 其它運(yùn)算算術(shù)運(yùn)算和邏輯運(yùn)算符 算術(shù)運(yùn)算符 +,-,*,/,MOD 邏輯運(yùn)算符 AND,OR,NOT,XOR 例: MOV AL,8 AND 4 MOV AL,8+4-1取值

4、運(yùn)算符 用于分析存儲器操作數(shù)的屬性 獲取變量的屬性值 OFFSET 取得其后變量或標(biāo)號的偏移地址 SEG 取得其后變量或標(biāo)號的段地址 TYPE 取變量的類型 LENGTH 取所定義存儲區(qū)的長度 SIZE 取所定義存儲區(qū)的字節(jié)數(shù)取值運(yùn)算符例 MOV AX,SEG DATA MOV DS,AX MOV BX,OFFSET DATA LEA BX,DATA取值運(yùn)算符例 若BUFFER存儲區(qū)用如下偽指令定義: BUFFER DW 200 DUP(0) 則: TYPE BUFFER 等于2 LENGTH BUFFER等于200 SIZE BUFFER等于400屬性運(yùn)算符 用于指定其后存儲器操作數(shù)的類型

5、運(yùn)算符:PTR 例: MOV BYTR PTRBX,12H其它運(yùn)算符方括號: 方括號中內(nèi)容為操作數(shù)的偏移地址段重設(shè)符 段寄存器名: 用于修改默認(rèn)的段基地址 §4.2 偽指令 掌握: 偽指令的格式及實(shí)現(xiàn)的操作 偽指令的應(yīng)用偽指令 由匯編程序執(zhí)行的“指令系統(tǒng)” 作用: 定義變量; 分配存儲區(qū) 定義邏輯段; 指示程序開始和結(jié)束; 定義過程等。常用偽指令 數(shù)據(jù)定義偽指令 符號定義偽指令 段定義偽指令 結(jié)束偽指令 過程定義偽指令 宏命令偽指令一、數(shù)據(jù)定義偽指令 用于定義數(shù)據(jù)區(qū)中變量的類型及大小 格式: 變量名 偽指令助記符 操作數(shù), ;注釋 符號地址 定義變量類型 定義變量值及區(qū)域大小1. 數(shù)

6、據(jù)定義偽指令助記符 DB 定義的變量為字節(jié)型 DW 定義的變量為字類型(雙字節(jié)) DD 定義的變量為雙字型(4字節(jié)) DQ 定義的變量為4字型(8字節(jié)) DT 定義的變量為10字節(jié)型數(shù)據(jù)定義偽指令例 DATA1 DB 11H,22H,33H,44H DATA2 DW 11H,22H,3344H DATA3 DD 11H*2,22H,33445566H數(shù)據(jù)定義偽指令例_變量在內(nèi)存中的分布DATA1 11 DATA3 22 22 0 33 0 44 0DATA2 11 22 00 0 22 0 00 0 44 XX 33 66 55 44 33數(shù)據(jù)定義偽指令的幾點(diǎn)說明 偽指令的性質(zhì)決定所定義變量的

7、類型; 定義字符串必須用DB偽指令 例: DATA1 DB ABCD,66H 41H A 42H B 43H C 44H D 66H2. 重復(fù)操作符 作用: 為一個數(shù)據(jù)區(qū)的各單元設(shè)置相同的初值 目的: 常用于聲明一個數(shù)據(jù)區(qū) 格式: 變量名 偽指令助記符 n DUP(初值,) 例: BW 20 DUP(0) M1 DB 10 DUP(0)3. “?”的作用 表示隨機(jī)值,用于預(yù)留存儲空間 MEM1 DB 34H,A,? 隨機(jī)數(shù) 占1個字節(jié)單元 DW 20 DUP(?) 預(yù)留40個字節(jié)單元,每單元為隨機(jī)值數(shù)據(jù)定義偽指令例 M1 DB How are you? M2 DW 3 DUP(11H),334

8、4H DB 4 DUP(?) M3 DB 3 DUP(22H,11H,?) 變量在內(nèi)存中的分區(qū)數(shù)據(jù)定義偽指令例M1 M2 11H M3 22H 00H 11H 11H XX 00H 22H 11H 11H 00H XX 44H 22H 33H 11H XX XX XX XX XX二、符號定義偽指令 格式: 符號名 EQU表達(dá)式 操作: 用符號名取代后邊的表達(dá)式,不可重新定義 例: CONSTANTEQU100 VAR EQU 30H+99H EQU說明的表達(dá)式不占用內(nèi)存空間三、段定義偽指令 說明邏輯段的起始和結(jié)束; 說明不同程序模塊中同類邏輯段之間的聯(lián)系形 態(tài)段定義偽指令格式 段名 SEGME

9、NT 定位類型 組合類型 類別 段名 ENDS 說明邏輯段的起點(diǎn) 說明不同模塊中同名 段的組和連接方式定位類型 PARA: 段的起點(diǎn)從節(jié)邊界開始 (16個字節(jié)為1節(jié)) BYTE: 段的起點(diǎn)從存儲器任何地址開始 WORD:段的起點(diǎn)從偶地址開始 PAGE: 段的起點(diǎn)從頁邊界開始 組合類型 與其它模塊中的同名段在滿足定位類型的前提 下具有的組合方式: NONE: 不組合 PUBLIC: 依次連接(順序由LINK程序確定) COMMON: 覆蓋連接 STACK: 堆棧段的依次連接 AT 表達(dá)式: 段定義在表達(dá)式值為段基的節(jié)邊界 MEMORY: 相應(yīng)段在同名段的最高地址處。類別 不同模塊連接時將相同類別

10、的段放在連續(xù)的內(nèi)存區(qū)域中段定義偽指令例 DATA SEGMENT 變量在邏輯段中的位置 MEM1 DB 11H,22H 就代表了它的偏移地址 MEM2 DB Hello! MEM3 DW 2 DUP(?) DATA ENDS表示變量所在邏輯段的段地址 表示變量的類型四、設(shè)定段寄存器偽指令 說明所定義邏輯段的性質(zhì) 格式: ASSUME 段寄存器名:段名,段寄存器名:段名,五、結(jié)束偽指令 表示源程序結(jié)束 格式: END 標(biāo)號匯編語言源程序結(jié)構(gòu)數(shù)據(jù)段名 SEGMENT 堆棧段名 SEGMENT 數(shù)據(jù)段名 ENDS 堆棧段名 ENDS附加段名 SEGMENT 代碼段名 SEGMENT 附加段名 END

11、S 代碼段名 ENDS END一個完整源程序結(jié)構(gòu)例 DSEG SEGMENT DATA1 DB 1,2, 3 DUP(?) DATA2 DW 1234H DSEG ENDS ESEG SEGMENT DB 20 DUP(?) ESEG ENDS SSEG SEGMENT STACK STACK DB 200 DUP(?) SSEG ENDS一個完整源程序結(jié)構(gòu)例 CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG, ES:ESEG,SS:SSEG START:MOV AX,DSEG MOV DS,AX 段寄存器初始化 MOV AX,ESEG 將段地址送 MOV ES,AX 相

12、應(yīng)的段寄存 MOV AX,SSEG MOV SS,AX 源程序代碼 CSEG ENDS END START六、過程定義偽指令 用于定義一個過程體 格式: 過程入口的符號地址 過程名 PROC NEAR / FAR RET 過程名 ENDP過程定義及調(diào)用例 定義延時子程序 調(diào)用延時子程序: DELAY PROC CALL DELAY PUSH BX PUSH CX MOV BL,2 NEXT: MOV CX,4167 W10M: LOOP W10M DEC BL JNZ NEXT POP CX POP BX RET DELAY ENDP 七、宏命令偽指令 宏 源程序中由匯編程序識別的具有獨(dú) 立功

13、能的一段程序代碼格式: 宏命令名 MACRO <形式參數(shù)> ENDM八、其它偽指令 ORG 段內(nèi)程序代碼或變量的起始偏移地址 格式: ORG 表達(dá)式 例: 計(jì)算值為非負(fù)常數(shù) ORG 2000H其它偽指令 NAME-為目標(biāo)程序設(shè)定一個名字 格式: NAME 模塊名 TITLE-為程序清單指定打印標(biāo)題 格式: TITLE 標(biāo)題名 §4.3 功能調(diào)用 DOS 功能調(diào)用 BIOS功能調(diào)用DOS 功能調(diào)用 包含多個子功能的功能包; 用軟中斷指令調(diào)用,中斷類型碼固定為21H; 各子功能采用功能號來區(qū)分。DOS 功能調(diào)用 設(shè)備管理 目錄管理 文件管理 其它DOS 功能調(diào)用 調(diào)用格式:

14、MOV AH,功能號 <置相應(yīng)參數(shù)> INT 21H一、單字符輸入 調(diào)用方法: MOV AH,01 INT 21H 輸入的字符在AL中 單字符輸入例 GET_KEY: MOVAH,1 INT21H CMPAL,Y JZ YES CMPAL,N JZ NO JMPGET_KEY YES: NO: 交互式應(yīng) 答程序 注意問題: 調(diào)用格式 字符輸入緩沖區(qū)的定義1. 調(diào)用格式 AH 功能號OAH DS:DX 字符串在內(nèi)存中的存放地址 INT 21H 2. 定義字符緩沖區(qū) 用戶自定義緩沖區(qū)格式: 存放字符個數(shù):255 N1N2 0DH 存放鍵入的字符 整個緩沖區(qū) 實(shí)際鍵入字符數(shù)最大可鍵入字符數(shù)輸入字符串程序段 DAT1 DB 20,?,20 DUP(?) 在數(shù)據(jù)段中定義 LEA DX,DAT1 MOV AH,0AH INT 21H輸入緩沖區(qū) 定義后的輸入緩沖區(qū)初始狀態(tài): 14H ? 20個字節(jié)三、單字符顯示輸出 AH 功能號O2HDL 待輸出字符INT 21H 單字符顯示輸出例MOVAH,02MOVDL,41HINT21H 執(zhí)行結(jié)果: 屏幕顯示A四、字符串輸出顯示AH 功能號O9HDS:DX 待輸出字符串的偏移地址INT 21H 字符串輸出顯示 被顯示的字符串必須以$結(jié)束,且所顯示的 內(nèi)容不應(yīng)出現(xiàn)非可見的ASCII碼字符串輸出顯示例DATA SE

溫馨提示

  • 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

提交評論