微機(jī)原理第四章_第1頁
微機(jī)原理第四章_第2頁
微機(jī)原理第四章_第3頁
微機(jī)原理第四章_第4頁
微機(jī)原理第四章_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

4.2.4過程定義偽指令PROC、ENDP過程就是子程序。一個(gè)過程可以被其它程序所調(diào)用(用CALL指令),過程的最后一條指令一般是返回指令(RET)。過程定義偽指令的格式為

<過程名>

PROC[類型]……RET

<過程名>

ENDP注意:PROC和ENDP必須成對(duì)出現(xiàn)。1過程的類型有兩種:

NEAR——(默認(rèn)類型)表示段內(nèi)調(diào)用

FAR——表示段間調(diào)用

調(diào)用一個(gè)過程的格式為:

CALL

<過程名>24.2.5宏定義偽指令如果需要多次使用同一個(gè)程序段,可以將這個(gè)程序段定義為一個(gè)”宏指令”,然后在需要時(shí),可簡(jiǎn)單地用宏指令名來代替這個(gè)程序段。指令的格式為:<宏指令名>

MACRO

[形參表]

<宏定義體>

ENDM3例:兩個(gè)數(shù)之和的宏定義和宏調(diào)用。宏定義為:DADDMACROX,Y,ZMOVAX,XADDAX,YMOVZ,AX

ENDMX、Y、Z是形式參數(shù)。調(diào)用宏DADD時(shí)可寫為:

DADD

DATA1,DATA2,SUMDATA1,DATA2,SUM是實(shí)際參數(shù),由它們替換定義中的X、Y、Z。4宏調(diào)用與過程(子程序)調(diào)用都是一次定義,多次調(diào)用。它們之間的差別是:①執(zhí)行形式:宏命令偽指令由宏匯編程序在匯編過理中進(jìn)行處理,而CALL、RET則是由CPU執(zhí)行的指令。②匯編結(jié)果:宏命令偽指令匯編后被展開。③執(zhí)行速度:宏命令執(zhí)行速度較快(因無調(diào)用轉(zhuǎn)移)④

占用內(nèi)存:宏指令簡(jiǎn)化了源程序,但不能簡(jiǎn)化目標(biāo)程序,并不節(jié)省內(nèi)存單元。使用過程(子程序)可以節(jié)省代碼占用的內(nèi)存空間。5宏展開:匯編程序會(huì)把宏調(diào)用按宏定義展開。例如:宏定義為:DisplayMACROstringLEADX,stringMOVAH,9INT21HENDM程序中宏調(diào)用:……DISPLAYERROR_MESSAGEDISPLAYEXIT_MESSAGE……匯編后的結(jié)果:(帶有+號(hào)的指令為宏展開后的結(jié)果)……+LEADX,ERROR_MESSAGE+MOVAH,9+INT21H+LEADX,EXIT_MESSAGE+MOV AH,9+INT21H……64.2.6匯編結(jié)束偽指令END匯編語言源程序的最后,要加匯編結(jié)束偽指令END,以使匯編程序結(jié)束匯編。格式:END[表達(dá)式]END后跟的表達(dá)式通常就是程序第一條指令的標(biāo)號(hào),指示程序的啟動(dòng)地址(要執(zhí)行的第一條指令的地址)。74.3DOS系統(tǒng)功能調(diào)用介紹系統(tǒng)功能調(diào)用——由OS提供的一組實(shí)現(xiàn)特殊功能的子程序供程序員在程序中調(diào)用,以減輕編程工作量。系統(tǒng)功能調(diào)用有兩種,一種稱為DOS功能調(diào)用,另一種稱為BIOS功能調(diào)用。用戶程序在調(diào)用這些系統(tǒng)服務(wù)程序時(shí),不是用CALL命令,而是采用軟中斷指令I(lǐng)NTn來實(shí)現(xiàn)。在DOS系統(tǒng)中,功能調(diào)用都是用軟中斷指令I(lǐng)NT21H來實(shí)現(xiàn)的。8INT2lH功能大致可以分為四個(gè)方面:設(shè)備管理、目錄管理、文件管理和其它。D0S系統(tǒng)功能調(diào)用的使用方法如下:① AH←功能號(hào);② 設(shè)置該功能所要求的其他入口參數(shù);③ 執(zhí)行INT21H指令;分析出口參數(shù)。以下介紹INT21H的幾個(gè)最常用的功能。9關(guān)于數(shù)據(jù)輸入和輸出我們這里只討論鍵盤輸入和顯示輸出,調(diào)用系統(tǒng)功能需要提供入口參數(shù)及所調(diào)用的功能號(hào),調(diào)用結(jié)束返回結(jié)果。1.DOS鍵盤功能調(diào)用(1)從鍵盤輸入一個(gè)字符(功能號(hào)=1)

