子程序的嵌套

子程序的嵌套

ID:22083044

大小:67.00 KB

頁數(shù):9頁

時間:2018-10-27

子程序的嵌套_第1頁
子程序的嵌套_第2頁
子程序的嵌套_第3頁
子程序的嵌套_第4頁
子程序的嵌套_第5頁
資源描述:

《子程序的嵌套》由會員上傳分享,免費在線閱讀,更多相關內容在應用文檔-天天文庫

1、子程序的嵌套  一、子程序的嵌套  一個子程序作為調用程序去調用另一個子程序的情況稱為子程序的嵌套?! ∏短咨疃龋呵短椎膶訑?shù)稱為嵌套深度。不受限制?! ∏短鬃映绦虻脑O計:沒有什么特殊要求,除子程序的調用和返回應正確使用CALL和RET指令外,要注意寄存器的保護和恢復。如用堆棧傳送數(shù)據(jù)要避免因堆棧使用中的溢出問題而造成子程序不能正確返回的錯誤。有兩種可能發(fā)生堆棧溢出的情況:  堆棧上溢:如堆棧已滿,但還想再存入信息,這種情況稱為堆棧上溢?! 《褩O乱纾喝缍褩R芽?,但還想再取出信息,這種情況稱為堆棧下溢。 

2、 遞歸子程序:子程序自己調用自己的情況稱為遞歸調用,這種子程序稱為遞歸子程序  二、嵌套深度  圖1表示了嵌套深度為2時的子程序嵌套情況。    例1  兩個6字節(jié)數(shù)相加?! 》治觯簩⒁粋€字節(jié)相加的程序段設計為子程序。主程序分3次調用該子程序,但每次調用的參數(shù)不同?! 〕绦蛉缦拢骸 ATA  SEGMENT  ADD1  DB  FEH,86H,7CH,35H,68H,77H  ADD2  DB  45H,BCH,7DH,6AH,87H,90H  SUM  DB   6DUP(0)  COUNT  D

3、B  6  DATA  ENDS  STACK  SEGMENT  DB  100DUP(?)  STACK  ENDS  CODE  SEGMENT  ASSUME CS:CODE,DS:DATA,SS:STACK  MADD: MOV AX,DATA  MOV DS,AX  MOV AX,STACK  MOV SS,AX  MOV SI,OFFSET ADD1  MOV DI,OFFSET ADD2  MOV BX,OFFSET  SUM  MOV CX,COUNT ??;循環(huán)初值為6  CLC  A

4、GAIN:CALL  SUBADD ??;調用子程序  LOOP   AGAIN   ??;循環(huán)調用6次  MOV AX,4C00H  INT  21H  ;子程序入口參數(shù):SI,DI,BX  出口參數(shù):SI,DI,BX  SUBADD PROC     ?。煌瓿梢粋€字節(jié)相加  PUSH AX    ??;保護AX的值  MOV AL,[SI] ?。籗I是一個源操作數(shù)指針  ADC AL,[DI] ??;DI是另一個源操作數(shù)指針  MOV [BX],AL  ;BX是結果操作數(shù)指針  INC  SI  INC  

5、DI  INC  BX  POP  AX  ??;恢復AX的值  RET  SUBADD ENDP  CODE  ENDS  END  MADD  例2  把內存中的字變量NUMBER的值,轉換為4個ASCII碼表示的十六進制數(shù)碼串,串的起始地址為STRING?! 》治觯喊褍却嬷械淖肿兞縉UMBER的值,轉換為4個ASCII碼表示的十六進制數(shù)碼串的工作設計成一個子程序,在這個子程序中再調用另一個子程序,由它完成從BCD碼到ASCII碼的轉換?! 〕绦蛉缦拢骸 ATA  SEGMENT  NUMBER D

6、W  25AFH  STRING  DB 4DUP(?),0DH,0AH,‘$’   DATA  ENDS  CODE  SEGMENT  ASSUME CS:CODE,DS:DATA  BEGIN: MOV AX,DATA  MOV DS,AX  MOV ES,AX  LEA BX,STRING  PUSH BX        ??;將參數(shù)(結果地址指針)壓入堆?! USH NUMBER      ;將源數(shù)據(jù)壓入堆?! ALL BINHEX       ;調用子程序  LEA DI,STRING  

7、MOV AH,9  INT  21H  BINHEX  PROC           PUSH BP  MOV BP,SP  PUSH AX  PUSH DI  PUSH CX  PUSH DX  PUSHF         ??;以上為保護現(xiàn)場  MOV AX,[BP+4]    ??;取出NUMBER  MOV DI,[BP+6]     ??;取出STRING的偏移地址  ADD DI,LENGTH STRING-1 ;使DI指向轉換數(shù)據(jù)  MOV DX,AX     ??;保護原始數(shù)據(jù)  MOV CX,

8、4  AGAIN: AND AX,0FH      ??;取低4位  CALL HEXD       ??;調子程序  STD  STOSB          ;保護轉換數(shù)據(jù)  PUSH CX        ??;保護CX的值  MOV CL,4  SHR  DX,CL  MOV AX,DX  POP  CX  LOOP AGAIN  POPF  POP  DX  POP  CX  POP  DI  POP  AX  POP  BP  RET  

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內容,確認文檔內容符合您的需求后進行下載,若出現(xiàn)內容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。