




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
四、子程序結構將反復進行的操作編成一個子程序,這樣,只需編寫一次,測試一次便可以多次重復使用。從而提高開發的效率。實現模塊化的重要手段。使程序便于開發、測試和維護。主程序CALLSUB1子程序SUB1PROC斷點地址轉向子程序RET返回主程序四、子程序結構將反復進行的操作編成一個子程序,這樣,只需編寫1子程序的設計方法功能分析與說明*子程序的名稱,功能及性能*子程序中用到的寄存器和存儲單元*子程序的入口參數,出口參數*子程序中調用其它子程序的名稱主控數據處理輸入輸出子程序的設計方法功能分析與說明*子程序的名稱,功能及性能主控2;名稱:BCD2BIN;功能:一個字節的BCD碼轉換成二進制數;所用寄存器:CX;入口參數:AL中存兩位BCD數;出口參數:AL存二進制數;調用其它子程序:無BCD2BINPROCNEAR(FAR)
PUSHCXMOVCH,ALANDCH,0FHMOVCL,4SHRAL,CL;/16MOVCL,10MULCL;*10ADDAL,CH;+低位POPCXRETBCD2BINENDP例5-7一個子程序;名稱:BCD2BINBCD2BINPROC3參數傳遞技術入口參數與出口參數參數傳遞方法利用寄存器傳遞參數利用存儲器傳遞參數利用堆棧傳遞參數1)利用寄存器傳遞參數上例5-7參數傳遞技術入口參數與出口參數1)利用寄存器傳遞參數上例54DATASEGMENTARY1DW100DUP(?)SUM1DW?ARY2DW100DUP(?)SUM2DW?DATAENDSSTACKSEGMENTSTACKSADW50DUP(?)TOPEQU
LENGTHSASTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKMAINPROCFAR例5-8.數據段定義兩個數組,編程實現數組段分別求和(不計溢出)。P182~183START:PUSHDSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVSP,TOPTOPEQUSIZESATOPLABELWORD利用存儲器傳遞參數?數據放在數據段中DATASEGMENT例5-8.數據段定義兩個5LEASI,ARY1 ;數組1地址→SIMOVCX,LENGTHARY1CALLSUM ;數組1求和LEASI,ARY2 ;數組2地址→SIMOVCX,LENGTHARY2CALLSUM ;數組2求和RETMAINENDPSUMPROCNEARXORAX,AX ;AX清0L1:ADDAX,WORDPTR[SI]INCSIINCSILOOPL1MOVWORDPTR[SI],AX
RETSUMENDPCODEENDSENDSTARTLEASI6利用存儲器傳遞參數數據放在數據段中數據放在代碼段中獲取參數的方法:獲得返回地址根據返回地址實現參數傳遞修改返回地址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]利用存儲器傳遞參數數據放在數據段中IPHIPLSPSP-1S7利用堆棧傳遞參數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利用堆棧傳遞參數DATASEGMENT主程序:8例5-9.利用堆棧編程實現十進制數組求和,段間調用。MDATASEGMENTARY1DB20DUP(?) ;數組1SUM1DW?ARY2DB100DUP(?) ;數組2SUM2DW?MDATAENDSMSTACKSEGMENTSTACKSBDW100DUP(?)TOPLABELWORDMSTACKENDSMCODESEGMENTASSUMECS:MCODE,DS:MDATA,SS:MSTACKMAINPROCFARSTART:PUSHDSSUBAX,AXPUSHAXMOVAX,MDATAMOVDS,AXMOVAX,MSTACKMOVSS,AXMOVSP,OFFSETTOP例5-9.利用堆棧編程實現十進制數組求和,段間調用。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現場保護和恢復一定要保護:子程序中使用的寄存器;在返回后主程序需繼續使用的寄存器。一定不能保護:作為子程序的結果傳送給主程序的寄存器??刹槐乇Wo(隨意):子程序中使用,返回主程序后不再使用的寄存器。例子程序的嵌套與遞歸調用嵌套——子程序再調用其他子程序遞歸——子程序調用自身嵌套的層數僅受堆??臻g的限制注意寄存器的保護現場保護和恢復一定要保護:子程序中使用的寄存器;在返回后主程12例5-9.編制計算N!的程序P186~189N!=1 N=0N!=N×(N-1)! N>0段寄存器初始化N→AL調用FACT保存結果結束返回AL=0?開始AX(N)入棧AL-1(N-1)調用FACTAX(N)出棧N×(N-1)!→DX返回NYDL=1返回例5-9.編制計算N!的程序P186~189N!=1 13例5-10將16位2進制數轉換為4位壓縮型BCD碼。P182DL+AL→DLDX左移4位余數→AL,AH=0AX/10DL+AL→DLDX左移4位DL+AH→DLDX→AX恢復相關寄存器返回開始CF=1AX=0返回YAX>9999?保護相關寄存器(DX,AX)/1000商→DX,余數→AXDX左移4位AX/100N輸入參數:AX=16位2進制數。輸出參數:CF=0,則AX=4位壓縮BCD碼。CF=1,則要轉換的數大于9999,AX=0.使用寄存器:CX:存放除數,DX:存放中間結果。例5-10將16位2進制數轉換為4位壓縮型BCD碼。P18142)ASCII碼轉換為二進制
例5-11 將十進制數的ASCII字符串轉換為有符號的二進制。P183(…((((A0×10)+A1)×10+A2)×10+A3)…)×10)+An開始初始化:保護,DX→SICX>6?檢查符號位‘-’?N‘+’?NY置符號位BCX-1,SI+1YNDX×10讀下一字節→ALCF=1?YN合法?YANDX+AX→DXDABDX=0CNEXT:AYERR:2)ASCII碼轉換為二進制
例5-11 將十進制數的ASC15NDCF=1?YANCX-1=0?CYDX→AX負數?NY求補ACF=1,AX=0CX,DX出棧返回ERR:EXIT:NDCF=1?YANCX-1=0?CYDX→AX負數?N16
例5-12.把二進制數碼串中每一字節的兩位十六進制數轉換為ASCII碼。高位在高地址,低位在低地址。BUFFERSTRINGA42C533B4134433233354233例5-12.把二進制數碼串中每一字節的兩位十六進制數轉換為17主程序16進制數首地址→BXASCII碼首地址→SI長度→CX取待轉換數→
AL→DL分離出低4位分離出高4位右移四位調用CHANGE子程序(CX)-1=0結束AGAINN調用CHANGE子程序Y(AL)<10(AL)+07H→AL(AL)+30H→AL(AL)→(SI)(SI)+1→SIRETADD_0CHANGE子程序框圖YN主程序16進制數首地址→BX取待轉換數→AL→DL分離出低18四、子程序結構將反復進行的操作編成一個子程序,這樣,只需編寫一次,測試一次便可以多次重復使用。從而提高開發的效率。實現模塊化的重要手段。使程序便于開發、測試和維護。主程序CALLSUB1子程序SUB1PROC斷點地址轉向子程序RET返回主程序四、子程序結構將反復進行的操作編成一個子程序,這樣,只需編寫19子程序的設計方法功能分析與說明*子程序的名稱,功能及性能*子程序中用到的寄存器和存儲單元*子程序的入口參數,出口參數*子程序中調用其它子程序的名稱主控數據處理輸入輸出子程序的設計方法功能分析與說明*子程序的名稱,功能及性能主控20;名稱:BCD2BIN;功能:一個字節的BCD碼轉換成二進制數;所用寄存器:CX;入口參數:AL中存兩位BCD數;出口參數:AL存二進制數;調用其它子程序:無BCD2BINPROCNEAR(FAR)
PUSHCXMOVCH,ALANDCH,0FHMOVCL,4SHRAL,CL;/16MOVCL,10MULCL;*10ADDAL,CH;+低位POPCXRETBCD2BINENDP例5-7一個子程序;名稱:BCD2BINBCD2BINPROC21參數傳遞技術入口參數與出口參數參數傳遞方法利用寄存器傳遞參數利用存儲器傳遞參數利用堆棧傳遞參數1)利用寄存器傳遞參數上例5-7參數傳遞技術入口參數與出口參數1)利用寄存器傳遞參數上例522DATASEGMENTARY1DW100DUP(?)SUM1DW?ARY2DW100DUP(?)SUM2DW?DATAENDSSTACKSEGMENTSTACKSADW50DUP(?)TOPEQU
LENGTHSASTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKMAINPROCFAR例5-8.數據段定義兩個數組,編程實現數組段分別求和(不計溢出)。P182~183START:PUSHDSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVSP,TOPTOPEQUSIZESATOPLABELWORD利用存儲器傳遞參數?數據放在數據段中DATASEGMENT例5-8.數據段定義兩個23LEASI,ARY1 ;數組1地址→SIMOVCX,LENGTHARY1CALLSUM ;數組1求和LEASI,ARY2 ;數組2地址→SIMOVCX,LENGTHARY2CALLSUM ;數組2求和RETMAINENDPSUMPROCNEARXORAX,AX ;AX清0L1:ADDAX,WORDPTR[SI]INCSIINCSILOOPL1MOVWORDPTR[SI],AX
RETSUMENDPCODEENDSENDSTARTLEASI24利用存儲器傳遞參數數據放在數據段中數據放在代碼段中獲取參數的方法:獲得返回地址根據返回地址實現參數傳遞修改返回地址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]利用存儲器傳遞參數數據放在數據段中IPHIPLSPSP-1S25利用堆棧傳遞參數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利用堆棧傳遞參數DATASEGMENT主程序:26例5-9.利用堆棧編程實現十進制數組求和,段間調用。MDATASEGMENTARY1DB20DUP(?) ;數組1SUM1DW?ARY2DB100DUP(?) ;數組2SUM2DW?MDATAENDSMSTACKSEGMENTSTACKSBDW100DUP(?)TOPLABELWORDMSTACKENDSMCODESEGMENTASSUMECS:MCODE,DS:MDATA,SS:MSTACKMAINPROCFARSTART:PUSHDSSUBAX,AXPUSHAXMOVAX,MDATAMOVDS,AXMOVAX,MSTACKMOVSS,AXMOVSP,OFFSETTOP例5-9.利用堆棧編程實現十進制數組求和,段間調用。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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 地理(武漢專用)2025年中考考前押題最后一卷
- 冀教版小學一年級數學三單元教學設計
- 綠色金融產融合作的國際化發展趨勢與實踐經驗
- 完善企業民主管理制度的績效評估與反饋機制
- 智慧養老的策略及實施路徑
- 天然氣管道項目可行性研究報告
- 2025至2030年中國法院案件訴訟管理系統行業投資前景及策略咨詢報告
- 深化拓展生態文明建設的策略及實施路徑
- 初中語文跨學科教學的現狀與挑戰分析
- 賀蘭山西坡不同植被類型土壤和凋落物的水源涵養功能研究
- 乳房外Paget病診治專家共識(2024版)解讀
- 2025江西上饒市國控投資集團限公司招聘中層管理6人易考易錯模擬試題(共500題)試卷后附參考答案
- DB64-T 2133-2025 骨干渠道安全巡護檢查技術導則
- 2025-2030中國協作機器人行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025年硝酸鎳項目市場調查研究報告
- 2025年交警職業法律知識綜合試題庫
- 旅居基地免責協議書
- 2025陜西水務集團限公司招聘80人易考易錯模擬試題(共500題)試卷后附參考答案
- 江西省南昌市2025屆高三下學期二?;瘜W試題 含解析
- DB42-T 2078-2023 紅火蟻監測與防控技術規程
- 2022教學能力大賽《智能網聯汽車傳感器測試與裝調》實施報告
評論
0/150
提交評論