MOVAH,1INT21H<AL中有鍵入的字符>

10例:程序中有時(shí)需要用戶對(duì)提示做出應(yīng)答。GET_KEY:MOVAH,1

;等待鍵入字符

INT21H

;結(jié)果在AL中

CMPAL,’Y’ ;是’Y’?JZYES ;是,轉(zhuǎn)YESCMPAL,’N’ ;是’N’?JZNO ;是,轉(zhuǎn)NOJMPGET_KEY ;否則繼續(xù)等待輸入YES: …

…NO: …11(2)輸入字符串(功能號(hào)=0AH)此功能調(diào)用從鍵盤輸入一串字符并把它存入用戶指定的緩沖區(qū)中。

MOVAH,

0AH

LEADX,<字符串緩沖區(qū)首地址>

INT21H

(預(yù)留的N1個(gè)字節(jié)的存儲(chǔ)單元)

0DHN2N1N1:緩沖區(qū)長(zhǎng)度(最大鍵入字符數(shù))N2:實(shí)際鍵入的字符數(shù)(不包括回車符)用戶定義的輸入字符串的緩沖區(qū)格式12若用戶鍵入的字符數(shù)(包括回車)≥定義的N1,本功能調(diào)用將不再接收新的鍵入,且光標(biāo)不再向右移動(dòng)。例:設(shè)在數(shù)據(jù)段定義鍵盤緩沖區(qū)如下:

STR1DB10,?,10DUP(?)調(diào)用DOS功能的0AH號(hào)功能的程序段為:

LEADX,STR1MOVAH,0AHINT21H此程序段最多從鍵盤接收10個(gè)按鍵(包括回車)。132.DOS顯示功能調(diào)用(1)在顯示器上顯示一個(gè)字符(功能號(hào)=2)

MOVAH,2

MOVDL,<要顯示的字符>INT21H例:在顯示器上顯示一個(gè)字符‘A’MOVAH,2MOVDL,’A’;或MOVDL,

41HINT21H14

MOVAH,9LEADX,<字符串>

INT21H注意:被顯示的字符串必須以’$’結(jié)束。(2)顯示字符串(功能號(hào)=9)15例:在屏幕上顯示:’HELLO,WORLD!’;在數(shù)據(jù)段定義字符串:DATASEGMENTSTR1DB‘HELLO,WORLD!$’DATAENDS;在代碼段中進(jìn)行顯示輸出

MOVAH,9LEADX,STR1INT21H完整的程序:HELLOW.ASM163.退回DOS功能調(diào)用(4CH)一個(gè)實(shí)際可運(yùn)行的用戶程序在執(zhí)行完后,應(yīng)該返回到DOS提示符狀態(tài)(簡(jiǎn)稱為返回DOS),簡(jiǎn)單的使用HLT指令使CPU停止執(zhí)行將無法將控制權(quán)交還給DOS操作系統(tǒng)。為了能使程序正常退出并返回DOS,可使用DOS系統(tǒng)功能調(diào)用的4CH號(hào)功能,用4CH號(hào)功能返回DOS的程序段如下:

MOVAH,4CH;功能號(hào)送AHINT

