![微機原理第四章_第1頁](http://file4.renrendoc.com/view/d2427917002a3022d539da3b3cfa9081/d2427917002a3022d539da3b3cfa90811.gif)
![微機原理第四章_第2頁](http://file4.renrendoc.com/view/d2427917002a3022d539da3b3cfa9081/d2427917002a3022d539da3b3cfa90812.gif)
![微機原理第四章_第3頁](http://file4.renrendoc.com/view/d2427917002a3022d539da3b3cfa9081/d2427917002a3022d539da3b3cfa90813.gif)
![微機原理第四章_第4頁](http://file4.renrendoc.com/view/d2427917002a3022d539da3b3cfa9081/d2427917002a3022d539da3b3cfa90814.gif)
![微機原理第四章_第5頁](http://file4.renrendoc.com/view/d2427917002a3022d539da3b3cfa9081/d2427917002a3022d539da3b3cfa90815.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
4.2.4過程定義偽指令PROC、ENDP過程就是子程序。一個過程可以被其它程序所調(diào)用(用CALL指令),過程的最后一條指令一般是返回指令(RET)。過程定義偽指令的格式為
<過程名>
PROC[類型]……RET
<過程名>
ENDP注意:PROC和ENDP必須成對出現(xiàn)。1過程的類型有兩種:
NEAR——(默認類型)表示段內(nèi)調(diào)用
FAR——表示段間調(diào)用
調(diào)用一個過程的格式為:
CALL
<過程名>24.2.5宏定義偽指令如果需要多次使用同一個程序段,可以將這個程序段定義為一個”宏指令”,然后在需要時,可簡單地用宏指令名來代替這個程序段。指令的格式為:<宏指令名>
MACRO
[形參表]
<宏定義體>
ENDM3例:兩個數(shù)之和的宏定義和宏調(diào)用。宏定義為:DADDMACROX,Y,ZMOVAX,XADDAX,YMOVZ,AX
ENDMX、Y、Z是形式參數(shù)。調(diào)用宏DADD時可寫為:
DADD
DATA1,DATA2,SUMDATA1,DATA2,SUM是實際參數(shù),由它們替換定義中的X、Y、Z。4宏調(diào)用與過程(子程序)調(diào)用都是一次定義,多次調(diào)用。它們之間的差別是:①執(zhí)行形式:宏命令偽指令由宏匯編程序在匯編過理中進行處理,而CALL、RET則是由CPU執(zhí)行的指令。②匯編結(jié)果:宏命令偽指令匯編后被展開。③執(zhí)行速度:宏命令執(zhí)行速度較快(因無調(diào)用轉(zhuǎn)移)④
占用內(nèi)存:宏指令簡化了源程序,但不能簡化目標程序,并不節(jié)省內(nèi)存單元。使用過程(子程序)可以節(jié)省代碼占用的內(nèi)存空間。5宏展開:匯編程序會把宏調(diào)用按宏定義展開。例如:宏定義為:DisplayMACROstringLEADX,stringMOVAH,9INT21HENDM程序中宏調(diào)用:……DISPLAYERROR_MESSAGEDISPLAYEXIT_MESSAGE……匯編后的結(jié)果:(帶有+號的指令為宏展開后的結(jié)果)……+LEADX,ERROR_MESSAGE+MOVAH,9+INT21H+LEADX,EXIT_MESSAGE+MOV AH,9+INT21H……64.2.6匯編結(jié)束偽指令END匯編語言源程序的最后,要加匯編結(jié)束偽指令END,以使匯編程序結(jié)束匯編。格式:END[表達式]END后跟的表達式通常就是程序第一條指令的標號,指示程序的啟動地址(要執(zhí)行的第一條指令的地址)。74.3DOS系統(tǒng)功能調(diào)用介紹系統(tǒng)功能調(diào)用——由OS提供的一組實現(xiàn)特殊功能的子程序供程序員在程序中調(diào)用,以減輕編程工作量。系統(tǒng)功能調(diào)用有兩種,一種稱為DOS功能調(diào)用,另一種稱為BIOS功能調(diào)用。用戶程序在調(diào)用這些系統(tǒng)服務程序時,不是用CALL命令,而是采用軟中斷指令INTn來實現(xiàn)。在DOS系統(tǒng)中,功能調(diào)用都是用軟中斷指令INT21H來實現(xiàn)的。8INT2lH功能大致可以分為四個方面:設備管理、目錄管理、文件管理和其它。D0S系統(tǒng)功能調(diào)用的使用方法如下:① AH←功能號;② 設置該功能所要求的其他入口參數(shù);③ 執(zhí)行INT21H指令;分析出口參數(shù)。以下介紹INT21H的幾個最常用的功能。9關于數(shù)據(jù)輸入和輸出我們這里只討論鍵盤輸入和顯示輸出,調(diào)用系統(tǒng)功能需要提供入口參數(shù)及所調(diào)用的功能號,調(diào)用結(jié)束返回結(jié)果。1.DOS鍵盤功能調(diào)用(1)從鍵盤輸入一個字符(功能號=1)
MOVAH,1INT21H<AL中有鍵入的字符>
10例:程序中有時需要用戶對提示做出應答。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)輸入字符串(功能號=0AH)此功能調(diào)用從鍵盤輸入一串字符并把它存入用戶指定的緩沖區(qū)中。
MOVAH,
0AH
LEADX,<字符串緩沖區(qū)首地址>
INT21H
(預留的N1個字節(jié)的存儲單元)
0DHN2N1N1:緩沖區(qū)長度(最大鍵入字符數(shù))N2:實際鍵入的字符數(shù)(不包括回車符)用戶定義的輸入字符串的緩沖區(qū)格式12若用戶鍵入的字符數(shù)(包括回車)≥定義的N1,本功能調(diào)用將不再接收新的鍵入,且光標不再向右移動。例:設在數(shù)據(jù)段定義鍵盤緩沖區(qū)如下:
STR1DB10,?,10DUP(?)調(diào)用DOS功能的0AH號功能的程序段為:
LEADX,STR1MOVAH,0AHINT21H此程序段最多從鍵盤接收10個按鍵(包括回車)。132.DOS顯示功能調(diào)用(1)在顯示器上顯示一個字符(功能號=2)
MOVAH,2
MOVDL,<要顯示的字符>INT21H例:在顯示器上顯示一個字符‘A’MOVAH,2MOVDL,’A’;或MOVDL,
41HINT21H14
MOVAH,9LEADX,<字符串>
INT21H注意:被顯示的字符串必須以’$’結(jié)束。(2)顯示字符串(功能號=9)15例:在屏幕上顯示:’HELLO,WORLD!’;在數(shù)據(jù)段定義字符串:DATASEGMENTSTR1DB‘HELLO,WORLD!$’DATAENDS;在代碼段中進行顯示輸出
MOVAH,9LEADX,STR1INT21H完整的程序:HELLOW.ASM163.退回DOS功能調(diào)用(4CH)一個實際可運行的用戶程序在執(zhí)行完后,應該返回到DOS提示符狀態(tài)(簡稱為返回DOS),簡單的使用HLT指令使CPU停止執(zhí)行將無法將控制權(quán)交還給DOS操作系統(tǒng)。為了能使程序正常退出并返回DOS,可使用DOS系統(tǒng)功能調(diào)用的4CH號功能,用4CH號功能返回DOS的程序段如下:
MOVAH,4CH;功能號送AHINT
21H;返回DOS17BIOS功能調(diào)用BIOS:基本輸入輸出系統(tǒng),是固化在EPROM中的一組實現(xiàn)基本輸入輸出功能的子程序。BIOS調(diào)用通過多個軟中斷提供,調(diào)用方法為:
MOVAH,<功能號>
<設置入口參數(shù),一般將參數(shù)放在寄存器中> INT <中斷類型>
BIOS中的幾個主要中斷類型如下:
INT10H——屏幕顯示
INT13H——磁盤操作
INT14H——串行口操作
INT16H——鍵盤操作 INT17H——打印機操作 每類中斷由包含許多子功能,調(diào)用時通過功能號指定。 每個中斷包含的主要功能可查閱相關書籍。18匯編語言的一個實例:
HELLOW.ASM
194.4匯編語言程序設計基礎4.4.1概述1.程序質(zhì)量(正確性和完整性;易讀性;執(zhí)行時間和效率;所占內(nèi)存的大小。)2.匯編語言程序設計的步驟:1-根據(jù)實際問題抽象出數(shù)學模型,確定算法2-畫出程序框圖(流程圖)
3-分配內(nèi)存工作單元和寄存器
4-根據(jù)框圖編寫源程序,存成.ASM文件
5-對源程序匯編,生成.OBJ目標文件
6-把.OBJ文件連接成.EXE執(zhí)行文件
7-運行、調(diào)試3.源程序的基本結(jié)構(gòu):順序、分支、循環(huán)、過程
20(1)用方框表示工作框,框中用簡明語言標明要完成的功能(2)用菱形框表示判斷框
框中標明比較、判斷和條件如何繪制程序框圖(流程圖)?NY?21(4)各框之間用直線連起來表示程序走向??蛑袠嗣髯映绦蛎?入口參數(shù)等)(3)用
框表示調(diào)用子程序或過程。22匯編語言上機過程YYYNNN有錯?有錯?有錯?結(jié)束匯編輸入(修改)源程序連接運行查錯開始用EDIT,NOTEPAD等任何文本編輯器。源程序存為.ASM文件
用MASM宏匯編程序進行匯編。匯編后生成.OBJ目標文件。命令格式:MASM<源文件名.ASM>;
用LINK連接程序進行連接。連接后生成.EXE可執(zhí)行文件。命令格式:LINK<目標文件名.OBJ>;
用TD、DEBUG等調(diào)試程序進行調(diào)試。命令格式:TD<可執(zhí)行文件名.EXE>
234.4.2順序程序順序程序是最常見、最基本的程序結(jié)構(gòu),CPU按照指令的排列順序逐條執(zhí)行。例子:對于三個8位無符號數(shù)86H,34H,21H,編寫S=86H*34H-21H的程序。分析:1.有三個數(shù)參加運算,所以要定義三個源操作數(shù)2.還需要定義一個變量來存放結(jié)果,因運算中有乘法,結(jié)果為16位。3.運算中要用到減法指令和乘法指令,而三個操作數(shù)為無符號數(shù),所以乘法指令用MUL.畫出程序流程圖如右圖所示。取被乘數(shù)取乘數(shù)取第三個操作數(shù)將減數(shù)擴展為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];取第三個數(shù)movbh,0;減數(shù)擴展為16位subax,bx;相減mov[di],ax;將結(jié)果S送result單元
movah,4ch;返回dosint21hCodeendsendstart程序如下:25標號:條件滿足?處理4.4.3分支程序NYIF…THEN結(jié)構(gòu)程序結(jié)構(gòu):
… 測試/比較指令(TEST/CMP)條件轉(zhuǎn)移指令(Jx標號)
處理體
標號:其他指令 …26程序結(jié)構(gòu):
;測試條件TEST/CMP指令
Jx標號1
處理體P1JMP標號2標號1:
處理體P2標號2:其他指令…條件滿足?處理P1處理P2標號1:標號2:條件1條件2IF…THEN…ELSE結(jié)構(gòu)27標號1:條件1成立?P1NYCASE結(jié)構(gòu)程序結(jié)構(gòu):…TEST/CMP指令(測試條件1)
Jx標號1;不滿足轉(zhuǎn)標號1
處理體P1…
JMP標號n+1標號1:TEST/CMP指令(測試條件2)
Jx標號2;不滿足轉(zhuǎn)標號2
處理體P2…
JMP標號n+1標號2:TEST/CMP指令(測試條件3)Jx標號3;不滿足轉(zhuǎn)標號3
處理體P3…JMP標號n+1標號3:TEST/CMP指令(測試條件4)……標號n+1:(公共出口)條件2成立?條件n成立?…Pn+1標號2:標號n:標號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)),但多個循環(huán)體之間不能交叉,控制條件不能混淆。32掌握以下幾點:調(diào)用子程序用CALL指令,返回調(diào)用程序用RET指令。子程序允許嵌套調(diào)用。進入子程序后首先要保護主程序的運行狀態(tài)(標志位)和使用的寄存器內(nèi)容(稱為保護現(xiàn)場),退出子程序前要恢復現(xiàn)場。調(diào)用前要預先確定子程序中要使用哪些寄存器,并定義入
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 五一座談會方案
- 基于流形擬合的對抗性防御算法研究
- 2025年六安b2貨運資格證考試題庫
- 大氣湍流與水下環(huán)境下單像素成像研究
- 影視導演藝術與音像制品制作考核試卷
- 2025年外研版三年級起點九年級生物上冊月考試卷含答案
- 2025年人教版八年級地理上冊階段測試試卷
- 智能交通資源共享合同(2篇)
- 智慧城市平臺合作開發(fā)合同(2篇)
- 服務申請高新企業(yè)保密協(xié)議書(2篇)
- 淋巴瘤的治療及護理
- 骨科抗菌藥物應用分析報告
- 中職安全管理方案
- 百詞斬托福詞匯excel版本
- 高考寫作指導常見議論文論證方法知識梳理與舉例解析課件27張
- (完整word版)高中英語3500詞匯表
- 玻璃反應釜安全操作及保養(yǎng)規(guī)程
- 高中英語新課標詞匯表(附詞組)
- 證券公司信用風險和操作風險管理理論和實踐中金公司
- 一級建造師繼續(xù)教育最全題庫及答案(新)
- 2022年高考湖南卷生物試題(含答案解析)
評論
0/150
提交評論