華中科技大學匯編試驗報告4_第1頁
華中科技大學匯編試驗報告4_第2頁
華中科技大學匯編試驗報告4_第3頁
華中科技大學匯編試驗報告4_第4頁
華中科技大學匯編試驗報告4_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、岸中科技大孚課程實驗報告課程名稱:匯編語言程序設計實驗實驗名稱:實驗四子程序的設計與調用,模塊化程序設計實驗時間:2016-4-12,14:00-17:30實驗地點:南一樓804室73號實驗臺指導教師:張勇專業(yè)班級:計算機科學與技術201409班學號:U201414813姓名:唐禮威同組學生:魯凱報告日期:2016年4月18日原創(chuàng)性聲明本人鄭重聲明:本報告的內容由本人獨立完成,有關觀點、方法、數(shù)據(jù)和文獻等的引用已經在文中指出。除文中已經注明引用的內容外,本報告不包含任何其他個人或集體已經公開發(fā)表的作品或成果,不存在剽竊、抄襲行為。特此聲明!學生簽名:日期:成績評定頭駟兀成質重倚分(70分)(實

2、驗步驟清晰詳細深入,實驗記錄真實完整等)報告撰寫質量得分(30分)(報告規(guī)范、完整、通順、詳實等)總成績(100分)指導教師簽字:日期:匯編語言程序設計實驗報告1 實驗目的與要求12 實驗內容13 實驗過程23.1 任務123.1.1 設計思想及存儲單元分配23.1.2 流程圖33.1.3 源程序43.1.4 實驗步驟123.1.5 實驗記錄124 體會14參考文獻15匯編語言程序設計實驗報告1實驗目的與要求(1)掌握子程序設計的方法與技巧,熟悉子程序的參數(shù)傳遞方法和調用原理;(2)掌握宏指令、模塊化程序的設計方法;(3)掌握較大規(guī)模程序的合作開發(fā)與調試方法。2實驗內容進一步修改與增強實驗二的

3、學生成績查詢程序的功能,具體要求如下:(1)程序執(zhí)行時首先顯示一個功能菜單:選才¥1=錄入學生姓名和各科考試成績,2=計算平均分,3=成績排序,4=輸出成績單,5=程序退出。提示:由于學生姓名和成績是通過程序錄入的,因此,定義學生成績表緩沖區(qū)時,初始值都可以置零。為避免錄入成績的時間過程太長,假定學生人數(shù)在5人左右,具體人數(shù)自行決定。(2)2人一組,一人負責包括菜單顯示、程序退出在內的主程序,以及菜單中的功能1和2;另一人負責菜單中的功能3和4。各自匯編自己的模塊,然后連接生成一個程序。注意,在每個模塊的開始,注明編寫者的名字以及同組同學的名字。(3)錄入學生姓名和各科考試成績時,首

4、先顯示錄入的是第幾個學生的信息,然后分別在提示之后輸入姓名和各科成績(可以借鑒書上十進制轉二進制的子程序F10T2)。所有學生信息錄入完畢后回到菜單顯示的位置。姓名及考試成績的存放、平均分的計算,按照實驗二的要求。(4)排序的基本要求是按照平均成績從高到低排序,也可以考慮按照指定課程的成績排序。輸出成績單的基本要求是按照排序的結果依次顯示每個學生的姓名和平均成績,也可以考慮按照指定課程、指定進制的形式顯示(可以借鑒書上二進制轉十進制的子程序F2T10)。提示:可以采用一個一維數(shù)組記錄每個學生成績的排序名次,這樣就可以避免在排序算法里交換成績表中的具體信息了。(5)將9號和10號DOS系統(tǒng)功能調

5、用定義成宏指令并調用。上述任務中,重要操作環(huán)節(jié)(納入到學生自己寫的實驗步驟中)提示:匯編語言程序設計實驗報告本次實驗中需要學生嘗試體會的操作可分為以下幾種:1 .在TD中跟蹤到子程序內部有幾種方法?在TD中觀察子程序調用和返回時堆棧的變化。2 .注意觀察FAR、NEAR類型子程序的RET指令的機器碼有何不同?觀察FAR類型子程序被調用時堆棧的變化情況。3 .通過把一個模塊拆成多個模塊或反之,體會子程序和模塊化程序設計的方法,體會模塊調用關系圖、子程序功能說明、輸入/輸出說明在程序設計中的作用。4 .觀察不同模塊的可合并段合并后變量偏移地址的變化情況。觀察不同段在內存里的放置次序0體會模塊間段的

6、定義及其對應的裝配方法。5 .在編程中使用不同的子程序參數(shù)傳遞方法來編寫同一個子程序。6 .觀察模塊間的參數(shù)的傳遞方法,包括公共符號的定義和外部符號的引用,若符號名不一致或類型不一致會有什么現(xiàn)象發(fā)生?7 .通過TD觀察宏指令在執(zhí)行程序中的替換和擴展,解釋宏和子程序的調用有何不同。8 .如何使菜單和成績單顯示得更漂亮一點?3實驗過程3.1 任務13.1.1 設計思想及存儲單元分配任務主要是實現(xiàn)主菜單和功能一、功能二。主菜單很簡單,就是重復多次使用9號調用輸出菜單欄,然后1號調用輸入1、2、3、4、5,選擇要實現(xiàn)的功能。子程序1:寄存器分配:CL:輸入姓名字符串長度CH:計數(shù):每個學生3次輸入成績

