子程序的嵌套

子程序的嵌套

ID:22083044

大?。?7.00 KB

頁數(shù):9頁

時(shí)間:2018-10-27

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

《子程序的嵌套》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫

1、子程序的嵌套  一、子程序的嵌套  一個(gè)子程序作為調(diào)用程序去調(diào)用另一個(gè)子程序的情況稱為子程序的嵌套。  嵌套深度:嵌套的層數(shù)稱為嵌套深度。不受限制。  嵌套子程序的設(shè)計(jì):沒有什么特殊要求,除子程序的調(diào)用和返回應(yīng)正確使用CALL和RET指令外,要注意寄存器的保護(hù)和恢復(fù)。如用堆棧傳送數(shù)據(jù)要避免因堆棧使用中的溢出問題而造成子程序不能正確返回的錯(cuò)誤。有兩種可能發(fā)生堆棧溢出的情況:  堆棧上溢:如堆棧已滿,但還想再存入信息,這種情況稱為堆棧上溢?! 《褩O乱纾喝缍褩R芽眨€想再取出信息,這種情況稱為堆棧下溢?!?/p>

2、 遞歸子程序:子程序自己調(diào)用自己的情況稱為遞歸調(diào)用,這種子程序稱為遞歸子程序  二、嵌套深度  圖1表示了嵌套深度為2時(shí)的子程序嵌套情況?!   ±?  兩個(gè)6字節(jié)數(shù)相加?! 》治觯簩⒁粋€(gè)字節(jié)相加的程序段設(shè)計(jì)為子程序。主程序分3次調(diào)用該子程序,但每次調(diào)用的參數(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 ?。徽{(diào)用子程序  LOOP   AGAIN   ?。谎h(huán)調(diào)用6次  MOV AX,4C00H  INT  21H  ;子程序入口參數(shù):SI,DI,BX  出口參數(shù):SI,DI,BX  SUBADD PROC      ;完成一個(gè)字節(jié)相加  PUSH AX    ??;保護(hù)AX的值  MOV AL,[SI] ??;SI是一個(gè)源操作數(shù)指針  ADC AL,[DI] ?。籇I是另一個(gè)源操作數(shù)指針  MOV [BX],AL ??;BX是結(jié)果操作數(shù)指針  INC  SI  INC  

5、DI  INC  BX  POP  AX   ;恢復(fù)AX的值  RET  SUBADD ENDP  CODE  ENDS  END  MADD  例2  把內(nèi)存中的字變量NUMBER的值,轉(zhuǎn)換為4個(gè)ASCII碼表示的十六進(jìn)制數(shù)碼串,串的起始地址為STRING。  分析:把內(nèi)存中的字變量NUMBER的值,轉(zhuǎn)換為4個(gè)ASCII碼表示的十六進(jìn)制數(shù)碼串的工作設(shè)計(jì)成一個(gè)子程序,在這個(gè)子程序中再調(diào)用另一個(gè)子程序,由它完成從BCD碼到ASCII碼的轉(zhuǎn)換?! 〕绦蛉缦拢骸 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ù)(結(jié)果地址指針)壓入堆棧  PUSH NUMBER     ?。粚⒃磾?shù)據(jù)壓入堆?! ALL BINHEX      ??;調(diào)用子程序  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         ??;以上為保護(hù)現(xiàn)場  MOV AX,[BP+4]    ??;取出NUMBER  MOV DI,[BP+6]      ;取出STRING的偏移地址  ADD DI,LENGTH STRING-1??;使DI指向轉(zhuǎn)換數(shù)據(jù)  MOV DX,AX      ;保護(hù)原始數(shù)據(jù)  MOV CX,

8、4  AGAIN: AND AX,0FH      ??;取低4位  CALL HEXD        ;調(diào)子程序  STD  STOSB         ??;保護(hù)轉(zhuǎn)換數(shù)據(jù)  PUSH CX        ?。槐Wo(hù)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  

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

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

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