21H;返回DOS17BIOS功能調(diào)用BIOS:基本輸入輸出系統(tǒng),是固化在EPROM中的一組實(shí)現(xiàn)基本輸入輸出功能的子程序。BIOS調(diào)用通過多個(gè)軟中斷提供,調(diào)用方法為:

MOVAH,<功能號(hào)>

<設(shè)置入口參數(shù),一般將參數(shù)放在寄存器中> INT <中斷類型>

BIOS中的幾個(gè)主要中斷類型如下:

INT10H——屏幕顯示

INT13H——磁盤操作

INT14H——串行口操作

INT16H——鍵盤操作 INT17H——打印機(jī)操作 每類中斷由包含許多子功能,調(diào)用時(shí)通過功能號(hào)指定。 每個(gè)中斷包含的主要功能可查閱相關(guān)書籍。18匯編語言的一個(gè)實(shí)例:

HELLOW.ASM

194.4匯編語言程序設(shè)計(jì)基礎(chǔ)4.4.1概述1.程序質(zhì)量(正確性和完整性;易讀性;執(zhí)行時(shí)間和效率;所占內(nèi)存的大小。)2.匯編語言程序設(shè)計(jì)的步驟:1-根據(jù)實(shí)際問題抽象出數(shù)學(xué)模型,確定算法2-畫出程序框圖(流程圖)

3-分配內(nèi)存工作單元和寄存器

4-根據(jù)框圖編寫源程序,存成.ASM文件

5-對(duì)源程序匯編,生成.OBJ目標(biāo)文件

6-把.OBJ文件連接成.EXE執(zhí)行文件

7-運(yùn)行、調(diào)試3.源程序的基本結(jié)構(gòu):順序、分支、循環(huán)、過程

20(1)用方框表示工作框,框中用簡(jiǎn)明語言標(biāo)明要完成的功能(2)用菱形框表示判斷框

框中標(biāo)明比較、判斷和條件如何繪制程序框圖(流程圖)?NY?21(4)各框之間用直線連起來表示程序走向??蛑袠?biāo)明子程序名字(入口參數(shù)等)(3)用

框表示調(diào)用子程序或過程。22匯編語言上機(jī)過程YYYNNN有錯(cuò)?有錯(cuò)?有錯(cuò)?結(jié)束匯編輸入(修改)源程序連接運(yùn)行查錯(cuò)開始用EDIT,NOTEPAD等任何文本編輯器。源程序存為.ASM文件

用MASM宏匯編程序進(jìn)行匯編。匯編后生成.OBJ目標(biāo)文件。命令格式:MASM<源文件名.ASM>;

用LINK連接程序進(jìn)行連接。連接后生成.EXE可執(zhí)行文件。命令格式:LINK<目標(biāo)文件名.OBJ>;

用TD、DEBUG等調(diào)試程序進(jìn)行調(diào)試。命令格式:TD<可執(zhí)行文件名.EXE>

234.4.2順序程序順序程序是最常見、最基本的程序結(jié)構(gòu),CPU按照指令的排列順序逐條執(zhí)行。例子:對(duì)于三個(gè)8位無符號(hào)數(shù)86H,34H,21H,編寫S=86H*34H-21H的程序。分析:1.有三個(gè)數(shù)參加運(yùn)算,所以要定義三個(gè)源操作數(shù)2.還需要定義一個(gè)變量來存放結(jié)果,因運(yùn)算中有乘法,結(jié)果為16位。3.運(yùn)算中要用到減法指令和乘法指令,而三個(gè)操作數(shù)為無符號(hào)數(shù),所以乘法指令用MUL.畫出程序流程圖如右圖所示。取被乘數(shù)取乘數(shù)取第三個(gè)操作數(shù)將減數(shù)擴(kuò)展為16位做減法結(jié)果送指定處初始化結(jié)束做乘法24DatasegmentNumdb86h,34h,21hResultdw?DataendsCodesegmentassumecs:code,ds:dataStart:movax,data

