




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、4. 6子程序設(shè)計(jì)4.6.1 子程序概述4& 子程序概述-子程序的引出S=|x|1 + 1|Y|1 + 11 z分析:1.計(jì)算韻函數(shù)需要多次使用求絕對值運(yùn)算,2. 唯一差別是對程序變量賦不同的值。問題:1.程序設(shè)計(jì)的過程繁瑣,2. 源程序代碼冗余。解決方法:若把求絕對值編制成獨(dú)立的程序段,當(dāng)求絕對值時(shí),就將控制轉(zhuǎn)向它,執(zhí)行后,將絕對值送 回使用它的程序。#子程序或過程:可被其它程序使用的獨(dú)立程序段, 稱為子程主程序或調(diào)用程序:使用它的程序。子程序設(shè)計(jì)是模塊化程序設(shè)計(jì)的基本技術(shù) 適用情況:1. 當(dāng)程序中有多處相同功能的程序段時(shí),這個(gè)程序段就可以設(shè)計(jì)成子程序。2. 當(dāng)解決復(fù)雜問題時(shí),把復(fù)雜問題分解
2、成若干簡單的子問 題,每個(gè)子問題設(shè)計(jì)成子程序。三使用子程序的好處:1 簡化程序設(shè)計(jì)的過程,減少工作量,節(jié)省時(shí)間;2源程序縮短,從而節(jié)省匯編時(shí)間和存儲(chǔ)目標(biāo)碼的 存儲(chǔ)空間;3增強(qiáng)源程序的可讀性,便于調(diào)試和維護(hù);4有利于程序模塊化、結(jié)構(gòu)化,符合自頂向下的程 序設(shè)計(jì)思想;5編制好的子程序,可供其它開發(fā)軟件調(diào)用。四.子程序設(shè)計(jì)時(shí),需要考慮的問題#子程序的定義若編制的程序具有相對獨(dú)立的功能并在 匯編后,可以被其他主程序調(diào)用,則這 一過程稱為子程序的定義。14.6.1 |四.子程序設(shè)計(jì)時(shí),需要考慮的問題HLTA1子程序結(jié)束#子程序的定義2.主程序與子程序之間的調(diào)用與返回HLT子程序的定義2主程序與子程序之間
3、的調(diào)用與返回3. 主程序與子程序之間的參數(shù)傳遞四.子程序設(shè)計(jì)時(shí),需要考慮的問題囤HLTA1子程序結(jié)束#子程序的定義2主程序與子程序之間的調(diào)用與返回3. 主程序與子程序之間的參數(shù)傳遞4. 保護(hù)現(xiàn)場與恢復(fù)現(xiàn)場MAIN主程X 口參數(shù) 調(diào)用A1子程序恢復(fù)現(xiàn)場 返回主程序出口參數(shù)4. 6子程序設(shè)計(jì)4.6.14.6.24.6.34.6.44.6.5子程序概述子程序(過程)定義偽指令子程序調(diào)用與返回指令子程序設(shè)計(jì)方法子程序設(shè)計(jì)舉例4. 6.2子程序(過程)定義偽指令子程序定義偽指令有兩條:PROC和ENDP#PNPNPROCRETENDPNEAR / FAR、;說明過程開始 近的遠(yuǎn)的;過程體:說明過程結(jié)束說
4、明:近一這個(gè)子程序只能被與它處于同一個(gè)代碼段的主程序調(diào)用 遠(yuǎn)一這個(gè)子程序可以被與它處于不同代碼段的主程序調(diào)用1462 |例 在代碼段CSEG段中定義兩個(gè)子程序SUB1和SUB2CSEGSUBlSUB1SUB2SUB2CSEGSEGMENTPROCENDPPROCENDPENDSENDNEARFAR4. 6. 3子程序調(diào)用與返回指令調(diào)用:保護(hù)斷點(diǎn) 是cs、IP全保護(hù),還只財(cái)IP? 把子程序的入口地址CS、IP史鑑?返回:將保存的斷點(diǎn)處值送入CS、IP1463 |#- 調(diào)用的分類1.按主程序與子程序是否在同一個(gè)代碼段J段內(nèi)調(diào)用近調(diào)用1段間調(diào)用遠(yuǎn)調(diào)用irJ段內(nèi)調(diào)用是指在調(diào)用和返回過程中,轉(zhuǎn)返地址不涉
5、及 CS的變化,只通過IP內(nèi)容的變化實(shí)現(xiàn)控制的轉(zhuǎn)返。段間調(diào)用是指在調(diào)用和返回過程中,轉(zhuǎn)返地址需要 CS的變化,由CS和IP的變化共同決定控制的轉(zhuǎn)返。調(diào)用的分類2.按子程序入口地址是直接還是間接給岀J黛接調(diào)用 L間接調(diào)甫直接調(diào)用即在調(diào)用指令里,直接給出子程序名或入口 地址的標(biāo)號。間接調(diào)用是在調(diào)用指令中,通過某寄存器或某存儲(chǔ) 單元指出子程序的入口地址。2.當(dāng)被調(diào)用子程序?yàn)檫h(yuǎn)過程時(shí):1463 |格式:CALL PROC_NAME ;直接調(diào)用操作:1 當(dāng)被調(diào)用子程序?yàn)榻^程時(shí):(1) 保護(hù)斷點(diǎn),即把當(dāng)前指令指針I(yè)P的內(nèi)容壓入堆棧JSP SP - 2 t(SP+l, SP) IP(2)把子程序的入口地址
6、送入IPIP OFFSET PROC_NAME(I)保護(hù)斷點(diǎn),將CS內(nèi)容和IP的內(nèi)容壓棧SP SP - 2YI (SP+1, SP) - CSr SP SP - 2(SP+1, SP) IPSP2SP-2SPIPCS(2 )把子程序所在的段基址送入CS,其所處的偏移地址送入IP:J CS J SEG PROC_NAME IP OFFSET PROC_NAME#三返回指令格式:RET操作:斷點(diǎn)送入CS、段內(nèi)返回JIP Jsp2.段間返回IP JSP JCS JIsp J1463 |IP-(SP +1, SP)-SP + 2-(SP +1, SP)-SP + 2-(SP + 1, SP)-SP +
7、 2#4. & 4子程序設(shè)計(jì)方法一主程序與子程序之間的參數(shù)傳遞入口參數(shù):主程序調(diào)用子程序時(shí),傳送給子程序的需要 處理的數(shù)據(jù)。出口參數(shù):子程序運(yùn)行完后,傳送給主程序的結(jié)果。MAIN主程序入口參數(shù)CALL Al出口參數(shù)Al子程序PROCHLTRETENDP參數(shù)傳遞的方法:釣定寄存器法” 易建存儲(chǔ)単芫法堆棧法:約定參數(shù)地址指針法: #1.約定寄存器法(適用參數(shù)少的情況)即主程序和子程序之間,事先約定一些存放參數(shù)的 通用寄存器,將子程序的入口和出口參數(shù)放到事先約定好 的寄存器中。2.約定參數(shù)地址指針法(適用參數(shù)多的情況)當(dāng)要傳遞的參數(shù)較多時(shí),采用約定地址指針法,即主程序 將入口參數(shù)存放的地址送入約定的
8、地址指針,然后調(diào)用子程 序,子程序從地址指針指出的地址取出所需參數(shù)。當(dāng)出口參 數(shù)較多時(shí),可存入內(nèi)存某區(qū)域,然后把其首地址指針放入約 定的寄存器中,供主程序使用。二現(xiàn)場的保護(hù)與恢復(fù) 現(xiàn)場:即某些寄存器的值和所需的標(biāo)志位的值。方法:可利用堆棧來實(shí)現(xiàn)。說明:可在主程序中完成,也可在子程序中完成。為保持主程序和子程序之間的相對獨(dú)立性,若在主程序中保護(hù)現(xiàn)場,則一定在主程序中恢復(fù)現(xiàn)場。例子:保護(hù)現(xiàn)場PUSH AX 恢復(fù)現(xiàn)場POP AX#子程序Al PROCPUSHAXPUSHBXPUSHCXPOPCXPOPBXPOPAXRETENDPAl;保護(hù)現(xiàn)場;恢復(fù)現(xiàn)場#二子程序說明文件1465 |4. 6. 5子程
9、序設(shè)計(jì)舉例子程序設(shè)計(jì)的步驟1確定功能界面功能界面:即是主程序和子程序各自完成什么功能。2 確定參數(shù)界面參數(shù)界面:即分析有哪些入口參數(shù)?哪些出口參數(shù)? 進(jìn)而確定合適的參數(shù)傳遞方法。3 編制子程序說明文件4分別設(shè)計(jì)主程序和子程序,并進(jìn)行調(diào)試。作用:使子程序便于閱讀、維護(hù)和使用。包含內(nèi)容:1 子程序名: 子程序入口地址。2子程序功能:子程序要完成的任務(wù)。3 入口參數(shù): 主程序提供給子程序的入口參數(shù) (包括參數(shù)個(gè)數(shù)及存放位置)。4 出口參數(shù):子程序提供給主程序的運(yùn)行結(jié)果,即出口參數(shù)(包括參數(shù)個(gè)數(shù)及存放位置)5 使用寄存器:說明子程序運(yùn)行后,有哪些寄存器的內(nèi)容 被破壞?1465 |約定寄存器法z = V
10、2x+V3y+V150例1編制程序計(jì)算:r=設(shè)X、Y為小于20000的無符號字?jǐn)?shù)據(jù),計(jì)算結(jié)果存入Z單元。 分析:1 功能:設(shè)計(jì)一個(gè)子程序和一個(gè)主程序子程序求雙字節(jié)整數(shù)的平方根的整數(shù)部分,主程序完成將三次開方的平方根相加。2入口參數(shù):被開方數(shù)放在DX中,出口參數(shù):平方根放在DX中o3. 子程序說明文件(1) 子程序名:SQROOT1 ;(2) 子程序功能:求雙字節(jié)整數(shù)的平方根的整數(shù)部分;(3) 入口參數(shù):被開方數(shù)在DX中;(4) 出口參數(shù):平方根在DX中;(5) 使用的寄存器:BX, CX, DX及標(biāo)志寄存器F。子程序代碼1465 |4子程序算法分析W:從1開始連續(xù)i個(gè)奇數(shù)之和是i的平方傻目0匸
11、+ 3 + 5 + 7 + 9 = 25; N =25 ”: : i = 6; F+3 + 5+ 7 + 9 +11=36 ; N = 36:結(jié)論: 整數(shù)N的平方根可以通過從N中依次咸去1; 3, 5.的連續(xù)奇數(shù),所夠減的次數(shù)i即是該數(shù)平方根。例如,SUB DX, BX jADD BX, 2 IZl-31016-7=99-9=0結(jié)束循環(huán)兩個(gè)條 #:正好減為0 和不夠減一共減了5次,則5就是25的平方根。SQROOT1PROCNEAR;子程序開始MOVBX, 1;形成奇數(shù),初始值為XORex, ex;減奇數(shù)個(gè)數(shù)寄存器清0SQRTl:SUBDX, BXANDDX, DXJZSQRT2JSSQRT3
12、INCexADDBX, 2JMPSQRTlSQRT2:INCexSQRT3:MOVDX, CX;存平方根RET;返回SQROOT1ENDP;子程序結(jié)束DSEGSEGMENTXDW12345YDW2469ZDW?DSEGENDSCSEGSEGMENTMOV DX, X ADD DX, DX CALL SQROOT1 PUSH DXMOV DX, YMOV AX, DX ADD DX, DX ADD DX, AXCALL SQROOT1 PUSH DXMOV DX, 150 CALL SQROOT1主要程序代碼|POP AXADD AX, DXPOP DXADD AX, DXMOV Z, AXMO
13、V AH, 4CHINT 21HSQROOT1 PROC NEARRETSQROOT1 ENDPCSEG ENDSEND START1465 |#約定參數(shù)地址指針法編制程序完成分別統(tǒng)計(jì)三組字?jǐn)?shù)據(jù)中正數(shù)的個(gè)數(shù)。已知這三 組字?jǐn)?shù)據(jù)分別存放在內(nèi)存SI、S2、S3開始的單元,每組字?jǐn)?shù)據(jù)的長度分別存放在內(nèi)存LJ L2、L3字變量,要求將統(tǒng)計(jì) 的結(jié)果分別存放在內(nèi)存Nl、N2、N3字變量。分析:1.功能:設(shè)計(jì)一個(gè)子程序和一個(gè)主程序子程序完成對一組字?jǐn)?shù)據(jù)中正數(shù)個(gè)數(shù)的統(tǒng)計(jì), 主程序完成調(diào)用子程序并將統(tǒng)計(jì)結(jié)果存入指定變量。2入口參數(shù):每組字?jǐn)?shù)據(jù)首地址放在SI中,數(shù)據(jù)長度放在CXo出口參數(shù):正數(shù)個(gè)數(shù)放在AX中。3.
14、子程序說明文件(1)子程序名:PCOUNT;子程序功能:統(tǒng)計(jì)一組字?jǐn)?shù)據(jù)中正數(shù)個(gè)數(shù);(3)入口參數(shù):每組字?jǐn)?shù)據(jù)首地址放在SI中,數(shù)據(jù)長度放在CX中;(4) 出口參數(shù):正數(shù)個(gè)數(shù)放在AX中;(5)使用的寄存器:AX, CX, 寄存器F。SI, DX及標(biāo)志1465 |子程序代碼PCOUNTPROCNEARXORAX, AXCONT:MOVDX, SIANDDX, DXJSNEXTINCAX;子程序開始#NEXT:ADDSI, 2LOOPCONTRETPCOUNTENDP;子程序結(jié)束S1S2S3L1L2L3N1N2N3DWDWDWDWDWDWDWDWDW1,2, 45,3, 21,34, 20, 98,1234, -30 20005001
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 水泥沙子采購合同
- 授權(quán)經(jīng)銷合同協(xié)議
- 農(nóng)業(yè)科技園區(qū)綜合開發(fā)合同
- 短期租賃服務(wù)意外免責(zé)協(xié)議
- 網(wǎng)絡(luò)信息技術(shù)支持協(xié)議
- 商場裝修合同與商場裝修合同
- 打井承包合同
- 手房轉(zhuǎn)讓買賣協(xié)議
- 新版不定期勞動(dòng)合同書(33篇)
- 瓦工貼磚施工合同
- 2025年高壓電工作業(yè)考試國家總局題庫及答案(共280題)
- 2023行政主管年終工作報(bào)告五篇
- 印刷公司生產(chǎn)部2025年年度工作總結(jié)及2025年工作計(jì)劃
- 2025年中考語文一輪復(fù)習(xí):八年級下冊知識(shí)點(diǎn)梳理
- GA/T 1003-2024銀行自助服務(wù)亭技術(shù)規(guī)范
- 小班孵雞蛋課程設(shè)計(jì)
- 糖尿病的麻醉管理
- 《商務(wù)溝通-策略、方法與案例》課件 第四章 非言語溝通
- 《金融衍生品》課件
- 公園衛(wèi)生保潔考核表
- 2024年居間完整協(xié)議書居間完整協(xié)議書
評論
0/150
提交評論