7、SI:循環(huán)錄入姓名和成績時SI每+1實現(xiàn)BUF段14個字節(jié)的跳躍BX:計數(shù):+1在INPUT_N和INPUT_S和BUF段中實現(xiàn)后移AX:存放姓名的字符和成績的字符DX:在將輸入成績字符轉換為實際成績時存放成績子程序2:寄存器分配:BX:+1實現(xiàn)尋找成績所在的字節(jié)SI:每+1實現(xiàn)一個學生到另一個學生的跳躍匯編語言程序設計實驗報告AX:存放3門課相加后的成績CX:CL:3門課成績CX:4個學生3.1.2 流程圖子程序1:開始NN把成績放入BUF段循環(huán)3次將字符串轉化為真實成績N=0?結束匯編語言程序設計實驗報告子程序2:開始0->SI0->AX0->BX3->CL4-&g

8、t;CH0->SS*14->SICL=0?AX/3->ALAL->BUFSI+13BUFBX+SI+10->DLAL+DL->ALBX+CL-S+CH-3.1.3源程序;主程序;編寫者:唐禮威;同組同學:魯凱;功能:定義數(shù)據(jù)段,打印功能菜單PUBLICBUFPUBLICNEXTRNSORT:NEAREXTRNPRINT:NEAR.386STACKSEGMENTUSE16STACK匯編語言程序設計實驗報告DB200DUP(0)STACKENDSDATASEGMENTUSE16PUBLICBUFDB10DUP(0)DB?,?,?,?DB10DUP(0)DB?,?

9、,?,?DB10DUP(0)DB?,?,?,?DB10DUP(0)DB?,?,?,?NDW0SDW0TIP1DB'Pleasemakethechoice:$'TIP2DB'1inputname$'TIP3DB'2calculatescore$'TIP4DB'3sortingorder$'TIP5DB'4print$'TIP6DB'5exit$'INPUT_NDB12DB?DB10DUP(0)INPUT_SDB6DB?DB4DUP(0)DATAENDSCODESEGMENTUSE16PUBLICASS

10、UMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXNINEMACROA;宏定義9號調用LEADX,A匯編語言程序設計實驗報告MOVAH,9INT21HENDMMENU:NINETIP1;輸出菜單MOVDL,0AHMOVAH,2INT21HMOVDL,0DHMOVAH,2INT21HNINETIP2MOVDL,0AHMOVAH,2INT21HMOVDL,0DHMOVAH,2INT21HNINETIP3MOVDL,0AHMOVAH,2INT21HMOVDL,0DHMOVAH,2INT21HNINETIP4MOVDL,0AHMOVAH,2INT21

11、HMOVDL,0DHMOVAH,2INT21HNINETIP5MOVDL,0AHMOVAH,2匯編語言程序設計實驗報告INT21HMOVDL,0DHMOVAH,2INT21HNINETIP6MOVDL,0AHMOVAH,2INT21HMOVDL,0DHMOVAH,2INT21HMOVAH,1INT21H;MOVDL,0AH;MOVAH,2;INT21H;MOVDL,0DH;MOVAH,2;INT21HCMPAL,31HJZL1CMPAL,32HJZL2CMPAL,33HJZL3CMPAL,34HJZL4CMPAL,35HJZOVERJMPMENUOVER:MOVAH,4CHINT21H匯編語言

12、程序設計實驗報告L1:CALLLOPA1JMPMENUL2:CALLLOPA2JMPMENUL3:CALLSORTJMPMENUL4:CALLPRINTJMPMENU;子程序1;編寫者:唐禮威;同組同學:魯凱;功能:輸入4個學生的姓名和成績;寄存器分配:CL:輸入姓名字符串長度;CH:計數(shù):每個學生3次輸入成績;SI:循環(huán)錄入姓名和成績時SI每+1實現(xiàn)BUF段14個字節(jié)的跳躍;BX:計數(shù):+1在INPUT_N和INPUT_S和BUF段中實現(xiàn)后移;AX:存放姓名的字符和成績的字符;DX:在將輸入成績字符轉換為實際成績時存放成績LOPA1PROCNEARTENMACROB;宏定義10號調用LEAD

13、X,BMOVAH,10INT21HENDMMOVSI,0LOOP1A:MOVBX,0TENINPUT_NMOVDL,0AHMOVAH,2INT21HMOVDL,0DHMOVAH,2匯編語言程序設計實驗報告INT21HMOVCL,INPUT_N1NEXT_N:PUSHAXMOVAX,NIMULAX,14MOVSI,AXPOPAXMOVAL,INPUT_N2+BXMOVBX+SI,ALINCBXDECCL;把每個字符放入BUF段JNZNEXT_NMOVCH,0;三門課的成績SCORE:MOVBX,0TENINPUT_SMOVDL,0AHMOVAH,2INT21HMOVDL,0DHMOVAH,2IN