movds,ax;ds指向data段leasi,num;num的偏移地址送sileadi,result;result的偏移地址送dimoval,[si];取86hmovbl,[si+1];取34hmulbl;兩數(shù)相乘movbl,[si+2];取第三個(gè)數(shù)movbh,0;減數(shù)擴(kuò)展為16位subax,bx;相減mov[di],ax;將結(jié)果S送result單元

movah,4ch;返回dosint21hCodeendsendstart程序如下:25標(biāo)號(hào):條件滿足?處理4.4.3分支程序NYIF…THEN結(jié)構(gòu)程序結(jié)構(gòu):

… 測(cè)試/比較指令(TEST/CMP)條件轉(zhuǎn)移指令(Jx標(biāo)號(hào))

處理體

標(biāo)號(hào):其他指令 …26程序結(jié)構(gòu):

;測(cè)試條件TEST/CMP指令

Jx標(biāo)號(hào)1

處理體P1JMP標(biāo)號(hào)2標(biāo)號(hào)1:

處理體P2標(biāo)號(hào)2:其他指令…條件滿足?處理P1處理P2標(biāo)號(hào)1:標(biāo)號(hào)2:條件1條件2IF…THEN…ELSE結(jié)構(gòu)27標(biāo)號(hào)1:條件1成立?P1NYCASE結(jié)構(gòu)程序結(jié)構(gòu):…TEST/CMP指令(測(cè)試條件1)

Jx標(biāo)號(hào)1;不滿足轉(zhuǎn)標(biāo)號(hào)1

處理體P1…

JMP標(biāo)號(hào)n+1標(biāo)號(hào)1:TEST/CMP指令(測(cè)試條件2)

Jx標(biāo)號(hào)2;不滿足轉(zhuǎn)標(biāo)號(hào)2

處理體P2…

JMP標(biāo)號(hào)n+1標(biāo)號(hào)2:TEST/CMP指令(測(cè)試條件3)Jx標(biāo)號(hào)3;不滿足轉(zhuǎn)標(biāo)號(hào)3

處理體P3…JMP標(biāo)號(hào)n+1標(biāo)號(hào)3:TEST/CMP指令(測(cè)試條件4)……標(biāo)號(hào)n+1:(公共出口)條件2成立?條件n成立?…Pn+1標(biāo)號(hào)2:標(biāo)號(hào)n:標(biāo)號(hào)n+1:P2PnNNYY28DatasegmentBufferdw0086h,00h,8021hDataendsCodesegmentassumecs:code,ds:dataStart:movax,data

movds,ax;ds指向data段

movax,bufferorax,axjezero;為0跳轉(zhuǎn)jnsplus;為正數(shù)跳轉(zhuǎn)movbx,offhjmpcountiZero:movbx,0jmpcountiPlus:movbx,1Counti:movah,4ch;返回dosint21hCodeendsendstart程序如下:

1(x>0)Y=0(x=0)-1(x<0)294.4.4循環(huán)程序1.DO…WHILE<條件>結(jié)構(gòu)先執(zhí)行,再判斷條件。工作部分至少執(zhí)行一次。初始化循環(huán)體循環(huán)控制繼續(xù)循環(huán)?YN302.WHILE<條件>結(jié)構(gòu)先判斷條件,再執(zhí)行。工作部分有可能一次都不執(zhí)行。初始化循環(huán)體循環(huán)控制繼續(xù)循環(huán)?YN31注意:循環(huán)可以嵌套(多重循環(huán)),但多個(gè)循環(huán)體之間不能交叉,控制條件不能混淆。32掌握以下幾點(diǎn):調(diào)用子程序用CALL指令,返回調(diào)用程序用RET指令。子程序允許嵌套調(diào)用。進(jìn)入子程序后首先要保護(hù)主程序的運(yùn)行狀態(tài)(標(biāo)志位)和使用的寄存器內(nèi)容(稱為保護(hù)現(xiàn)場(chǎng)),退出子程序前要恢復(fù)現(xiàn)場(chǎng)。調(diào)用前要預(yù)先確定子程序中要使用哪些寄存器,并定義入

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論