




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
四、子程序結(jié)構(gòu)將反復(fù)進(jìn)行的操作編成一個(gè)子程序,這樣,只需編寫一次,測(cè)試一次便可以多次重復(fù)使用。從而提高開發(fā)的效率。實(shí)現(xiàn)模塊化的重要手段。使程序便于開發(fā)、測(cè)試和維護(hù)。主程序CALLSUB1子程序SUB1PROC斷點(diǎn)地址轉(zhuǎn)向子程序RET返回主程序四、子程序結(jié)構(gòu)將反復(fù)進(jìn)行的操作編成一個(gè)子程序,這樣,只需編寫1子程序的設(shè)計(jì)方法功能分析與說(shuō)明*子程序的名稱,功能及性能*子程序中用到的寄存器和存儲(chǔ)單元*子程序的入口參數(shù),出口參數(shù)*子程序中調(diào)用其它子程序的名稱主控?cái)?shù)據(jù)處理輸入輸出子程序的設(shè)計(jì)方法功能分析與說(shuō)明*子程序的名稱,功能及性能主控2;名稱:BCD2BIN;功能:一個(gè)字節(jié)的BCD碼轉(zhuǎn)換成二進(jìn)制數(shù);所用寄存器:CX;入口參數(shù):AL中存兩位BCD數(shù);出口參數(shù):AL存二進(jìn)制數(shù);調(diào)用其它子程序:無(wú)BCD2BINPROCNEAR(FAR)
PUSHCXMOVCH,ALANDCH,0FHMOVCL,4SHRAL,CL;/16MOVCL,10MULCL;*10ADDAL,CH;+低位POPCXRETBCD2BINENDP例5-7一個(gè)子程序;名稱:BCD2BINBCD2BINPROC3參數(shù)傳遞技術(shù)入口參數(shù)與出口參數(shù)參數(shù)傳遞方法利用寄存器傳遞參數(shù)利用存儲(chǔ)器傳遞參數(shù)利用堆棧傳遞參數(shù)1)利用寄存器傳遞參數(shù)上例5-7參數(shù)傳遞技術(shù)入口參數(shù)與出口參數(shù)1)利用寄存器傳遞參數(shù)上例54DATASEGMENTARY1DW100DUP(?)SUM1DW?ARY2DW100DUP(?)SUM2DW?DATAENDSSTACKSEGMENTSTACKSADW50DUP(?)TOPEQU
LENGTHSASTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKMAINPROCFAR例5-8.數(shù)據(jù)段定義兩個(gè)數(shù)組,編程實(shí)現(xiàn)數(shù)組段分別求和(不計(jì)溢出)。P182~183START:PUSHDSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVSP,TOPTOPEQUSIZESATOPLABELWORD利用存儲(chǔ)器傳遞參數(shù)?數(shù)據(jù)放在數(shù)據(jù)段中DATASEGMENT例5-8.數(shù)據(jù)段定義兩個(gè)5LEASI,ARY1 ;數(shù)組1地址→SIMOVCX,LENGTHARY1CALLSUM ;數(shù)組1求和LEASI,ARY2 ;數(shù)組2地址→SIMOVCX,LENGTHARY2CALLSUM ;數(shù)組2求和RETMAINENDPSUMPROCNEARXORAX,AX ;AX清0L1:ADDAX,WORDPTR[SI]INCSIINCSILOOPL1MOVWORDPTR[SI],AX
RETSUMENDPCODEENDSENDSTARTLEASI6利用存儲(chǔ)器傳遞參數(shù)數(shù)據(jù)放在數(shù)據(jù)段中數(shù)據(jù)放在代碼段中獲取參數(shù)的方法:獲得返回地址根據(jù)返回地址實(shí)現(xiàn)參數(shù)傳遞修改返回地址IPHIPLSPSP-1SP-2BPLBPHCALLSUBRDWBUFLDWBUFADWBUFBMOVAX,DX…SUBR PROC PUSH BP MOV BP,SP MOV BX,[BP+2] MOV CX,CS:[BX] MOVSI,CS:[BX+2] MOV DI,CS:[BX+4] ADD BX,6 MOV[BP+2],BX … POP BP RETSUBR ENDPMOV BX,[SP+2]利用存儲(chǔ)器傳遞參數(shù)數(shù)據(jù)放在數(shù)據(jù)段中IPHIPLSPSP-1S7利用堆棧傳遞參數(shù)DATASEGMENTBUFFER1DWBUFABUFFER2DWBUFBBUFLDW NDATAENDS主程序:LEABX,BUFFER1PUSH[BX]PUSH[BX+2]PUSH[BX+4]CALLSUBRMOVAX,BXSP-2SP-1SPIPHBUFAHBUFALNLBUFBLNHBUFBHIPLSP-7SP-5SP-6SP-8SP-4SP-3BPLBPHSP-9SP-A子程序:SUBR:PUSHBPMOVBP,SPMOVCX,[BP+4]MOVDI,[BP+6]MOVSI,[BP+8] …POPBPRET6利用堆棧傳遞參數(shù)DATASEGMENT主程序:8例5-9.利用堆棧編程實(shí)現(xiàn)十進(jìn)制數(shù)組求和,段間調(diào)用。MDATASEGMENTARY1DB20DUP(?) ;數(shù)組1SUM1DW?ARY2DB100DUP(?) ;數(shù)組2SUM2DW?MDATAENDSMSTACKSEGMENTSTACKSBDW100DUP(?)TOPLABELWORDMSTACKENDSMCODESEGMENTASSUMECS:MCODE,DS:MDATA,SS:MSTACKMAINPROCFARSTART:PUSHDSSUBAX,AXPUSHAXMOVAX,MDATAMOVDS,AXMOVAX,MSTACKMOVSS,AXMOVSP,OFFSETTOP例5-9.利用堆棧編程實(shí)現(xiàn)十進(jìn)制數(shù)組求和,段間調(diào)用。MDAT9MOVAX,OFFSETARY1PUSHAXMOVAX,SIZEARY1PUSHAXCALLFARPTRPADDMOVAX,OFFSETARY2PUSHAXMOVAX,SIZEARY2PUSHAXCALLFARPTRPADDRETMAINENDPMCODEENDSPCODESEGMENTASSUMECS:PCODE,DS:MDATA,SS:MSTACKPADDPROCFARPUSHBXPUSHCXPUSHBPMOVBP,SPPUSHFSPARY1SIZE1CSIPFBPCXBXSP-8SP-4SP-2SP-CSP-6SP-ASP-ESP-10MOVAX,10MOVCX,[BP+10]MOVBX,[BP+12]MOVAX,0NEXT:ADDAL,[BX]DAAMOVDL,ALMOVAL,0ADCAL,AHDAAMOVAH,ALMOVAL,DLINCBXLOOPNEXTMOV[BX],AXPOPFPOPBPPOPCXPOPBXRET4PADDENDPPCODEENDSENDSTARTSPARY1SIZE1CSIPFBPCXBXSP-8SP-4SP-2SP-CSP-6SP-ASP-ESP-10MOV11現(xiàn)場(chǎng)保護(hù)和恢復(fù)一定要保護(hù):子程序中使用的寄存器;在返回后主程序需繼續(xù)使用的寄存器。一定不能保護(hù):作為子程序的結(jié)果傳送給主程序的寄存器??刹槐乇Wo(hù)(隨意):子程序中使用,返回主程序后不再使用的寄存器。例子程序的嵌套與遞歸調(diào)用嵌套——子程序再調(diào)用其他子程序遞歸——子程序調(diào)用自身嵌套的層數(shù)僅受堆棧空間的限制注意寄存器的保護(hù)現(xiàn)場(chǎng)保護(hù)和恢復(fù)一定要保護(hù):子程序中使用的寄存器;在返回后主程12例5-9.編制計(jì)算N!的程序P186~189N!=1 N=0N!=N×(N-1)! N>0段寄存器初始化N→AL調(diào)用FACT保存結(jié)果結(jié)束返回AL=0?開始AX(N)入棧AL-1(N-1)調(diào)用FACTAX(N)出棧N×(N-1)!→DX返回NYDL=1返回例5-9.編制計(jì)算N!的程序P186~189N!=1 13例5-10將16位2進(jìn)制數(shù)轉(zhuǎn)換為4位壓縮型BCD碼。P182DL+AL→DLDX左移4位余數(shù)→AL,AH=0AX/10DL+AL→DLDX左移4位DL+AH→DLDX→AX恢復(fù)相關(guān)寄存器返回開始CF=1AX=0返回YAX>9999?保護(hù)相關(guān)寄存器(DX,AX)/1000商→DX,余數(shù)→AXDX左移4位AX/100N輸入?yún)?shù):AX=16位2進(jìn)制數(shù)。輸出參數(shù):CF=0,則AX=4位壓縮BCD碼。CF=1,則要轉(zhuǎn)換的數(shù)大于9999,AX=0.使用寄存器:CX:存放除數(shù),DX:存放中間結(jié)果。例5-10將16位2進(jìn)制數(shù)轉(zhuǎn)換為4位壓縮型BCD碼。P18142)ASCII碼轉(zhuǎn)換為二進(jìn)制
例5-11 將十進(jìn)制數(shù)的ASCII字符串轉(zhuǎn)換為有符號(hào)的二進(jìn)制。P183(…((((A0×10)+A1)×10+A2)×10+A3)…)×10)+An開始初始化:保護(hù),DX→SICX>6?檢查符號(hào)位‘-’?N‘+’?NY置符號(hào)位BCX-1,SI+1YNDX×10讀下一字節(jié)→ALCF=1?YN合法?YANDX+AX→DXDABDX=0CNEXT:AYERR:2)ASCII碼轉(zhuǎn)換為二進(jìn)制
例5-11 將十進(jìn)制數(shù)的ASC15NDCF=1?YANCX-1=0?CYDX→AX負(fù)數(shù)?NY求補(bǔ)ACF=1,AX=0CX,DX出棧返回ERR:EXIT:NDCF=1?YANCX-1=0?CYDX→AX負(fù)數(shù)?N16
例5-12.把二進(jìn)制數(shù)碼串中每一字節(jié)的兩位十六進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼。高位在高地址,低位在低地址。BUFFERSTRINGA42C533B4134433233354233例5-12.把二進(jìn)制數(shù)碼串中每一字節(jié)的兩位十六進(jìn)制數(shù)轉(zhuǎn)換為17主程序16進(jìn)制數(shù)首地址→BXASCII碼首地址→SI長(zhǎng)度→CX取待轉(zhuǎn)換數(shù)→
AL→DL分離出低4位分離出高4位右移四位調(diào)用CHANGE子程序(CX)-1=0結(jié)束AGAINN調(diào)用CHANGE子程序Y(AL)<10(AL)+07H→AL(AL)+30H→AL(AL)→(SI)(SI)+1→SIRETADD_0CHANGE子程序框圖YN主程序16進(jìn)制數(shù)首地址→BX取待轉(zhuǎn)換數(shù)→AL→DL分離出低18四、子程序結(jié)構(gòu)將反復(fù)進(jìn)行的操作編成一個(gè)子程序,這樣,只需編寫一次,測(cè)試一次便可以多次重復(fù)使用。從而提高開發(fā)的效率。實(shí)現(xiàn)模塊化的重要手段。使程序便于開發(fā)、測(cè)試和維護(hù)。主程序CALLSUB1子程序SUB1PROC斷點(diǎn)地址轉(zhuǎn)向子程序RET返回主程序四、子程序結(jié)構(gòu)將反復(fù)進(jìn)行的操作編成一個(gè)子程序,這樣,只需編寫19子程序的設(shè)計(jì)方法功能分析與說(shuō)明*子程序的名稱,功能及性能*子程序中用到的寄存器和存儲(chǔ)單元*子程序的入口參數(shù),出口參數(shù)*子程序中調(diào)用其它子程序的名稱主控?cái)?shù)據(jù)處理輸入輸出子程序的設(shè)計(jì)方法功能分析與說(shuō)明*子程序的名稱,功能及性能主控20;名稱:BCD2BIN;功能:一個(gè)字節(jié)的BCD碼轉(zhuǎn)換成二進(jìn)制數(shù);所用寄存器:CX;入口參數(shù):AL中存兩位BCD數(shù);出口參數(shù):AL存二進(jìn)制數(shù);調(diào)用其它子程序:無(wú)BCD2BINPROCNEAR(FAR)
PUSHCXMOVCH,ALANDCH,0FHMOVCL,4SHRAL,CL;/16MOVCL,10MULCL;*10ADDAL,CH;+低位POPCXRETBCD2BINENDP例5-7一個(gè)子程序;名稱:BCD2BINBCD2BINPROC21參數(shù)傳遞技術(shù)入口參數(shù)與出口參數(shù)參數(shù)傳遞方法利用寄存器傳遞參數(shù)利用存儲(chǔ)器傳遞參數(shù)利用堆棧傳遞參數(shù)1)利用寄存器傳遞參數(shù)上例5-7參數(shù)傳遞技術(shù)入口參數(shù)與出口參數(shù)1)利用寄存器傳遞參數(shù)上例522DATASEGMENTARY1DW100DUP(?)SUM1DW?ARY2DW100DUP(?)SUM2DW?DATAENDSSTACKSEGMENTSTACKSADW50DUP(?)TOPEQU
LENGTHSASTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKMAINPROCFAR例5-8.數(shù)據(jù)段定義兩個(gè)數(shù)組,編程實(shí)現(xiàn)數(shù)組段分別求和(不計(jì)溢出)。P182~183START:PUSHDSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVSP,TOPTOPEQUSIZESATOPLABELWORD利用存儲(chǔ)器傳遞參數(shù)?數(shù)據(jù)放在數(shù)據(jù)段中DATASEGMENT例5-8.數(shù)據(jù)段定義兩個(gè)23LEASI,ARY1 ;數(shù)組1地址→SIMOVCX,LENGTHARY1CALLSUM ;數(shù)組1求和LEASI,ARY2 ;數(shù)組2地址→SIMOVCX,LENGTHARY2CALLSUM ;數(shù)組2求和RETMAINENDPSUMPROCNEARXORAX,AX ;AX清0L1:ADDAX,WORDPTR[SI]INCSIINCSILOOPL1MOVWORDPTR[SI],AX
RETSUMENDPCODEENDSENDSTARTLEASI24利用存儲(chǔ)器傳遞參數(shù)數(shù)據(jù)放在數(shù)據(jù)段中數(shù)據(jù)放在代碼段中獲取參數(shù)的方法:獲得返回地址根據(jù)返回地址實(shí)現(xiàn)參數(shù)傳遞修改返回地址IPHIPLSPSP-1SP-2BPLBPHCALLSUBRDWBUFLDWBUFADWBUFBMOVAX,DX…SUBR PROC PUSH BP MOV BP,SP MOV BX,[BP+2] MOV CX,CS:[BX] MOVSI,CS:[BX+2] MOV DI,CS:[BX+4] ADD BX,6 MOV[BP+2],BX … POP BP RETSUBR ENDPMOV BX,[SP+2]利用存儲(chǔ)器傳遞參數(shù)數(shù)據(jù)放在數(shù)據(jù)段中IPHIPLSPSP-1S25利用堆棧傳遞參數(shù)DATASEGMENTBUFFER1DWBUFABUFFER2DWBUFBBUFLDW NDATAENDS主程序:LEABX,BUFFER1PUSH[BX]PUSH[BX+2]PUSH[BX+4]CALLSUBRMOVAX,BXSP-2SP-1SPIPHBUFAHBUFALNLBUFBLNHBUFBHIPLSP-7SP-5SP-6SP-8SP-4SP-3BPLBPHSP-9SP-A子程序:SUBR:PUSHBPMOVBP,SPMOVCX,[BP+4]MOVDI,[BP+6]MOVSI,[BP+8] …POPBPRET6利用堆棧傳遞參數(shù)DATASEGMENT主程序:26例5-9.利用堆棧編程實(shí)現(xiàn)十進(jìn)制數(shù)組求和,段間調(diào)用。MDATASEGMENTARY1DB20DUP(?) ;數(shù)組1SUM1DW?ARY2DB100DUP(?) ;數(shù)組2SUM2DW?MDATAENDSMSTACKSEGMENTSTACKSBDW100DUP(?)TOPLABELWORDMSTACKENDSMCODESEGMENTASSUMECS:MCODE,DS:MDATA,SS:MSTACKMAINPROCFARSTART:PUSHDSSUBAX,AXPUSHAXMOVAX,MDATAMOVDS,AXMOVAX,MSTACKMOVSS,AXMOVSP,OFFSETTOP例5-9.利用堆棧編程實(shí)現(xiàn)十進(jìn)制數(shù)組求和,段間調(diào)用。MDAT27MOVAX,OFFSETARY1PUSHAXMOVAX,SIZEARY1PUSHAXCALLFARPTRPADDMOVAX,OFFSETARY2PUSHAXMOVAX,SIZEARY2PUSHAXCALLFARPTRPADDRETMAINENDPMCODEENDSPCODESEGMENTASSUMECS:PCODE,DS:MDATA,SS:MSTACKPADDPROCFARPUSHBXPUSHCXPUSHBPMOVBP,SPPUSHFSPARY1SIZE1CSIPFBPCXBXSP-8SP-4SP-2SP-CSP-6SP-ASP-ESP-10MOVAX,28MOVCX,[BP+10]MOVBX,[BP+12]MOVAX,0NEXT:ADDAL,[BX]DAAMOVDL,ALMOVAL,0ADCAL,AHDAAMOVAH,ALMOVAL,DLINCBXLOOPNEXTMOV[BX],AXPOPFPOPBPPOPCXPOPBXRET4PADDENDPPCODEENDSENDSTARTSPARY1SIZE1CSIPFBPCXBXSP-8SP-4SP-2SP-CSP-6SP-ASP-ESP-10
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 預(yù)應(yīng)力混凝土工程教學(xué)課件
- 汽車配套產(chǎn)業(yè)基地項(xiàng)目數(shù)字化方案(參考模板)
- 2025年年健康服務(wù)項(xiàng)目建議書
- 2025年低功率氣動(dòng)閥島用控制閥項(xiàng)目合作計(jì)劃書
- 2025年達(dá)美航空合作協(xié)議書
- 現(xiàn)代能源行業(yè)發(fā)展條件分析
- 2025年轉(zhuǎn)基因耐貯藏番茄項(xiàng)目發(fā)展計(jì)劃
- 西師大版三年級(jí)數(shù)學(xué)上冊(cè)全冊(cè)單元知識(shí)點(diǎn)
- 2025年氟炭漆項(xiàng)目合作計(jì)劃書
- 2025年智能分揀系統(tǒng)項(xiàng)目合作計(jì)劃書
- 地鐵安檢培訓(xùn)課件
- 摸魚活動(dòng)策劃方案
- 化療所致血小板減少癥CIT
- 2025年北京市中考物理試卷真題(含答案)
- 2025年定向士官心理測(cè)試題及答案
- 2025年安徽高考地理試卷真題(含答案)
- 建設(shè)工程糾紛律師課件
- 全國(guó)衛(wèi)生健康系統(tǒng)職業(yè)技能競(jìng)賽(傳染病防治監(jiān)督)參考試題庫(kù)(含答案)
- 樓梯 欄桿 欄板(一)22J403-1
- 《特殊患者護(hù)理規(guī)范》
- 汽車維修安全生產(chǎn)管理制度大全
評(píng)論
0/150
提交評(píng)論