14、T21HMOVDL,100MOVDH,0MOVCL,INPUT_S1;輸入成績長度,輸入3位數(shù)進行轉換NEXT_S:;把輸入的字符串轉為10進制成績PUSHAXMOVAX,NIMULAX,14MOVSI,AXPOPAXMOVAL,INPUT_S2+BX匯編語言程序設計實驗報告SUBAL,30IMULDL;(AL)*DL->AXADDDH,ALINCBXPUSHAXPUSHBXXORAX,AXMOVAL,DL;(DL)->ALMOVBL,10;IDIVBL;(AX)/10->ALMOVDL,AL;(AL)->DLPOPBXPOPAXDECCLJNZNEXT_S;成績的3個

15、字符進行轉換ADDBL,CHMOVBX+SI+7,DH;把成績放入BUF10INCCHCMPCH,3JNZSCORE;循環(huán)3次輸入成績INCNCMPN,4;循環(huán)輸入4個人的信息JNZLOOP1ARETLOPA1ENDP;子程序2;編寫者:唐禮威;同組同學:魯凱;功能:計算4個學生的平均成績10匯編語言程序設計實驗報告;寄存器分配:BX:+1實現(xiàn)尋找成績所在的字節(jié);SI:每+1實現(xiàn)一個學生到另一個學生的跳躍;AX:存放3門課相加后的成績;CX:CL:3門課成績CX:4個學生LOPA2PROCNEARMOVMOVSI,0CH,4NEXT2:MOVAX,0MOVBX,0MOVCL,3PUSHAXMO

16、VAX,SIMULAX,14MOVSI,AXPOPAXNEXT1:MOVDL,BUFBX+SI+10ADDAL,DLINCBXDECCLJNZNEXT1MOVCL,3IDIVCLMOVBUFSI+13,ALINCSDECCHJNZNEXT2RET;三門課成績相加LOPA2ENDPCODEENDSENDSTART11匯編語言程序設計實驗報告3.1.4實驗步驟1 .在TD中跟蹤到子程序內部我使用的方法是當程序運行至子程序入口時,直接按f7進入到子程序。如要進入子程序1:當程序運行至如圖入口時,按下f7如圖,按下f7后進入子程序1執(zhí)行語句MOVSI,02 .公共符號的定義和外部符號的引用,若符號名不

17、一致或類型不一致,會發(fā)生報錯,當我程序中的公共符號和同組同學的外部符號符號名不一致或類型不一致時,會發(fā)生報錯3 .如圖是第一次使用宏定義的9號調用在TD中的語句,可見宏指令的展開只是按宏定義的語句替換和展開的。說明宏調用是在匯編時展開的,而子程序是在程序執(zhí)行時由CALL指令調用的,換言之,在匯編后生成的obj文件中,子程序的定義依然存在,而宏定義卻不復存在。cs:0BFI5noucs:0008B409VT1OUah,0?cs:0000CD21int214 .為了程序的美觀,在輸出菜單時,采取多次輸出的辦法,另外在每次10號調用輸入后都輸出一個回車換行符,這樣可以使程序盡量美觀。3.1.5實驗記

18、錄(包括實驗條件、輸入/輸出、錯誤和修改等信息的記錄)1、實驗環(huán)境條件:P31GHz,256M內存;WINDOWS2000命令行窗口;EDIT.EXE2.0;MASM.EXE6.0;LINK.EXE5.2;TD.EXE5.0。2、一開始10號功能調用后面忘了加上回車換行,導致輸入的總是會被不斷覆蓋,也就不能正12匯編語言程序設計實驗報告常顯示,在后面加上MOVDL,0AHMOVAH,2INT21HMOVDL,0DHMOVAH,2INT21H就能夠正常顯示了3、當每輸入下一個學生時要在BUF段中+14,一開始想當然直接讓SI+,然后14*SI+BX+10尋址,在TD中觀察發(fā)現(xiàn)輸入的成績每次都只有一個,后來仔細檢查代碼,發(fā)現(xiàn)問題。后來想用一個寄存器從0加到4時發(fā)現(xiàn)寄存器不夠了(Oo。)于是就定義了一個字節(jié)的N,讓N從1加到4,先PUSHAX,N*14->AX,再(AX)->SI,POPAX就能實現(xiàn)該功能4、尋址方式也出了一點小問題,不過很快就解決了,這里就不一一列出了。最后運行的結果如下(由于算法:輸入3個字符的ascll碼減去30再乘相應的位數(shù),輸入成績都要輸3位)在TD數(shù)據(jù)段中觀察實驗結果與輸入的姓名成績、計算的平均成績相符合再輸入2實現(xiàn)計算平均成績的功能,并回到主程序顯示MENU菜單提示下一步操作Uq口口也thechoicer*iiwutnan

溫馨提示

  • 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

提交評論