華科匯編語言程序設(shè)計(jì)實(shí)驗(yàn)2_第1頁
華科匯編語言程序設(shè)計(jì)實(shí)驗(yàn)2_第2頁
華科匯編語言程序設(shè)計(jì)實(shí)驗(yàn)2_第3頁
華科匯編語言程序設(shè)計(jì)實(shí)驗(yàn)2_第4頁
華科匯編語言程序設(shè)計(jì)實(shí)驗(yàn)2_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

PAGE107課程實(shí)驗(yàn)報(bào)告課程名稱:匯編語言程序設(shè)計(jì)實(shí)驗(yàn)實(shí)驗(yàn)名稱:實(shí)驗(yàn)二程序執(zhí)行時(shí)間與代碼長度優(yōu)化實(shí)驗(yàn)時(shí)間:2017-3-29,14:30-17:30實(shí)驗(yàn)地點(diǎn):南一樓804室78號實(shí)驗(yàn)臺指導(dǎo)教師:班鵬新專業(yè)班級:計(jì)算機(jī)科學(xué)與技術(shù)201503班學(xué)號:U201514558姓名:劉偉光同組學(xué)生:無報(bào)告日期:2017年3月29日原創(chuàng)性聲明

本人鄭重聲明:本報(bào)告的內(nèi)容由本人獨(dú)立完成,有關(guān)觀點(diǎn)、方法、數(shù)據(jù)和文獻(xiàn)等的引用已經(jīng)在文中指出。除文中已經(jīng)注明引用的內(nèi)容外,本報(bào)告不包含任何其他個(gè)人或集體已經(jīng)公開發(fā)表的作品或成果,不存在剽竊、抄襲行為。特此聲明!學(xué)生簽名:日期:2017.3.29成績評定實(shí)驗(yàn)完成質(zhì)量得分(70分)(實(shí)驗(yàn)步驟清晰詳細(xì)深入,實(shí)驗(yàn)記錄真實(shí)完整等)報(bào)告撰寫質(zhì)量得分(30分)(報(bào)告規(guī)范、完整、通順、詳實(shí)等)總成績(100分)指導(dǎo)教師簽字:

日期:匯編語言程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告PAGE9目錄1 實(shí)驗(yàn)?zāi)康呐c要求 12 實(shí)驗(yàn)內(nèi)容 13 實(shí)驗(yàn)過程 13.1 任務(wù)1 13.1.1 設(shè)計(jì)思想及存儲單元分配 13.1.2流程圖 23.13源程序 23.1.2 實(shí)驗(yàn)步驟 23.1.3 實(shí)驗(yàn)記錄與分析 23.2 任務(wù)2 33.2.1 設(shè)計(jì)思想及存儲單元分配 33.2.2 源程序 33.2.3 實(shí)驗(yàn)步驟 33.2.4 實(shí)驗(yàn)記錄與分析 43.3 任務(wù)3 43.3.1 設(shè)計(jì)思想及存儲單元分配 43.3.2 源程序 43.3.3 實(shí)驗(yàn)步驟 53.3.4 實(shí)驗(yàn)記錄與分析 54 總結(jié)與體會 9

