版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
四、子程序結(jié)構(gòu)將反復進行的操作編成一個子程序,這樣,只需編寫一次,測試一次便可以多次重復使用。從而提高開發(fā)的效率。實現(xiàn)模塊化的重要手段。使程序便于開發(fā)、測試和維護。主程序CALLSUB1子程序SUB1PROC斷點地址轉(zhuǎn)向子程序RET返回主程序四、子程序結(jié)構(gòu)將反復進行的操作編成一個子程序,這樣,只需編寫1子程序的設計方法功能分析與說明*子程序的名稱,功能及性能*子程序中用到的寄存器和存儲單元*子程序的入口參數(shù),出口參數(shù)*子程序中調(diào)用其它子程序的名稱主控數(shù)據(jù)處理輸入輸出子程序的設計方法功能分析與說明*子程序的名稱,功能及性能主控2;名稱:BCD2BIN;功能:一個字節(jié)的BCD碼轉(zhuǎn)換成二進制數(shù);所用寄存器:CX;入口參數(shù):AL中存兩位BCD數(shù);出口參數(shù):AL存二進制數(shù);調(diào)用其它子程序:無BCD2BINPROCNEAR(FAR)
PUSHCXMOVCH,ALANDCH,0FHMOVCL,4SHRAL,CL;/16MOVCL,10MULCL;*10ADDAL,CH;+低位POPCXRETBCD2BINENDP例5-7一個子程序;名稱:BCD2BINBCD2BINPROC3參數(shù)傳遞技術(shù)入口參數(shù)與出口參數(shù)參數(shù)傳遞方法利用寄存器傳遞參數(shù)利用存儲器傳遞參數(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ù)段定義兩個數(shù)組,編程實現(xiàn)數(shù)組段分別求和(不計溢出)。P182~183START:PUSHDSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVSP,TOPTOPEQUSIZESATOPLABELWORD利用存儲器傳遞參數(shù)?數(shù)據(jù)放在數(shù)據(jù)段中DATASEGMENT例5-8.數(shù)據(jù)段定義兩個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利用存儲器傳遞參數(shù)數(shù)據(jù)放在數(shù)據(jù)段中數(shù)據(jù)放在代碼段中獲取參數(shù)的方法:獲得返回地址根據(jù)返回地址實現(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]利用存儲器傳遞參數(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.利用堆棧編程實現(xià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.利用堆棧編程實現(xià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)場保護和恢復一定要保護:子程序中使用的寄存器;在返回后主程序需繼續(xù)使用的寄存器。一定不能保護:作為子程序的結(jié)果傳送給主程序的寄存器??刹槐乇Wo(隨意):子程序中使用,返回主程序后不再使用的寄存器。例子程序的嵌套與遞歸調(diào)用嵌套——子程序再調(diào)用其他子程序遞歸——子程序調(diào)用自身嵌套的層數(shù)僅受堆??臻g的限制注意寄存器的保護現(xiàn)場保護和恢復一定要保護:子程序中使用的寄存器;在返回后主程12例5-9.編制計算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.編制計算N!的程序P186~189N!=1 13例5-10將16位2進制數(shù)轉(zhuǎn)換為4位壓縮型BCD碼。P182DL+AL→DLDX左移4位余數(shù)→AL,AH=0AX/10DL+AL→DLDX左移4位DL+AH→DLDX→AX恢復相關(guān)寄存器返回開始CF=1AX=0返回YAX>9999?保護相關(guān)寄存器(DX,AX)/1000商→DX,余數(shù)→AXDX左移4位AX/100N輸入?yún)?shù):AX=16位2進制數(shù)。輸出參數(shù):CF=0,則AX=4位壓縮BCD碼。CF=1,則要轉(zhuǎn)換的數(shù)大于9999,AX=0.使用寄存器:CX:存放除數(shù),DX:存放中間結(jié)果。例5-10將16位2進制數(shù)轉(zhuǎn)換為4位壓縮型BCD碼。P18142)ASCII碼轉(zhuǎn)換為二進制
例5-11 將十進制數(shù)的ASCII字符串轉(zhuǎn)換為有符號的二進制。P183(…((((A0×10)+A1)×10+A2)×10+A3)…)×10)+An開始初始化:保護,DX→SICX>6?檢查符號位‘-’?N‘+’?NY置符號位BCX-1,SI+1YNDX×10讀下一字節(jié)→ALCF=1?YN合法?YANDX+AX→DXDABDX=0CNEXT:AYERR:2)ASCII碼轉(zhuǎn)換為二進制
例5-11 將十進制數(shù)的ASC15NDCF=1?YANCX-1=0?CYDX→AX負數(shù)?NY求補ACF=1,AX=0CX,DX出棧返回ERR:EXIT:NDCF=1?YANCX-1=0?CYDX→AX負數(shù)?N16
例5-12.把二進制數(shù)碼串中每一字節(jié)的兩位十六進制數(shù)轉(zhuǎn)換為ASCII碼。高位在高地址,低位在低地址。BUFFERSTRINGA42C533B4134433233354233例5-12.把二進制數(shù)碼串中每一字節(jié)的兩位十六進制數(shù)轉(zhuǎn)換為17主程序16進制數(shù)首地址→BXASCII碼首地址→SI長度→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進制數(shù)首地址→BX取待轉(zhuǎn)換數(shù)→AL→DL分離出低18四、子程序結(jié)構(gòu)將反復進行的操作編成一個子程序,這樣,只需編寫一次,測試一次便可以多次重復使用。從而提高開發(fā)的效率。實現(xiàn)模塊化的重要手段。使程序便于開發(fā)、測試和維護。主程序CALLSUB1子程序SUB1PROC斷點地址轉(zhuǎn)向子程序RET返回主程序四、子程序結(jié)構(gòu)將反復進行的操作編成一個子程序,這樣,只需編寫19子程序的設計方法功能分析與說明*子程序的名稱,功能及性能*子程序中用到的寄存器和存儲單元*子程序的入口參數(shù),出口參數(shù)*子程序中調(diào)用其它子程序的名稱主控數(shù)據(jù)處理輸入輸出子程序的設計方法功能分析與說明*子程序的名稱,功能及性能主控20;名稱:BCD2BIN;功能:一個字節(jié)的BCD碼轉(zhuǎn)換成二進制數(shù);所用寄存器:CX;入口參數(shù):AL中存兩位BCD數(shù);出口參數(shù):AL存二進制數(shù);調(diào)用其它子程序:無BCD2BINPROCNEAR(FAR)
PUSHCXMOVCH,ALANDCH,0FHMOVCL,4SHRAL,CL;/16MOVCL,10MULCL;*10ADDAL,CH;+低位POPCXRETBCD2BINENDP例5-7一個子程序;名稱:BCD2BINBCD2BINPROC21參數(shù)傳遞技術(shù)入口參數(shù)與出口參數(shù)參數(shù)傳遞方法利用寄存器傳遞參數(shù)利用存儲器傳遞參數(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ù)段定義兩個數(shù)組,編程實現(xiàn)數(shù)組段分別求和(不計溢出)。P182~183START:PUSHDSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVSP,TOPTOPEQUSIZESATOPLABELWORD利用存儲器傳遞參數(shù)?數(shù)據(jù)放在數(shù)據(jù)段中DATASEGMENT例5-8.數(shù)據(jù)段定義兩個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利用存儲器傳遞參數(shù)數(shù)據(jù)放在數(shù)據(jù)段中數(shù)據(jù)放在代碼段中獲取參數(shù)的方法:獲得返回地址根據(jù)返回地址實現(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]利用存儲器傳遞參數(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.利用堆棧編程實現(xià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.利用堆棧編程實現(xià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. 本站所有資源如無特殊說明,都需要本地電腦安裝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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 美妝產(chǎn)品展示租賃合同
- 建筑工程隔層施工合同
- 防止網(wǎng)絡謠言傳播的分辨技巧
- 科研機構(gòu)電氣設備安裝協(xié)議
- 萬能工品牌推廣合同
- 寫給客戶感謝信
- 【初中道法】增強安全意識 課件-2024-2025學年統(tǒng)編版道德與法治七年級上冊
- 《個人獨資企業(yè)法》課件
- 《業(yè)務流程重組》課件
- 做一個文明的人國旗下講話稿范文(9篇)
- 習近平總書記教育重要論述講義智慧樹知到期末考試答案章節(jié)答案2024年西南大學
- 9.3一元一次不等式組解法市公開課一等獎省賽課微課金獎課件
- 2024中國南水北調(diào)集團新能源投資有限公司招聘筆試參考題庫含答案解析
- (正式版)JBT 106-2024 閥門的標志和涂裝
- 依據(jù)新課標人教部編歷史九年級下冊默寫填空
- 《鳥的生殖和發(fā)育》名師導學1
- 2024世界糖尿病日
- 好書推薦《安徒生童話》
- 駐外員工管理制度
- 中藥學職業(yè)規(guī)劃
- 校園咖啡廳設計案例
評論
0/150
提交評論