




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、27.4偽指令o 數(shù)據(jù)定義偽指令o 符號(hào)定義偽指令o 段定義和段寄存器指定偽指令o 過(guò)程定義偽指令o 結(jié)束偽指令偽指令的作用偽指令的作用 1) 由匯編程序執(zhí)行的指令。用來(lái)定義變量、符號(hào)常量、段、子程序以及存儲(chǔ)空間分配等等 2)其格式和匯編指令一樣,但一般不產(chǎn)生目的代碼,即不直接命令CPU去執(zhí)行什么操作。 37.4.1 數(shù)據(jù)定義偽指令 用于定義變量,即內(nèi)存單元或數(shù)據(jù)區(qū)。數(shù)據(jù)定義偽指令的格式為:變量名變量名 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令 操作數(shù),操作數(shù),操作數(shù),操作數(shù),常用的數(shù)據(jù)定義偽指令有如下幾種: DB 定義字節(jié)字節(jié) DW 定義字字 DD 定義雙字雙字操作數(shù)可以是常數(shù)、變量或表達(dá)式4例1:DA
2、TA_B DB 10,5,10HDATA_W DW 100H,-4DATA_D DD 0FFFBH匯編后的內(nèi)存分配情況如右圖所示。05H10H00H01HFCHFFHFBHFFH00H00H0AH變量是指一個(gè)數(shù)據(jù)區(qū),數(shù)據(jù)區(qū)變量是指一個(gè)數(shù)據(jù)區(qū),數(shù)據(jù)區(qū)中每個(gè)數(shù)據(jù)的類(lèi)型是字節(jié)型的中每個(gè)數(shù)據(jù)的類(lèi)型是字節(jié)型的還是字型的還是字型的?由偽指令決定由偽指令決定5例2:操作數(shù)可以是字符串,例如STR DB HELLO匯編后的情況如圖:STRHELLO注意下面兩個(gè)定義的不同之處:DBAB ;41H在低字節(jié),42H在高字節(jié)DW AB ;42H在低字節(jié),41H在高字節(jié)48H45H4CH4CH4FHAB屬于兩個(gè)數(shù)據(jù)AB
3、屬于一個(gè)數(shù)據(jù)存的是字符的存的是字符的ASCII碼碼6o例3: TABLE DB 10 DUP(?)設(shè)TABLE的偏移地址為0080H,則匯編后如下圖所示:0080H80HTABLE008AH008BH008CH008DH.8FH00H00H0089H10 Bytes操作數(shù)?用來(lái)保留存儲(chǔ)空間,但不存入數(shù)據(jù)77.4.2 7.4.2 符號(hào)定義偽指令(符號(hào)常量定義)符號(hào)定義偽指令(符號(hào)常量定義) 把一個(gè)表達(dá)式用一個(gè)符號(hào)表示,以后凡出現(xiàn)該表達(dá)式的地方都可用這個(gè)符號(hào)表示。類(lèi)似于C C語(yǔ)言中的語(yǔ)言中的#define#define。符號(hào)定義偽指令有兩種:EQU,= 用EQU定義的符號(hào)未清除前,不能重新定義。清
4、除EQU定義可用PURGE偽指令。 用”=”定義的符號(hào)可在任何時(shí)候進(jìn)行重定義。 二者二者均不占用存儲(chǔ)空間,僅是給符號(hào)賦值 8例:FIVE EQU 5 COUNT EQU CX TEN EQU 10 DIST = BYTE PTRSI+BP GOTO = JMP MOV AX, TEN MOV CX, COUNT ADD DIST, FIVE DIST = WORD PTRSI+BP+1 ADD DIST, AX GOTO LABEL 定義定義引用引用97.4.3 段定義偽指令 匯編語(yǔ)言匯編語(yǔ)言程序是按段來(lái)組織程序和數(shù)據(jù)的。程序是按段來(lái)組織程序和數(shù)據(jù)的。 和存儲(chǔ)器的物理段相對(duì)應(yīng)和存儲(chǔ)器的物理段相
5、對(duì)應(yīng),匯編語(yǔ)言程序中的段稱(chēng),匯編語(yǔ)言程序中的段稱(chēng)為邏輯段。匯編連接后被映射到物理段中。為邏輯段。匯編連接后被映射到物理段中。 一個(gè)完整的匯編源程序由3個(gè)段組成,即堆棧段、堆棧段、數(shù)據(jù)段和代碼段數(shù)據(jù)段和代碼段10例如: DATA SEGMENT DW 20DUP(?) DATA ENDSSEGMENT和ENDS應(yīng)成對(duì)使用,缺不可。其中段名是不可省略的。其它是可選項(xiàng),是賦予段名的屬性,可以省略。和定義一個(gè)段的基本格式: 段名 SEGMENT 定位類(lèi)型組合方式類(lèi)別 段名 ENDS11 這兩個(gè)偽指令總是成對(duì)出現(xiàn),二者前面的段名應(yīng)一致。SEGMENT說(shuō)明了一個(gè)段的開(kāi)始,ENDS說(shuō)明了一個(gè)段的結(jié)束。 對(duì)數(shù)
6、據(jù)段和堆棧段,段中的語(yǔ)句一般是變量定義。對(duì)代碼段則是指令語(yǔ)句。如: datadata SEGMENTSEGMENT datadata ENDS ENDS 和123) 類(lèi)別符號(hào)類(lèi)別符號(hào)用單引號(hào)括起來(lái)的字符串。所有同類(lèi)別的段被安排在連續(xù)的存儲(chǔ)區(qū)域中。如:在模塊1中有段定義: seg1 SEGMENT PARA STACK stack seg1 ENDS 在模塊2中有段定義: seg2 SEGMENT PARA STACK stack seg2 ENDS則連接時(shí)這兩個(gè)段被安排在一起。13設(shè)定段寄存器偽指令設(shè)定段寄存器偽指令-ASSUME偽指令偽指令 在代碼段中,還必須明確段(段名段名)和段寄存器的關(guān)
7、系,這由ASSUME語(yǔ)句來(lái)指定。如 ASSUME ASSUME CS:codeCS:code, , DS:dataDS:data, , ES:dataES:data 語(yǔ)句中的code和data為段名。 這個(gè)語(yǔ)句說(shuō)明: 1. CS將指向名字為code的代碼段 2. DS和ES將指向名字為data的數(shù)據(jù)段功能:通知匯編程序,哪一個(gè)段寄存器是該段的段寄存器,以便對(duì)使用變量或標(biāo)號(hào)的指令匯編出正確的目的代碼。14由于ASSUME偽指令只指明某一個(gè)段地址應(yīng)存于哪一個(gè)段寄存器中,并沒(méi)有包含將段地址送入該寄存器的操作。因此要將真實(shí)段地址裝入段寄存器還需用匯編指令來(lái)實(shí)現(xiàn)。這一步是不可缺少的。 MOVAX,DAT
8、A MOVDS,AX MOVES,AX將段基址裝入段寄存器將段基址裝入段寄存器。如果程序中用到堆棧段。當(dāng)程序運(yùn)行時(shí),由于DOS的裝入程序負(fù)責(zé)把CS初始化成正確的代碼段地址,SS初始化為正確的堆棧段地址,因此用戶(hù)在程序中就不必設(shè)置。 設(shè)定段寄存器偽指令設(shè)定段寄存器偽指令-ASSUME偽指令偽指令157.4.4 7.4.4 過(guò)程定義偽指令過(guò)程定義偽指令PROCPROC、ENDPENDP 過(guò)程就是子程序。一個(gè)過(guò)程可以被其它程序所調(diào)用(用CALL指令),一個(gè)過(guò)程由偽指令PROC和ENDP來(lái)定義,其格式為: PROC PROC 類(lèi)型類(lèi)型 RETRET ENDPENDP 注意:注意:PROCPROC和和E
9、NDPENDP必須成對(duì)出現(xiàn)。必須成對(duì)出現(xiàn)。過(guò)程的最后一條指令一般是返回指令(RET)。16 過(guò)程的類(lèi)型有兩種: NEAR(默認(rèn)類(lèi)型)表示段內(nèi)調(diào)用 FAR表示段間調(diào)用 調(diào)用一個(gè)過(guò)程的格式為:CALL 177.4.5 匯編結(jié)束偽指令END18匯編語(yǔ)言的一個(gè)實(shí)例: hello.asm Hello DB Hello, world!,0DH,0AH,$ ASSUME CS:prog,DS:datastart: MOV AX,data MOV DS,AX LEA DX,hello;取字符串首地址 MOV AH,9 INT 21H;顯示字符串 MOV AH,4CH INT 21H;退回DOS名字標(biāo)號(hào)返回變量
10、返回變量197.5 7.5 宏定義偽指令宏定義偽指令指令的格式為:指令的格式為: MACRO 形參表形參表 ENDM和符號(hào)常量的定義相類(lèi)似和符號(hào)常量的定義相類(lèi)似20X、Y、Z是形式參數(shù)。調(diào)用宏DADD時(shí)可寫(xiě)為: DADD DATA1,DATA2,SUMDATA1,DATA2,SUM是實(shí)際參數(shù),由它們替換定義中的X、Y、Z。21宏調(diào)用與過(guò)程(子程序)調(diào)用都是一次定義,多次調(diào)用。它們之間的差別是: 執(zhí)行形式執(zhí)行形式:宏命令偽指令由宏匯編程序在匯編過(guò)理中進(jìn)行處理,而CALL、RET則是由CPU執(zhí)行的指令。 匯編結(jié)果匯編結(jié)果:宏命令偽指令匯編后被展開(kāi)。 執(zhí)行速度執(zhí)行速度:宏命令執(zhí)行速度較快(因無(wú)調(diào)用轉(zhuǎn)
11、移) 占用內(nèi)存占用內(nèi)存:宏指令簡(jiǎn)化了源程序,但不能簡(jiǎn)化目標(biāo)程序,并不節(jié)省內(nèi)存單元。使用過(guò)程可以節(jié)省代碼占用的內(nèi)存空間。22例如:宏定義為: Display MACRO string LEA DX,string MOV AH,9 INT 21H ENDM 程序中宏調(diào)用: DISPLAY ERROR_MESSAGE DISPLAY EXIT_MESSAGE 匯編后的結(jié)果:(帶有+號(hào)的指令為宏展開(kāi)后的結(jié)果) + LEA DX,ERROR_MESSAGE + MOV AH,9 + INT 21H + LEA DX,EXIT_MESSAGE + MOVAH,9 + INT 21H 宏展開(kāi):匯編程序會(huì)把宏
12、調(diào)用按宏定義展開(kāi)。237.5 7.5 系統(tǒng)功能調(diào)用介紹系統(tǒng)功能調(diào)用介紹 系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用由操作系統(tǒng)提供的幾十個(gè)實(shí)現(xiàn)特殊功能由操作系統(tǒng)提供的幾十個(gè)實(shí)現(xiàn)特殊功能的的子程序子程序供程序員在程序中調(diào)用,以減輕編程工作量。供程序員在程序中調(diào)用,以減輕編程工作量。 它們被看成是幾十個(gè)它們被看成是幾十個(gè)中斷服務(wù)程序中斷服務(wù)程序,每個(gè)程序?qū)?yīng)一個(gè),每個(gè)程序?qū)?yīng)一個(gè)中中斷類(lèi)型碼斷類(lèi)型碼。用戶(hù)程序在調(diào)用這些系統(tǒng)服務(wù)程序時(shí),不是用用戶(hù)程序在調(diào)用這些系統(tǒng)服務(wù)程序時(shí),不是用CALL命令,而是采用軟中斷指令命令,而是采用軟中斷指令I(lǐng)NT INT n n來(lái)實(shí)現(xiàn)來(lái)實(shí)現(xiàn)。 即把一個(gè)中斷類(lèi)型碼(即把一個(gè)中斷類(lèi)型碼(n n
13、) )對(duì)應(yīng)一類(lèi)子程序?qū)?yīng)一類(lèi)子程序 其中一類(lèi)叫其中一類(lèi)叫“系統(tǒng)系統(tǒng)功能調(diào)用功能調(diào)用”的子程序,對(duì)應(yīng)的中斷類(lèi)型的子程序,對(duì)應(yīng)的中斷類(lèi)型碼是碼是21,用軟中斷指令,用軟中斷指令I(lǐng)NT 21HINT 21H來(lái)實(shí)現(xiàn)調(diào)用。來(lái)實(shí)現(xiàn)調(diào)用。輸入輸出語(yǔ)句輸入輸出語(yǔ)句,VB Print Inputbox 等語(yǔ)句或函數(shù)來(lái)實(shí)現(xiàn);等語(yǔ)句或函數(shù)來(lái)實(shí)現(xiàn);C中是中是Printf scanf。匯編語(yǔ)言中用什么來(lái)實(shí)現(xiàn)呢?。匯編語(yǔ)言中用什么來(lái)實(shí)現(xiàn)呢?24INT 2lHINT 2lH功能功能調(diào)用調(diào)用:它本身包含它本身包含8080多個(gè)子程序,多個(gè)子程序,每個(gè)程序?qū)?yīng)一個(gè)功能號(hào),編號(hào)從每個(gè)程序?qū)?yīng)一個(gè)功能號(hào),編號(hào)從057H057H。其中
14、有十幾個(gè)常用的子程序是程序員編程的重要其中有十幾個(gè)常用的子程序是程序員編程的重要工具。工具。調(diào)用這十幾個(gè)子程序采用統(tǒng)一的格式,如下:調(diào)用這十幾個(gè)子程序采用統(tǒng)一的格式,如下:AHAH功能號(hào)功能號(hào)傳送傳送入口參數(shù)入口參數(shù)到指定的寄存器;到指定的寄存器;執(zhí)行執(zhí)行INT 21HINT 21H指令;指令;。比如:2號(hào)功能調(diào)用可用如下指令MOV DL,welcome to chinaMOV AH,2INT 21H調(diào)用結(jié)果是將調(diào)用結(jié)果是將DL寄存器寄存器中的字符通過(guò)中的字符通過(guò) 屏幕顯示屏幕顯示輸出輸出25關(guān)于數(shù)據(jù)輸入和輸出我們這里只討論鍵盤(pán)輸入鍵盤(pán)輸入和顯示顯示輸出輸出,調(diào)用系統(tǒng)功能需要提供入口參數(shù)及所調(diào)
15、用的功能號(hào),調(diào)用結(jié)束返回結(jié)果1 1號(hào)功能調(diào)用號(hào)功能調(diào)用(1) 從鍵盤(pán)輸入一個(gè)字符(功能號(hào)功能號(hào)=1=1) MOV AH,MOV AH,1 1 INT 21H INT 21H 鍵入字符的鍵入字符的ASCIIASCII碼放到碼放到ALAL中,并將字符在屏中,并將字符在屏幕上顯示幕上顯示 以下以下介紹介紹INT 21H的幾個(gè)最常用的功能的幾個(gè)最常用的功能26例例: :程序中有時(shí)需要用戶(hù)對(duì)提示做出應(yīng)答。程序中有時(shí)需要用戶(hù)對(duì)提示做出應(yīng)答。 GET_KEY: MOV AH,1;等待鍵入字符 INT 21H;結(jié)果在AL中 CMP AL,Y ;是Y? JZ YES ;是,轉(zhuǎn)YES CMP AL,N ; 是N?
16、 JZ NO ;是,轉(zhuǎn)NO JMP GET_KEY;否則繼續(xù)等待輸入 YES: NO: 27此功能調(diào)用從鍵盤(pán)輸入一串字符并把它存入用戶(hù)指定的緩沖區(qū)中。 MOV AH,MOV AH, 0AH0AH LEA DX, LEA DX, INT 2INT 21 1H H 其余單元用來(lái)存放鍵盤(pán)輸入的字符串其余單元用來(lái)存放鍵盤(pán)輸入的字符串 N1: 緩沖區(qū)長(zhǎng)度緩沖區(qū)長(zhǎng)度(最大鍵入字符數(shù)最大鍵入字符數(shù)) N2: 實(shí)際鍵入的字符數(shù)實(shí)際鍵入的字符數(shù)(不包括回車(chē)符不包括回車(chē)符) 輸入字符串的緩沖區(qū)格式 N1N21010號(hào)功能調(diào)用號(hào)功能調(diào)用-輸入字符串輸入字符串28 若用戶(hù)鍵入的字符數(shù)(包括回車(chē))定義的N1,本功能調(diào)用
17、將不再接收新的鍵入,且光標(biāo)不再向右移動(dòng)。例:設(shè)在數(shù)據(jù)段定義鍵盤(pán)緩沖區(qū)如下: STR1 DB 10,?,10 DUP(?) STR1 DB 10,?,10 DUP(?) 調(diào)用DOS功能的0AH號(hào)功能的程序段為: LEA DXLEA DX,STR1STR1 MOV AH MOV AH,0AH0AH INT 21H INT 21H此程序段最多從鍵盤(pán)接收10個(gè)按鍵(包括回車(chē))。292 2號(hào)功能調(diào)用號(hào)功能調(diào)用- - 顯示功能調(diào)用顯示功能調(diào)用(1) (1) 在顯示器上顯示一個(gè)字符在顯示器上顯示一個(gè)字符( (功能號(hào)功能號(hào)=2=2) ) MOV AH, MOV AH, 2 2 MOV DL, MOV DL, INT 21H INT 21H 例:在顯示器上顯示一個(gè)字符A MOV AH, 2 MOV DL, A ;或MOV DL, 41H INT 21H30 MOV AH, MOV AH, 9 9 LEA DX, LE
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學(xué)生禁毒教育
- 疫情防控大會(huì)課件
- 藝術(shù)節(jié)活動(dòng)組織與實(shí)施計(jì)劃
- 公司場(chǎng)地授權(quán)使用合同標(biāo)準(zhǔn)文本
- 全款買(mǎi)房合同標(biāo)準(zhǔn)文本
- a輪融資協(xié)議合同標(biāo)準(zhǔn)文本
- 繪畫(huà)技法教學(xué)步驟示范計(jì)劃
- 企業(yè)廠房轉(zhuǎn)讓合同標(biāo)準(zhǔn)文本
- 上下鋪房轉(zhuǎn)租合同標(biāo)準(zhǔn)文本
- 企業(yè)采購(gòu)紅酒合同標(biāo)準(zhǔn)文本
- 農(nóng)業(yè)無(wú)人設(shè)備智能控制與決策
- 長(zhǎng)江師范學(xué)院《C語(yǔ)言程序設(shè)計(jì)》2019-2020學(xué)年期末考試試卷
- 中國(guó)滅絕姓氏的研究報(bào)告
- 數(shù)學(xué)八年級(jí)下冊(cè)專(zhuān)題16.8 二次根式章末測(cè)試卷(拔尖卷)(人教版)(學(xué)生版)
- 35770-2022合規(guī)管理體系-要求及使用指南標(biāo)準(zhǔn)及內(nèi)審員培訓(xùn)教材
- DZ-T 0270-2014地下水監(jiān)測(cè)井建設(shè)規(guī)范
- 貴州省生態(tài)文明教育讀本(高年級(jí)) -教案(教學(xué)設(shè)計(jì))
- 四渡赤水(課件)
- 1到六年級(jí)古詩(shī)全部打印
- 成品出貨檢驗(yàn)報(bào)告模板
- 《中藥藥劑學(xué)》課件-第八章 液體制劑
評(píng)論
0/150
提交評(píng)論