實(shí)驗(yàn)?zāi)康呐c要求熟悉匯編語言指令的特點(diǎn),掌握代碼優(yōu)化的基本方法;理解高級語言程序與匯編語言程序之間的對應(yīng)關(guān)系。實(shí)驗(yàn)內(nèi)容任務(wù)1.觀察多重循環(huán)對CPU計(jì)算能力消耗的影響若有m個(gè)用戶在同一臺電腦上排隊(duì)使用實(shí)驗(yàn)一任務(wù)四的程序,想要查詢成績列表中最后一個(gè)學(xué)生“wangwu”的平均成績,那就相當(dāng)于將實(shí)驗(yàn)一任務(wù)四的程序執(zhí)行了m次。為了觀察從第一個(gè)用戶開始進(jìn)入查詢至第m個(gè)用戶查到結(jié)果之間到底延遲了多少時(shí)間,我們讓實(shí)驗(yàn)一任務(wù)四的功能二和功能三的代碼重復(fù)執(zhí)行m次,通過計(jì)算這m次循環(huán)執(zhí)行前和執(zhí)行后的時(shí)間差,來感受其影響。由于功能一和功能四需要輸入、輸出,速度本來就較慢,所以,沒有納入到這m次循環(huán)體內(nèi)(但可以保留不變)。請按照上述設(shè)想修改實(shí)驗(yàn)一任務(wù)四的程序,并將m值盡量取大(建議m>=1000,具體數(shù)值依據(jù)實(shí)驗(yàn)效果來改變,逐步增加到比較明顯的程度,比如秒級延遲),以得到較明顯的效果。任務(wù)2.對任務(wù)1中的匯編源程序進(jìn)行優(yōu)化優(yōu)化工作包括代碼長度的優(yōu)化和執(zhí)行效率的優(yōu)化,本次優(yōu)化的重點(diǎn)是執(zhí)行效率的優(yōu)化。請通過優(yōu)化m次循環(huán)體內(nèi)的程序,使程序的執(zhí)行時(shí)間盡可能減少10%以上。減少的越多,評價(jià)越高!任務(wù)3.觀察用C語言實(shí)現(xiàn)的實(shí)驗(yàn)一任務(wù)四中功能一的程序與匯編語言實(shí)現(xiàn)的程序的差異用匯編語言和C語言分別實(shí)現(xiàn)實(shí)驗(yàn)一任務(wù)四中功能一的功能(對匯編語言而言,就是把實(shí)驗(yàn)一中相關(guān)程序摘取出來成為獨(dú)立的程序),對比兩種語言實(shí)現(xiàn)的程序的代碼情況,觀察和總結(jié)C語言編寫程序和自己的匯編語言程序的對應(yīng)關(guān)系及差異,總結(jié)其中可以簡化的地方。實(shí)驗(yàn)過程任務(wù)1設(shè)計(jì)思想及存儲單元分配第二次的實(shí)驗(yàn)是在第一次實(shí)驗(yàn)的基礎(chǔ)上進(jìn)行的,設(shè)計(jì)思想大致與第一次的實(shí)驗(yàn)的任務(wù)四相同,更改的方面有在任務(wù)四的功能二和功能三中添加了長達(dá)100000次的循環(huán),新增的j作為計(jì)數(shù)器,其類型為DD雙字類型。,同時(shí)也減少了部分的寄存器以加快程序的運(yùn)行時(shí)間。3.1.2流程圖 流程圖如圖3.1.1所示。3.1.1任務(wù)一的程序流程圖3.13源程序┇JDD0┇cmpj,wordptr1000000jneaxb┇實(shí)驗(yàn)步驟準(zhǔn)備上機(jī)環(huán)境,編輯、匯編、連接文件4。按F9來執(zhí)行程序文件。進(jìn)行功能一的測試,窗口提示輸入要查找的學(xué)生的姓名,在窗口中輸入姓名。成功后,再直接敲入回車,測試功能。查看查詢最后一位學(xué)生所需要的查詢時(shí)間差,決定選取1000000級時(shí)會影響到秒級。實(shí)驗(yàn)記錄與分析1.實(shí)驗(yàn)環(huán)境條件:P31GHz,256M內(nèi)存;WINDOWSXP下DOSBox0.72;EDIT.EXE2.0;MASM.EXE6.0;LINK.EXE5.2;TD.EXE5.0。2.程序中按下回車重新提示輸入姓名,如圖3.1.1所示:圖3.1.1循環(huán)1000000的時(shí)間差 3.改變程序的循環(huán)次數(shù),查看時(shí)間差,如圖3.1.2所示:圖3.1.2循環(huán)600000的時(shí)間差任務(wù)2設(shè)計(jì)思想及存儲單元分配在第一次的基礎(chǔ)上修改一些寄存器以加快程序的運(yùn)行速度。源程序┇movax,0movdx,0movbp,offsetBUFaddbp,bxaddbp,10addal,byteptrds:[bp]addal,almovdl,ds:[bp+1]addax,dxmovdl,ds:[bp+2]sardl,1addax,dx┇實(shí)驗(yàn)步驟1.準(zhǔn)備上機(jī)環(huán)境,編輯、匯編、連接文件4。2.按F9來執(zhí)行程序文件。3.進(jìn)行功能一的測試,窗口提示輸入要查找的學(xué)生的姓名,在窗口中輸入姓名。成功后,再直接敲入回車,測試功能。4.通過改變求取平均數(shù)的功能中,將代碼中的乘以二變從用IDIV改為用sal,將求兩倍的運(yùn)算改成用加法重復(fù)加兩遍。5.刪去不必要的重復(fù)語句,將第一次的多余的重復(fù)清零語句都清零。6.對比修改前和修改之后的時(shí)間差,計(jì)算改進(jìn)的百分比。實(shí)驗(yàn)記錄與分析實(shí)驗(yàn)環(huán)境條件:P31GHz,256M內(nèi)存;WINDOWSXP下DOSBox0.72;EDIT.EXE2.0;MASM.EXE6.0;LINK.EXE5.2;TD.EXE5.0。修改代碼之前的時(shí)間差如圖3.2.1所示:圖3.2.1修改代碼之前的時(shí)間差3.修改代碼之前的時(shí)間差如圖3.2.2所示:圖3.2.2執(zhí)行到int21H之前的內(nèi)容經(jīng)過多次的運(yùn)行比較之后,平均的時(shí)間差是455ms,平均提高的百分比為18.4%。任務(wù)3設(shè)計(jì)思想及存儲單元分配在c語言中使用聲明一個(gè)char[]10的數(shù)組,msg為字符串?dāng)?shù)組,其中為顯示的提示的打印的字符串信息。源程序(1)c語言代碼#include<stdio.h>#include<string.h>voidf1(char*S,char*MSG);intmain(){chars[10],*msg;msg="Inputthename:";f1(s,msg);return0;}voidf1(char*S,char*MSG){printf("%s",MSG);gets(S);if(strlen(S)==0)f1(S,MSG);elseif(strlen(S)==1&&(*S=='q'||*S=='Q'))return;elsereturn;}實(shí)驗(yàn)步驟準(zhǔn)備上機(jī)環(huán)境,編輯。2.使用Turboc2.0程序敲出與匯編第一次實(shí)驗(yàn)任務(wù)四功能一相同的c語言程序,使用Turboc生成相對應(yīng)的exe文件,將生成的exe文件移至反匯編的程序文件夾中,進(jìn)行反匯編。3.使用TD.EXE觀察程序的反匯編代碼,觀察其長度與匯編語言的差別,仔細(xì)對比兩者語句的區(qū)別。4.實(shí)驗(yàn)記錄與分析實(shí)驗(yàn)環(huán)境條件:P31GHz,256M內(nèi)存;WINDOWSXP下DOSBox0.72;EDIT.EXE2.0;MASM.EXE6.0;LINK.EXE5.2;TD.EXE5.0。Turboc中的c語言代碼:圖3.3.1Turboc中的c語言代碼C語言生成的exe文件的大小和匯編語句生成的exe文件長度的區(qū)別:圖3.3.2匯編語言生成的exe文件大小圖3.3.3C語言生成的exe文件大小由計(jì)算可知C語言生成的可執(zhí)行文件的大小是匯編文件的大小的12.5倍,C語言的形成的可執(zhí)行文件的大小還是很大的。在TD中使用匯編的程序的反匯編最后退出語句的位置如圖3.3.3,其在代碼段位置為004F圖3.3.3TD匯編的反匯編語句中最后一句位置圖3.3.4TDC語言的反匯編語句中最后一句位置分析:匯編語句中,反匯編的代碼的長度為79行,C語言的反匯編后代碼長度為6039行,C語言的反匯編的代碼長度遠(yuǎn)大于匯編語言的代碼長度,由此可分析出匯編代碼的性能遠(yuǎn)遠(yuǎn)好于c語言生成的觀察C語言的反匯編代碼(1)C語言中的調(diào)用scanf函數(shù),當(dāng)call01FA時(shí),系統(tǒng)會提醒輸入,如圖3.3.5圖3.3.5gets函數(shù)的入口 分析:C語言在調(diào)用自己庫中的函數(shù)時(shí),使用的是調(diào)用一個(gè)函數(shù),通過調(diào)用函數(shù)來執(zhí)行對應(yīng)的功能。(2)gets函數(shù)經(jīng)過第二次call后經(jīng)過F7單步執(zhí)行進(jìn)入函數(shù)如圖3.3.6圖3.3.5gets函數(shù)的嵌套入口分析:在調(diào)用gets函數(shù)時(shí)不僅僅是簡單的一次調(diào)用,我用F7依次進(jìn)去時(shí)發(fā)現(xiàn)在函數(shù)調(diào)用中還嵌套了很多個(gè)函數(shù)調(diào)用,大概是3,4次調(diào)用才到真正的 執(zhí)行輸入代碼(2)gets函數(shù)內(nèi)部經(jīng)過測試真正執(zhí)行輸入的代碼如圖3.3.6圖3.3.6執(zhí)行輸入的反匯編語句 分析:真正進(jìn)入輸入界面的調(diào)用輸入方式并不像我們在匯編中使用的直接簡單的使用系統(tǒng)的10號功能,而是很復(fù)雜地執(zhí)行了4個(gè)給寄存器賦值的指令,經(jīng)過猜想應(yīng)該是我們沒有學(xué)過的其他系統(tǒng)功能調(diào)用。在給寄存器賦值時(shí),反匯編語言分別依次將bp中的4,8,6的值賦給bx,cx,dx寄存器,由此可知c語言還是放了較多東西在堆棧段。(3)代碼中調(diào)用C中自己設(shè)置的功能函數(shù)的代碼如圖3.3.7圖3.3.7調(diào)用f1的反匯編語句分析:代碼在進(jìn)入自己寫的函數(shù)時(shí),不會使用jmp,而是使用call調(diào)用,使用call調(diào)用結(jié)束程序后還會繼續(xù)回源程序進(jìn)行下一步的執(zhí)行。(4)在對c語言的程序進(jìn)行反匯編的時(shí)候,發(fā)現(xiàn)C對各種寄存器都進(jìn)行了使用,有時(shí)還使用進(jìn)棧出棧,在對寄存器的使用中,尤其喜歡用16位的寄存器,如圖3.3.8圖3.3.8C語言反匯編使用的寄存器 分析:寄存器使用的范圍面還是比較廣的,尤其是對16位寄存器,還經(jīng)常喜歡使用堆棧??偨Y(jié)與體會第二次的實(shí)驗(yàn)總的來說比第一次的實(shí)驗(yàn)簡單,但是從第二次的實(shí)驗(yàn)中,我也發(fā)現(xiàn)了不少的東西。首先任務(wù)一就讓我們意識到了當(dāng)循環(huán)次數(shù)增加的時(shí)候,程序運(yùn)行的速度的確會變慢許多,我從千級一直試到了千萬級,從一開始幾乎顯示不出什么數(shù)據(jù)到最后時(shí)間間隔達(dá)到十幾秒,我親身體會到了計(jì)算機(jī)在數(shù)量龐大的時(shí)候也是吃不消的,當(dāng)數(shù)據(jù)規(guī)模成幾何類型上漲時(shí),對代碼的優(yōu)化對于我們來說就是很重要的了。任務(wù)二對我來說這次很有意思,這是一場跟自己智力的較量,在前一次的實(shí)驗(yàn)中,我就盡量的想使代碼的運(yùn)行速度變得更快,這次的實(shí)驗(yàn)是在大量的重復(fù)循環(huán)下,讓我們通過精簡語句,改變計(jì)算的方法來使運(yùn)行的速度加快,令人興奮的是,由于數(shù)據(jù)規(guī)模的不斷擴(kuò)大,代碼之間的優(yōu)秀和不優(yōu)秀分明的也就越加的明顯。我絞盡腦汁的將功能二功能三循環(huán)中的多余的語句刪去,因?yàn)樵诘谝淮螌?shí)驗(yàn)中為了確保代碼的正常運(yùn)行寫了很多多余的代碼,這次在任務(wù)二中,我就用方法將不必要的語句盡量刪去。還有改變的是對搜索方式的改變

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論