版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
格式:子程序名
PROC
[類型]
…
(子程序內容)RET
子程序名
ENDP
3.10子程序設計子程序——具有一定功能的獨立程序段。說明:子程序名屬性①段屬性——子程序所在的段地址;
②偏移屬性——子程序第一條指令的偏移地址;
類型屬性——NEAR/FAR型,NEAR可省略。主程序子程序返回地址(斷點地址)一.子程序調用與返回指令1.子程序調用指令CALL功能:①保護斷點(斷點地址壓棧保護); ②轉子程序(子程序入口地址→IP/CS,IP)。(1)段內直接調用子程序和主程序在同一代碼段中。
格式:CALL子程序名
操作:(SP-1,SP-2)←IP,SP←SP-2; IP←子程序入口偏移地址(由子程序名決定)。調用范圍:64KB。SP→SP→IPHIPLSS:堆棧例:…
CALL
NAC …
NACPROC … RET NACENDP(2)段內間接調用指令子程序和主程序在同一代碼段中。格式:CALLOPR;OPR≡{R,M(字)}或CALLWORDPTROPR操作:SP←SP-2;[SP,SP+1]←IP;保護斷點
IP←[EA];子程序入口EA為依尋址方式所得的有效地址例3.32 CALLWORD PTR[BX] CALLBX CALLWORD PTR[BP][SI] CALLWORD PTRES:[SI]其中第二條指令,子程序入口偏移地址就是BX的內容,其他三條指令的入口偏移地址都是存放在采用各種存儲器尋址方式的相鄰二個內存單元中。由于是段內調用,CS值保持不變。(3)段間直接調用
格式:CALLFARPTR子程序名;操作:(SP-1,SP-2)←CS,SP←SP-2;保護斷點 (SP-1,SP-2)←IP,SP←SP-2; CS←子程序入口段地址;轉子程序入口 IP←子程序入口偏移地址。
調用范圍:1MB。SP→SP→IPHIPLCSHCSLSP→SS(4)段間間接調用格式:CALLDWORDPTROPR;
OPR≡{M(雙字)}操作:(SP-1,SP-2)←CS,SP←SP-2;保護斷點(SP-1,SP-2)←IP,SP←SP-2;IP←(EA);轉子程序入口CS←(EA+2)。調用范圍:1MB。例:CALLDWORDPTR[BX];CALLDWORDPTRVALUE[BP][SI];2、返回指令
格式:RET;
功能:恢復斷點(棧頂斷點地址→IP/CS,IP)。
操作:①段內調用的RET指令IP←(SP,SP+1),SP←SP+2。②段間調用的RET指令IP←(SP,SP+1),SP←SP+2;CS←(SP,SP+1),SP←SP+2。
說明:RET是段內/段間返回,取決于CALL
的屬性(段內/段間),系統(tǒng)自動調用。
二、保護現場和恢復現場 子程序中要用到某些寄存器,而這些寄存器中又存放有主程序的有用信息。子程序執(zhí)行前,將這些寄存器的內容加以保護—保護現場;子程序執(zhí)行后,恢復這些寄存器的內容—恢復現場。 通常在子程序一開始,利用PUSH指令將有關的內容壓入堆棧保護;在子程序執(zhí)行返回指令前用POP指令從堆棧中取出數據,彈回原來的寄存器。當然,保護和恢復現場的工作也可在主程序中完成。
保護現場與恢復現場通常用成對的PUSH/POP指令完成。例3.35
SUB1PROCFAR PUSH AX; PUSH BX;保護現場 PUSHCX; PUSHDX;
…;(子程序實際內容) POP DX; POP CX;恢復現場 POP BX;(后進先出) POP AX;
RET;SUB1 ENDP;三、
子程序的說明文件(1)子程序名:一般取具有象征意義的標識符。(2)子程序的功能:說明子程序完成的具體任務。(3)子程序所占用寄存器和工作單元的情況。
(4)子程序的入口參數:說明子程序運行所需的參數以及存放位置。(5)子程序的出口參數:說明子程序運行完畢的結果參數及存放的位置。(6)子程序示例:通過所舉示范例子,把具體的參數值代入,使之更具體了解子程序的功能。例3.34有一子程序說明文件如下①子程序名:DTOB②功能:完成將兩位十進制數(BCD碼)轉換成二進制數。③入口參數:AL寄存器中存放要轉換的十進制數。④出口參數:CL寄存器中存放轉換后的二進制數。⑤占用寄存器:BX⑥示例:輸入AL=01010110B(56)
輸出CL=00111000B1.寄存器傳送參數例3.36統(tǒng)計一個字中的“1”的個數。
算法1)用BCNT1子程序完成統(tǒng)計一字節(jié)中“1”的個數。2)用AL作入口參數,存放被統(tǒng)計的字節(jié);3)用BX作出口參數存放統(tǒng)計結果。
子程序的說明文件為:;子程序名:BCNT1;功能:統(tǒng)計一個字節(jié)中的“1”的個數;入口參數:AL-需要統(tǒng)計1的個數的字節(jié)數;出口參數:統(tǒng)計結果存入BX四、主程序與子程序之間參數的傳遞及其舉例主程序AX←取數據CALLBCNT1PUSHBXAL←AHCALLBCNT1POPAXAX←AX+BX存結果END子程序BCNT1BX←0CX←08HROLAL,1CF=0BX←BX+1CX-1≠0RETYNN?;主程序(主、子程序同段)
ASTACKSEGMENTSTACK DW256DUP(?) TOP LABELWORD
ASTACKENDS
DATASEGMENT TW DW1234HTWS DW00H
DATAENDS
CODESEGMENTASSUMECODE:CS,DATA:DS,STACK:SSSTART:MOVAX,DATAMOVDS,AX MOVAX,ASTACK MOVSS,AX MOVSP,OFFSETTOP MOVAX,TW
CALLBCNT1;近程調用 PUSHBX MOV AL,AH
CALLBCNT1;近程調用 POP AX ADD AX,BX MOVTWS,AXMOVAH,4CH; INT21H;BCNT1PROC ;段內子程序MOVBX,0; MOVCX,08H;LOOP1:ROLAL,1; JNCNEXT; INCBX;NEXT:LOOPLOOP1; RET;
BCNT1ENDP
CODE ENDS; ENDSTART;說明:
用BCNT1作標號可省去過程定義。;主程序(主、子程序不同段)STACKSEGMENTSTACK;
DW256DUP(?);TOP LABELWORD; STACK ENDS DATA SEGMENTTW DW1234H;TWS DW00H;存結果DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART: MOVAX,DATA; MOVDS,AX;
MOVAX,STACK; MOVSS,AX; MOVSP,OFFSETTOP; MOV AX,TW;
CALL
FARPTRBCNT1
;遠程調用
PUSH BX;第一次統(tǒng)計結果入棧 MOV AL,AH;
CALL
FARPTR
BCNT1
;遠程調用
POP AX;第一次統(tǒng)計結果送AX ADD AX,BX; MOV TWS,AX;存統(tǒng)計結果 MOV AH,4CH; INT 21H;CODE ENDS;LOOP1: ROL AL,1; JNC NEXT; INC BX;NEXT: LOOPLOOP1; RET;
BCNT1ENDPCODE1 ENDS; ENDSTART;源程序結束
CODE1SEGMENT;子程序ASSUMECS:CODE1;
BCNT1PROCFAR MOVBX,0; MOVCX,08H;2.用堆棧傳送參數利用堆棧不僅可用來保存返回地址,而且還可以用來存放主程序和子程序之間傳遞的參數數據。用堆棧傳遞參數的方法是在調用子程序之前,用PUSH指令將入口參數壓入堆棧,在子程序中通過出棧方式依次獲得這些參數。經過子程序操作處理后再將出口參數壓入堆棧,返回主程序后再通過出棧獲得結果。使用這種方式傳遞參數時,特別要注意堆棧中斷點的保存與恢復。例3.37編一數據模塊傳送子程序,指定用堆棧來傳遞參數。;子程序名:MOVTOM;功能:完成數據塊的傳送;入口參數:源數據塊首址,目的數據塊首址,數據塊長度均通過堆棧傳送;出口參數:在內存單元DEST開始存放傳送好的數據塊;主程序STACKSEGMENTSTACK DW256DUP(?)TOPLABELWORDSTACKENDSDATA SEGMENTSOUCEDB38H,7CH,0AFH,…COUNTEQU$-SOUCEDEST DBCOUNTDUP(?)DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATA MOVDS,AX MOV AX,STACK MOV SS,AX LEA SP,TOP MOV SI,OFFSETSOUCE MOV DI,OFFSETDEST MOV CX,COUNT
PUSH CX
;數據塊長度進棧
PUSH DI
;目的數據塊首地址棧
PUSH SI
;源數據塊首地址進棧
CALL MOVTOM…MOVTOM PROCNEAR
POPBX ;取出斷點
POPSI
;源數據塊首址出棧
POPDI
;目的數據塊首址出棧
POPCX
;數據塊長度出棧
PUSHBX ;保存斷點LOP1:MOVAL,[SI] MOV[DI],AL INCSI INCDI LOOP LOP1 RETMOVTOM ENDPCODEENDS3.用存儲單元傳遞參數主程序在調用子程序前,將所有入口參數按約定的次序存入存儲區(qū)的某一區(qū)域內,進入子程序后按約定從該存儲區(qū)中取出輸入參數進行處理,所得出口參數也按約定的次序存入指定存儲區(qū),返回主程序后就可取得結果。
例3.38
把4個字節(jié)單元的非壓縮型BCD碼(高4位為0)壓縮為4位壓縮型BCD碼,存放到指定的BCD碼單元中。
該子程序的入口參數是存放4個字節(jié)的非壓縮型BCD碼的首址BUF。出口參數,即壓縮合并后的4位BCD碼,存放在字單元BCDE中,都是通過存儲單元來傳遞參數的。;子程序名:MERGE;功能:將4位非壓縮型BCD碼壓縮成4位壓縮型BCD碼;入口參數:4位非壓縮型BCD碼存放在BUF開始的單元中;出口參數:壓縮后的4位BCD碼存放在BCDE字單元中MERGEPROCNEAR
PUSHAX ;保護現場 PUSHBX PUSHCX;PUSHCL? PUSHSI MOVSI,OFFSETBUF;取首址 MOVAL,[SI] ;取一位BCD碼 MOVBL,[SI+1] ;再取一位BCD碼MOVCL,4 SHLBL,CL ;左移4位 ADDAL,BL ;合并兩位BCD碼 MOVAH,[SI+2] ;取一位BCD碼 MOVBH,[SI+3] ;再取一位BCD碼 MOVCL,4 SHLBH,CL ;左移4位 ADDAH,BH ;合并兩位BCD碼 MOVBCDE,AX;四位壓縮BCD碼送BCDE單元
POPSI ;恢復現場(能不能在主程序中pop) POPCX POPBX POPAX RETMERGEENDP4、子程序綜合舉例例3.39
編寫將n個8位無符號二進制數排成遞增序列的子程序SORT。將例3.28改寫成子程序,以供調用。入口參數:①存放n個數的字節(jié)存儲區(qū)首址;②待排序的元素個數n。出口參數:已排序的數仍存放在字節(jié)存儲區(qū)中。由于要傳遞的參數不多,故可采用寄存器方式傳遞參數。
子程序SORT的說明及程序如下:;子程序名:SORT;功能:將一組8位無符號二進制數按遞增順序排列。;入口參數 BX——存放待排序數組存儲區(qū)首址 CX——存放待排序數組元素的個數;出口參數:已排成遞增序列的n個無符號數仍存放在由BX指示首址的字節(jié)存儲區(qū)中。五、子程序的嵌套與遞歸
1.子程序的嵌套子程序嵌套是指子程序本身再次調用別的子程序?!瑿allsub1……Callsub2…RET…Callsub3…RET………RET主程序子程序1子程序2子程序3ADR1ADR2ADR3注意:(1)嵌套過程中的逐層調用及按層返回是由堆棧保證的。即先調用的后返回,而后調用的先返回。ADR1ADR2ADR3CALLSUB1SPSPSPSPCALLSUB2CALLSUB3調用ADR1ADR2ADR3CALLSUB1SPSPSPSPCALLSUB2CALLSUB3返回(2)除了調用和返回外,在子程序中還可能會用到堆棧,必須指出的是,子程序中若需使用堆棧,則壓入操作與彈出操作必須成對。只有這樣,才能保證每個子程序返回前SP恰好指向返回地址。遞歸子程序對應于數學上對函
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 充電樁知識培訓課件
- 2025云南西雙版納州勐??h氣象局公益崗招聘1人備考題庫及1套完整答案詳解
- 2026四川成都市成華區(qū)人社局招聘編外人員1人備考題庫及完整答案詳解1套
- 2026中國人民銀行清算總中心直屬企業(yè)中志支付清算服務(北京)有限公司招聘2人備考題庫及答案詳解(新)
- 特崗 歷史真題及答案
- 2026年空氣凈化器項目公司成立分析報告
- 2026年智能調光開關項目可行性研究報告
- 2026年智能寵物喂食攝像頭項目評估報告
- 2026年跨境智能城市出海項目可行性研究報告
- 2026年智能排隊叫號系統(tǒng)項目評估報告
- 植保無人機教學課件
- 物料流轉標識管理辦法
- 2025秋開學師德師風建設會議校長講話:守住“德”的根站穩(wěn)“教”的本點亮“情”的魂
- 英語培訓機構管理制度及運營規(guī)范
- 全國人民學習“鄉(xiāng)村振興戰(zhàn)略”知識競賽題庫(附含答案)
- 再生資源回收利用產業(yè)園區(qū)項目投資可行性研究報告
- AI算法應用創(chuàng)新創(chuàng)業(yè)項目商業(yè)計劃書
- 四川省綿陽市名校2026屆中考一模英語試題含答案
- 塔里木油田管理辦法
- 去極端化宣傳課件
- 2025至2030中國智能VR手術眼鏡市場發(fā)展現狀及未來前景預測分析報告
評論
0/150
提交評論