




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗四 子程序實驗(一)本實驗的目的在于讓讀者掌握同一模塊調用的方法。1 實驗目的(1) 掌握主程序與子程序之間的調用關系及調用方法。(2) 掌握子程序調用過程中近程調用與遠程調用的區(qū)別。(3) 掌握通過堆棧轉送參數(shù)的方法。2 實驗內容(1) 將BUF開始的10個單元中的二進制數(shù)轉換成兩
2、位十六進制數(shù)的ASCII碼,在屏幕上顯示出來。要求碼型轉換通過子程序HEXAC實現(xiàn),在轉換過程中,通過子程序DISP實現(xiàn)顯示.(2) 編寫一個主程序,從鍵盤接收若干個字符,然后用遠調用的方法,調用子程序統(tǒng)計字符串中字符b的個數(shù).子程序的參數(shù)是字符串的首地址TABLE,字符串長度N及字符”b”.子程序返回字符b”的個數(shù).參數(shù)傳送采用堆棧實現(xiàn).主程序在子程序返回后,顯示字符”b”及其個數(shù)(設為一位十六進制數(shù)).3 實驗說明(1) 第一個實驗程序
3、用子程序的近程調用實現(xiàn)。由于在調用HEXASC子程序時,子程序又調用了DISP子程序,這叫子程序的嵌套調用。實驗過程中可以從堆棧的內容看到兩個子程序的返回地址值。由于是近調用,地址值只包括返回地址的段內偏移量。在每個子程序的執(zhí)行中,檢查CS值是不變的。(2) 第二個程序是利用遠調用的方法調用子程序的。在遠調用情況下,主程序與子程序處在不同的邏輯代碼段中,可在子程序執(zhí)行中查看CS值,它與主程序中的CS值是不同的。子程序調用后,堆棧中保留了返回地址的段地址及段內偏移量。(3)
4、160; 第二個程序中,主程序與子程序之間參數(shù)的傳送是由堆棧實現(xiàn)的。一段是將參數(shù)(此處是串首址TABLE,串的長度N及待統(tǒng)計的字符“b”)順序壓如堆棧,在子程序調用后,通過BP指針對堆棧中的參數(shù)訪問,并將統(tǒng)計的結果通過堆棧返回。有關該方法的原理此處不再介紹。4 實驗準備(1) 預習子程序設計的基本方法,根據(jù)實驗內容要求,畫出子程序及主程序的流程圖。(2) 熟悉鍵盤鍵入字符串及用堆棧傳送參數(shù)的程序段編制方法。5 實驗步
5、驟(1) 編輯、匯編兩個源程序,生成相應的可執(zhí)行文件(。EXE)(2) 用DEBUG的R 命令,T 命令或G命令和D命令檢查遠程調用及近程調用時堆棧的變化。特別是通過堆棧傳送的參數(shù)和子程序取出的參數(shù)是返回參數(shù)的詳細過程。(3) 檢查程序執(zhí)行的結果是否正確。6 實驗報告要求 (1) 分析遠程調用與近程
6、調用的區(qū)別,在用DEBUG有關命令觀察時,執(zhí)行過程有何不同。(2) 說明用堆棧傳送參數(shù)的過程及其具體方法。(3) 分析實驗結果及所遇到問題,并說明解決的方法。7.參考程序清單 (1)碼型轉換程序清單:;CONV.ASNDATA SEGMENTBUF DB 0ABH,0CDH,0DEH,01H,02H,03HDB 3AH,4BH,5CH,6FHDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV A
7、X,DATA MOV DS,AX MOV CX,10 LEA BX,BUFAGAIN: MOV AL, BX CALL HEXASC INC BX LOOP AGAIN MOV AH,4CH INT 21HHEXASC PROC NEARMOV DL,ALPUSH CXMOV CL,4SHR DL,CLPOP CXCALL DISP ;顯示高位HEX數(shù)MOV DL,ALAND DL,0FHCALL DISPRETHEXASC ENDPDISP PROP CMP DL,9 JBE NEXT ADD DL,7NEXT: ADD DL,30H MOV AH,2 INT 21H ;顯示 RET DIS
8、P ENDPCODE ENDS END START(2)統(tǒng)計并顯示某鍵入字符的個數(shù)的程序: :COUNTER.ASMDATA SEGMENTCHAR DB bBUF DB 50H, ? 50H DUP(?)DATA ENDS MCODE SEGMENT ASSUME CS: MCODE, DS: DATASTART: MOV AX,DATA MOV DS,AX LEA DX,BUF MOV AH,9 INT 21H LEA SI BUF MOV CL, SI+1 MOV CH, 0 ;CX中為字符串長度 INC SI INC SI ;SI指向串首址TABLE MOV AL,CHAR MOV A
9、H,0 ;AX中為待查字符 PUSH SI PUSH CX PUSH AX ; 參數(shù)送堆棧CALL CHECKPOP AX :統(tǒng)計個數(shù)在AL中 MOV DL,CHAR MOV AH,2 INT 21H MOV DL,AL AND DL, 0FH CMP DL,9 JBE NEXT ADD DL,7NEXT: ADD DL,30H MOV AH,2 INT 21H ;顯示統(tǒng)計個數(shù) MOV AH,4CH INT 21HM CODE ENDSSCODE SEGMENT ASSUME CS:SCODECHECK PROC FAR PUSH BP MOV BP,SP MOV SI,BP+10 MOV CX,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論