




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 本科實驗報告實驗名稱: 子程序設計實驗 課程名稱:課程設計(CPU與匯編) (實驗)實驗時間:2014.11.2任課教師:馬永鋒實驗地點:10-102實驗教師:蘇京霞實驗類型: 原理驗證 綜合設計 自主創新學生姓名:朱賀學號/班級:1120121427/05411202組 號:學 院:信息與電子學院同組搭檔:無專 業:電子科學與技術成 績:實驗五 子程序設計實驗(設計性實驗) 一、實驗要求和目的 1熟悉匯編語言程序設計結構; 2熟悉匯編語言子程序設計方法; 3熟悉利用匯編語言子程序參數傳遞方法; 4熟悉匯編語言字符串處理基本指令的使用方法; 5掌握利用匯編語言實現字符串的輸入輸出程序設計方法
2、; 6掌握數制轉換程序實現方法。 二、軟硬件環境 1、 硬件環境:計算機系統 windows; 2、 軟件環境:裝有 MASM、DEBUG、LINK、等應用程序。 三、實驗涉及的主要知識 A) 子程序知識要點: 1、 掌握子程序的定義語句;過程名 PROC near/far 過程體 RET 過程名 ENDP 2.子程序結構形式一個完整的子程序一般應包含下列內容: 1. )子程序的說明部分 在設計了程序時,要建立子程序的文檔說明,使用戶能清楚此子程序的功能和調用方法.說明時,應含如下內容: .子程序名:命名時要名中見意. .子程序的功能:說明子程序完成的任務; .子程序入口參數:說明子程序運行所
3、需參數及存放位置; .子程序出口參數:說明子程序運行結果的參數及存放位置; .子程序所占用的寄存器和工作單元; .子程序調用示例; 2、 )掌握子程序的調用與返回在匯編語言中,子程序的調用用CALL,返回用RET指令來完成。 .段內調用與返回:調用子程序指令與子程序同在一個段內。因此只修改IP; .段間調用與返回:調用子程序與子程序分別在不同的段,因此在返回時,需同時修改CS:IP。 3)子程序的現場保護與恢復 保護現場:在子程序設計時,CPU內部寄存器內容的保護和恢復。 一般利用堆棧實現現場保護和恢復的格式:過程名PROC NEAR/FAR PUSH AX PUSH BX . . PUSH
4、DX . . . POP DX . . . POP AX RET 過程名 ENDP 4.子程序的參數傳遞方法 1 寄存器傳遞參數 這種方式是最基本的參數傳遞方式。 2 存儲器單元傳(變量)遞參數 這種方法是在主程序調用子程序前,將入口參數存放到約定的存儲單元中;子程序運行時到約定存儲位置讀取參數;子程序執行結束后將結果也放在約定存儲單元中。 3 用堆棧傳遞參數 利用共享堆棧區,來傳遞參數是重要的的方法之一。 B) 字符、字符串輸入輸出知識要點: 在實際應用中,經常需要從鍵盤輸入數據并將結果等內容顯示到屏幕上,方便程序控制及查看結果。匯編語言的數據輸入和輸出分成兩類,一是單個字符數據的輸入輸出,
5、一是字符串數據的輸入輸出。都可以通過DOS功能調用來實現,下面就分別介紹下用來實現數據輸入輸出的功能調用的使用方法。 1、 單個字符輸入 單個字符輸入可以利用DOS的1號功能調用來完成,使用方法為: MOV AH,1 INT 21H 這兩條語句執行后,光標會在屏幕上閃爍,等待輸入數據,輸入的數據以 ASCII 碼形式存儲在AL寄存器中。 2、 單個字符輸出 單個字符輸出可利用DOS2號功能調用來完成,使用方法為: MOV DL,? MOV AH,2 INT 21H 單個字符輸出需要把要輸出字符的ASCII碼放在DL寄存器中。 3、 字符串輸入 從鍵盤輸入一串字符串可以利用DOS的10號功能調用
6、來完成,使用方法為: BUF DB 50 ;預定義可以輸入的最大字符個數 DB ? ;實際輸入字符個數,根據輸入自動統計 DB 50 DUP (?) ;存放輸入字符串數據緩沖區 LEA DX,BUF MOV AH,10 INT 21H 4、 字符串輸出 字符串輸出可由DOS 9號功能調用來完成,使用方法為: STRING DB HELLO$ LEA DX,STRING MOV AH,9 INT 21H C) 表的處理知識要點: 表的處理在實際數據處理中應用較為廣泛,主要有排序、搜索、插入和刪除等操作。有一些常用的冒泡法、對分搜索法等需要掌握。 四、實驗內容與步驟 1、 從鍵盤輸入一串字符串(顯
7、示提示)到內存中,在該字符串的某一個指定位置,插入某一字符或刪除某一字符,并顯示操作后的字符串。 程序流程圖他如下:輸入字符串選擇功能結束開始輸入字符和位置輸入刪除的位置該位置后字符依次后移該位置后字符依次前移插入該字符插入刪除源代碼如下:DATAS SEGMENTSTR1 DB 'input strings:$'STR2 DB '1 to Delete 0 to insert:$'STR3 DB 'input string:$'STR4 DB 'address:$'BUF1 DB ?BUF2 DB ? A DB 11 DB ?
8、DB 11 DUP('$')DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART:main proc far MOV AX,DATAS MOV DS,AX LEA DX,STR1 CALL output LEA DX,A MOV AH,10 INT 21H ;輸入字符串保存在A中 call CR LEA DX,STR2 CALL output; MOV AH,01 INT 21H CMP AL,'0' JZ insert JNZ deleteinsert: call CR LEA DX,STR3 CALL o
9、utput MOV AH,01 INT 21H MOV BUF1,AL ;輸入要插入的字符 call CR LEA DX,STR4 CALL output MOV AH,01 INT 21H MOV BUF2,AL ;要插入位置 call CR call insert1 JMP L1delete:call CRLEA DX,STR4 CALL output MOV AH,01 INT 21HMOV BUF2,AL ;要刪除的位置call CR call delete1 JMP L1L1: LEA DX,A2 CALL outputMOV AH,4CH INT 21H main endpCR p
10、roc nearMOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HINT 21H retCR endp ;回車換行output proc nearMOV AH,9 INT 21H retoutput endp ;輸出insert1 proc nearMOV BX,0SUB BUF2,30HMOV BL,A1MOV SI,BXINC BXSUB BL,BUF2MOV CX,BXL3: MOV BL,ASI+1MOV ASI+2,BLDEC SILOOP L3MOV BL,BUF1MOV AH,0MOV AL,BUF2MOV SI,AXMOV ASI+1
11、,BLretinsert1 endp ;插入子函數delete1 proc nearMOV BX,0SUB BUF2,30HMOV BL,A1SUB BL,BUF2MOV CX,BXMOV BL,BUF2MOV SI,BXINC SIL4: MOV BL,ASI+1MOV ASI,BLINC SILOOP L4MOV BL,A1MOV SI,BXMOV ASI+1,'$'retdelete1 endp ;刪除子函數CODES ENDS END START選擇插入功能,運行結果如下: 選擇刪除功能,運行結果如下: 2、 編寫程序把從鍵盤輸入的四位十六進制數,轉換為十進制形式在屏幕
12、上打印出來。 程序源代碼和流程圖如下:開始輸入10進制數將ASCII碼轉換為數字將數字組合將該數字除16取余直到商為零,并保存余數將得到的數轉換為ASCII碼輸出得到的數結束DATAS SEGMENT num2 DB 0,0,0,0 num22 DW 0 tempio DB 0 temp DW 0 tab DB '0123456789abcdef' DATAS ENDS STACKS SEGMENT STACKS ENDS CODES SEGMENT assume DS:DATAS,SS:CODES,CS:CODES START: main proc farMOV AX,DAT
13、AS MOV DS,AX MOV AX,0 LEA SI,num2 CALL input MOV AL,tempio SUB AL,'0' MOV DS:SI,AL INC SI CALL input MOV AL,tempio SUB AL,'0' MOV DS:SI,AL INC SI CALL input MOV AL,tempio SUB AL,'0' MOV DS:SI,AL INC SI CALL input MOV AL,tempio SUB AL,'0' MOV DS:SI,AL CALL newline LEA
14、SI,num2 MOV CX,4 MOV DX,0AH L1: cmp DS:SI,DL jb L2 MOV AL,DS:SI SUB AL,7 MOV DS:SI,AL L2: INC SI loop L2 LEA SI,num2 MOV AH,DS:SI MOV CX,4 shl AH,CL INC SI MOV BL,DS:SI ADD AH,BL INC SI MOV AL,DS:SI MOV CX,4 shl AL,CL INC SI MOV BL,DS:SI ADD AL,BL MOV num22,AX MOV DX,0 MOV CX,2710h DIV CX MOV temp,D
15、X ADD AX,'0' MOV tempio,AL CALL output MOV AX,temp MOV DX,0 MOV CX,3e8h DIV CX MOV temp,DX ADD AX,'0' MOV tempio,AL CALL output MOV AX,temp MOV DX,0 MOV CX,64h DIV CX MOV temp,DX ADD AX,'0' MOV tempio,AL CALL output MOV AX,temp MOV DX,0 MOV CX,0AH DIV CX MOV temp,DX ADD AX,
16、39;0' MOV tempio,AL CALL output MOV AX,temp ADD AX,'0' MOV tempio,AL CALL output CALL newline CALL newline MOV AH,4ch int 21h main endpinput proc near MOV AH,1 int 21h MOV tempio,AL ret input endp ;輸入函數newline proc nearMOV AH,2 MOV DL,0dh int 21h MOV AH,2 MOV DL,0AH int 21h ret newline e
17、ndp ;回車換行output proc nearMOV AH,2 MOV DL,tempio int 21h ret output endp ;輸出函數CODES ENDS END START運行程序如下:經驗證結果正確3、 從鍵盤輸入(顯示提示)十個2位十進制數(正數)到內存中,按從小到大排序,然后把該數以十六進制形式在屏幕上打印出來。 流程圖及源代碼如下: DATAS SEGMENT BUF DB 40 DB ? DB 40 DUP(0) SHUZI DB 10 DUP(0) BIAO DW 0 STRING DB 'input 10 numbers:$'DATAS EN
18、DS開始輸入十個2 位十進制數將ASCII碼轉換為數字采用冒泡排序法排序將結果通過移位轉換為16進制將得到的數轉換為ASCII碼輸出得到的數結束STACKS SEGMENT STA DW 20H DUP(0)STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:main proc far MOV AX,DATAS MOV DS,AX MOV AX,STACKS MOV SS,AX LEA BX,STRING ;輸出 CALL output CALL HUICHE CALL input ;輸入10個十進制數 CALL H
19、UICHE CALL change ;將ASCII碼轉換 CALL paixu ;將其排序 LEA SI,BUF ADD SI,5 MOV DI,10ABC: MOV AL,SICALL output16 ;將16進制數輸出CALL konggeADD SI,3DEC DIJNZ ABC MOV AH,4CHINT 21Hmain endpoutput proc near ;輸出字符串MOV DX,BXMOV AH,09HINT 21HREToutput endpinput proc near ;輸入字符串LEA DX,BUF MOV AH,0AH INT 21H RETinput endp
20、HUICHE proc near ;回車換行MOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HINT 21HRETHUICHE endpchange proc near ;ASCII碼轉換LEA SI,BUFADD SI,2MOV CX,10L1: AND BYTE PTR SI,0FHINC SIAND BYTE PTR SI,0FHADD SI,2LOOP L1 ;變成十進制LEA SI,BUFADD SI,2MOV BL,10MOV CX,10L2: MOV AL,SIMUL BL ;變成實際數字ADD AL,SI+1MOV SI,ALADD
21、SI,3LOOP L2RETchange endp paixu proc near ;排序LEA SI,BUFADD SI,2LEA DI,BUFADD DI,5MOV CX,10MOV AL,SIL3:MOV DI,CXMOV BX,2 L4: MOV AL,BUFBX CMP AL,BUFBX+3JBE CONTINUEXCHG AL,BUFBX+3MOV BUFBX,AL CONTINUE:ADD BX,3LOOP L4MOV CX,DILOOP L3RETpaixu endp output16 proc near;顯示16進制數字MOV CL,4MOV DL,ALSHR DL,CLMO
22、V BIAO,AXCALL exchangeMOV AX,BIAOMOV DL,ALAND DL,0FHCALL exchangeREToutput16 endpexchange proc nearCMP DL,9JA NOTDIGOR DL,30HJMP FINALNOTDIG:ADD DL,37HFINAL:MOV AH,02HINT 21HRETexchange endpkongge proc near ;輸出空格MOV DL,20HMOV AH,02HINT 21HRETkongge endpCODES ENDSEND START運行結果如下:4、 英文人名排序。從終端鍵入20個人名,
23、當所有人名都鍵入后,按字母上升的次序將人名排序,并在屏幕上顯示已經排好序的人名。 流程圖如下:開始輸入一個字符串結束是否第一個字符?與已經輸入的字符串比較排序是否為第20個?否是輸出排序后的字符串組是源代碼如下:DATAS SEGMENT buf4 DB 460 dup('$') bp4 DW 20 dup(0) mark DB '' num2 DW 20 num3 DW 19 temp DW 0 DATAS ENDS STACKS SEGMENT STACKS ENDS CODES SEGMENT ASSUME DS:DATAS,SS:STACKS,CS:CODES START: main proc farMOV AX,DATAS MOV DS,AX MOV ES,AX MOV AX,STACKS MOV SS,AX LEA SI,buf4 LEA DI,bp4 MOV CX,20 L1: MOV AL,20 MOV DS:SI,AL MOV DX,SI ADD DX,2 MOV ES:DI,DX INC DI INC DI CALL gets ADD SI,23 loop L1 L2: LEA SI,bp4 MOV AX,19 MOV num3,AX
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025如何強化合同監管功能促進企業信用體系建設
- 《2025年個人租賃企業汽車合同》
- 2025投資者應警惕合同中的隱含風險
- 2024年復合管道項目資金申請報告代可行性研究報告
- 2025臨時勞動合同模板
- 2025景觀設計與施工承包合同
- 2025全面汽車租賃合同范本
- 2025房屋租賃拆遷合同模板
- 2025年履行合同勞動的基本原則
- 2025的勞動合同范本
- GB/T 2424.7-2024環境試驗第3部分:支持文件及導則試驗A(低溫)和B(高溫)的溫度箱測量(帶負載)
- 中國法蘭鍛件行業市場需求研究及前景趨勢分析報告2024-2030年
- 重型燃氣輪機用大型鑄鍛件 第3部分:鑄鋼件 編制說明
- 智慧農業的支撐技術簡介
- 政務服務中心物業服務投標方案【新版】(技術方案)
- 重大事故隱患判定標準培訓記錄、培訓效果評估
- 2024年甘肅省天水市中考生物·地理試題卷(含答案)
- 詩詞接龍(飛花令)六
- 21《莊子》二則 北冥有魚 公開課一等獎創新教案
- 2024年4月自考00995商法(二)試題
評論
0/150
提交評論