[詳細(xì)講解]匯編語(yǔ)言 完全數(shù) 課程設(shè)計(jì)報(bào)告書

上傳人:r****d 文檔編號(hào):135305309 上傳時(shí)間:2022-08-15 格式:DOC 頁(yè)數(shù):12 大小:78KB
收藏 版權(quán)申訴 舉報(bào) 下載
[詳細(xì)講解]匯編語(yǔ)言 完全數(shù) 課程設(shè)計(jì)報(bào)告書_第1頁(yè)
第1頁(yè) / 共12頁(yè)
[詳細(xì)講解]匯編語(yǔ)言 完全數(shù) 課程設(shè)計(jì)報(bào)告書_第2頁(yè)
第2頁(yè) / 共12頁(yè)
[詳細(xì)講解]匯編語(yǔ)言 完全數(shù) 課程設(shè)計(jì)報(bào)告書_第3頁(yè)
第3頁(yè) / 共12頁(yè)

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《[詳細(xì)講解]匯編語(yǔ)言 完全數(shù) 課程設(shè)計(jì)報(bào)告書》由會(huì)員分享,可在線閱讀,更多相關(guān)《[詳細(xì)講解]匯編語(yǔ)言 完全數(shù) 課程設(shè)計(jì)報(bào)告書(12頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、 課程設(shè)計(jì)任務(wù)書 學(xué)生姓名 王 麗 專業(yè)班級(jí) 軟件0302班 指導(dǎo)老師 陳天祥 工作單位 武漢理工大學(xué) 題 目:打印完全數(shù) 一個(gè)數(shù),若約數(shù)(不含它本身)的和恰好等于它本身就稱為完全數(shù) 初始條件: 理論:學(xué)完匯編課程,掌握匯編語(yǔ)言的使用。 實(shí)踐:計(jì)算機(jī)實(shí)驗(yàn)室提供計(jì)算機(jī)及軟件環(huán)境。如果自己有計(jì)算機(jī)可以在其上進(jìn)行設(shè)計(jì)。 要求完成的主要任務(wù): 1. 本次課程設(shè)計(jì)著重于理論設(shè)計(jì),同時(shí)培養(yǎng)動(dòng)手能力。要求運(yùn)用自己所學(xué)知識(shí)進(jìn)行設(shè)計(jì)實(shí)現(xiàn),體現(xiàn)自己的知識(shí)掌握水

2、平。所作設(shè)計(jì)需進(jìn)行論證,一方面是從理論上進(jìn)行推理驗(yàn)證,另一方面是實(shí)驗(yàn)論證。 2. 閱讀有關(guān)的參考資料,熟悉開發(fā)工具,運(yùn)用軟件工程設(shè)計(jì)方法,進(jìn)行系統(tǒng)總體分析與設(shè)計(jì), 規(guī)劃出系統(tǒng)的總體機(jī)構(gòu),每個(gè)功能的分布情況,以形成系統(tǒng)的框架設(shè)計(jì)。 3. 程序用匯編語(yǔ)言開發(fā)完成, 嚴(yán)禁抄襲(發(fā)現(xiàn)后抄襲者和被抄襲者一律不及格)。 4.完成整個(gè)程序的設(shè)計(jì)及調(diào)試、測(cè)試工作后,應(yīng)提供相應(yīng)的課程設(shè)計(jì)報(bào)告書及程序總體分析與算法設(shè)計(jì)和源程序代碼等。 5.課程設(shè)計(jì)報(bào)告書內(nèi)容:(1) 設(shè)計(jì)題目 (2) 設(shè)計(jì)要求 (3) 設(shè)計(jì)思路及程序清單 (5) 運(yùn)行結(jié)果 (6) 心得體會(huì) 6.要求按格式規(guī)范撰寫課程設(shè)計(jì)報(bào)告文檔, 文檔

3、中包括系統(tǒng)結(jié)構(gòu)圖,代碼設(shè)計(jì)說明以及各功能模塊程序的設(shè)計(jì)說明和各功能選項(xiàng)的使用要求及條件,各輸入輸出數(shù)據(jù)的約束條件及代碼的使用等。 7.課程設(shè)計(jì)報(bào)告格式應(yīng)盡可能規(guī)范,易讀易懂,說明問題;學(xué)生自己排版、打印全部課程設(shè)計(jì)報(bào)告書內(nèi)容;學(xué)生要按指定時(shí)間上交課程設(shè)計(jì)報(bào)告書。 時(shí)間安排: 1、12月26日至12月27日 接受課程設(shè)計(jì), 閱讀有關(guān)的參考資料,熟悉開發(fā)工具,運(yùn)用軟件工程設(shè)計(jì)方法,對(duì)設(shè)計(jì)題目進(jìn)行總體分析與算法設(shè)計(jì)。. 2、12月28日至12月29日 編寫程序, 到實(shí)驗(yàn)室進(jìn)行程序調(diào)試。 3、12月30日至12月31日 繼續(xù)到實(shí)驗(yàn)室進(jìn)行程序調(diào)試、完善。撰寫課程設(shè)計(jì)報(bào)告書,到實(shí)驗(yàn)室進(jìn)行編

4、緝排版, 交課程設(shè)計(jì)報(bào)告書。 指導(dǎo)教師簽名: 年 月 日 系主任(或責(zé)任教師)簽名: 年 月 日 1. 設(shè)計(jì)題目 打印完全數(shù) 2. 設(shè)計(jì)要求 用匯編程序MASM,編寫一個(gè)程序,打印10000以內(nèi)的完全數(shù)。若一個(gè)數(shù)的約數(shù)(不含它本身)的和恰好等于它本身,則該數(shù)是完全數(shù)。用循環(huán)除法(除數(shù)從2到被檢測(cè)數(shù))循環(huán)判斷2――10000的數(shù)是否是完全數(shù)。 根據(jù)題目,運(yùn)用所學(xué)的匯編知識(shí)和程序設(shè)計(jì)知識(shí),完善設(shè)計(jì)思路,盡量使程序完整,具有模塊化,易懂;熟悉匯編程序環(huán)境,掌握匯編命令和匯編語(yǔ)言,增強(qiáng)動(dòng)

5、手能力;增強(qiáng)獨(dú)立解決問題的能力。 3. 設(shè)計(jì)思路 3.1原始條件及參數(shù): 被除數(shù)以雙字為單位,高16位保存在DX中,低16位保存在AX中,初始值為2; 檢測(cè)范圍用n 來限定 除數(shù)以字位單位,用count表示,保存在BX中,初始值為2 約數(shù)和保存在CX中,初始值為1 3.2算法設(shè)計(jì)及流程圖: 3.2.1 主程序算法及流程圖: 初始條件:設(shè)i為被除數(shù),j為除數(shù),t為余數(shù),c為約數(shù)和 Int i=2 ; //被除數(shù)從2開始 循環(huán)體:While (i<=10000) //求10000以內(nèi)的完全數(shù) { int j=

6、2 , c=1; //除數(shù)從2開始,約數(shù)和初始為1 While ( j<=i ) //除數(shù)小于被除數(shù) { t = i mod j ; //求模 If ( t==0) { c=j+c;} //如果能夠整除,保存約數(shù)和 j++ ;} //除數(shù)自增 if (c==i) print i ; //打印完數(shù) i++ ; }

7、 //被除數(shù)自增 退出:Exit 開始 2—>n 1—>cx , 2—>count n—>ax , 0—>dx ax/bx—>dx, bx==ax Print i cx=ax dx=0 cx+bx—>cx , Inc count N N N 結(jié)束 Inc n n ==10000 3.2.2 print子程序算法及流程圖 初始條件:被除數(shù)保存在AX中,將除數(shù)設(shè)置為10 將BX,CX壓入堆棧,保護(hù)現(xiàn)場(chǎng) 循 環(huán) 體:被除數(shù)除以10, 將余數(shù)壓入堆棧,堆棧中數(shù)目加1 繼續(xù)除以10

8、,直到被除數(shù)不可以再除 彈出堆棧中的內(nèi)容 退 出:Exit 初始值:n—>ax 將bx,cx壓入堆棧,保存數(shù)據(jù) 0ah—>cx,0—>dx 0—>dx div cx 將dx 壓入堆棧 bx +1—>bx cmp ax,0 ax==0 dx以ASCII碼形式輸出 結(jié)束 N Y 4. 程序清單 data segment n dw 10000 ;求10000以內(nèi)的完數(shù) count dw ? ;作為除數(shù) data ends code segme

9、nt assume cs:code,ds:data start: mov ax,data mov ds,ax mov n,2 ;從2開始判斷是否視完數(shù) l1: mov count,2 ;cx保留約數(shù)和,初始值為1 mov cx,1 ;bx作為除數(shù),從2開始 l2: mov ax,n push ax ;保存現(xiàn)場(chǎng),保留a

10、x的值 mov dx,0 ;被除數(shù)的高16位置0 div bx cmp dx,0 jnz l3 ;dx保存余數(shù),若余數(shù)不為0,則轉(zhuǎn)向l3,繼續(xù)除下一個(gè)除數(shù) add cx,bx ;若余數(shù)為0,則把除數(shù)相加 l3: inc count ;除數(shù)加1 pop ax ;a

11、x出棧 cmp ax,count jnz l2 ;比較被除數(shù)和除數(shù),若相等,則轉(zhuǎn)向l2, cmp n,cx jnz l4 ;比較約數(shù)和與被除數(shù)是否相等,若相等,轉(zhuǎn)向l4,測(cè)試下一個(gè)數(shù) mov dx,0 mov ax,n call print ;調(diào)用子程序,打印完數(shù),每顯示一個(gè)完數(shù),緊跟一個(gè)空格 mo

12、v dl,' ' mov ah,02h int 21h l4: inc n ;測(cè)試2――10000的完數(shù) cmp n,10000 jnz l1 mov ah,4ch int 21h print proc ;打印子程序 push cx ;保護(hù)現(xiàn)場(chǎng) push bx mov cx,0ah ;cx作除數(shù),

13、以10為基數(shù) mov bx,0 ;bx作計(jì)數(shù)器,計(jì)算壓入堆棧的完數(shù)個(gè)數(shù) print_l1: mov dx,0 div cx push dx ;將余數(shù)壓入堆棧保留 inc bx ;壓入數(shù)目增加1 cmp ax,0 jnz print_l1 ;反復(fù)調(diào)用print_11,直到被除數(shù)不能

14、再除 print_l2: pop dx ;循環(huán)彈出余數(shù) add dl,30h ;余數(shù)以ASCII碼的表示 mov ah,02h int 21h ;輸出調(diào)用 dec bx ;堆棧中數(shù)的個(gè)數(shù)減1 jnz print_l2 ;彈出堆棧中所有的數(shù) pop bx

15、 ;還原現(xiàn)場(chǎng) pop cx ret print endp ;子程序結(jié)束 code ends end start ;程序結(jié)束 5. 運(yùn)行結(jié)果 該程序是:查找10000以內(nèi)的完全數(shù),文件名為wanshu.asm,執(zhí)行結(jié)果如下: 6. 心得體會(huì) 在程序設(shè)計(jì)的過程中,我體會(huì)到了一些程序設(shè)計(jì)的基本方法和設(shè)計(jì)技巧,這些有助于拓寬我的解題思路,一定程度上幫助我解決設(shè)計(jì)上存在的問題。 在此過程中,除數(shù),

16、被除數(shù),約數(shù)和的初始值的定義至關(guān)重要。由于本程序要反復(fù)除以除數(shù),并把余數(shù)與0比較,把約數(shù)進(jìn)行相加,因此應(yīng)該盡量控制程序作除法運(yùn)算的次數(shù),達(dá)到最快的運(yùn)行速度。在此程序中,我把除數(shù)的初始值設(shè)置為2,約數(shù)和的初始值設(shè)置為1,避免了被除數(shù)屢次除以1以及約數(shù)屢次從1開始相加。每測(cè)試一個(gè)數(shù)字,除數(shù)都從2開始,循環(huán)除,直至達(dá)到被除數(shù)本身(根據(jù)題目要求,除數(shù)達(dá)到”被除數(shù)/2”即可滿足循環(huán)條件)。這影響了程序的運(yùn)行速度,是這個(gè)程序的一個(gè)缺陷。 編寫程序要注意格式的規(guī)范性。在此過程中,我的程序出現(xiàn)了前后不對(duì)應(yīng)的情況,系統(tǒng)提示程序沒有結(jié)束,經(jīng)過檢查才發(fā)現(xiàn),最后缺少一個(gè)結(jié)束語(yǔ)句。匯編的每一段都應(yīng)該有開始和結(jié)束的

17、標(biāo)志;同時(shí),使用匯編的語(yǔ)句時(shí)要注意簡(jiǎn)潔和清晰,當(dāng)一種操作可以用不同的語(yǔ)句表示時(shí)(如loop 相當(dāng)于dec 和jnz兩個(gè)語(yǔ)句的組合),要比較不同代碼的優(yōu)缺點(diǎn),被選擇使用的語(yǔ)句應(yīng)該能表現(xiàn)程序的結(jié)構(gòu)性。 由于要求打印10000以內(nèi)的完數(shù),理論上除數(shù)至少應(yīng)該到達(dá)5000,用8位二進(jìn)制表示此數(shù)是遠(yuǎn)遠(yuǎn)不夠的。但如果除數(shù)用16位表示,被除數(shù)將占用32位。受到機(jī)器及運(yùn)行環(huán)境的限制,無(wú)法使用386以上機(jī)型中的EBX,EAX,ECX,EDX等寄存器,因此,我采用DX,AX分別保存被除數(shù)的高16位和低16位,對(duì)于除法運(yùn)算的結(jié)果,使用系統(tǒng)默認(rèn)處理。商保存在AX中,余數(shù)保存在DX中;同時(shí),利用累加器CX的特殊功能

18、,用其保存約數(shù)和,以方便計(jì)算。 在編寫程序的過程中,我明顯的感覺到寄存器不夠用。因此,我利用堆棧保護(hù)現(xiàn)場(chǎng),保存相關(guān)的數(shù)據(jù)。雖然入棧,出棧的操作頻繁,可能會(huì)一定程度上延緩了程序的執(zhí)行速度,但它解決了寄存器數(shù)量上的限制。另外,由于除法計(jì)算的余數(shù)和商分別保存到DX和AX中,而AX在后續(xù)的程序中要使用到,因此要著重注意對(duì)AX的數(shù)據(jù)保存。 AX既要用來存放被除數(shù),也需要存放除法所得的商,因此,我設(shè)置了變量n,通過”mov ax, n ” 語(yǔ)句可以把待檢測(cè)的數(shù)在需要時(shí)臨時(shí)送入AX,沖掉AX內(nèi)原來的值。另外,我還設(shè)置了變量count,用寄存器BX保存除數(shù),利用count的自增來實(shí)現(xiàn)除數(shù)的改變,

19、通過 ” mov bx, count “語(yǔ)句把除數(shù)送入BX。變量與堆棧聯(lián)合使用,可以方便的改變和保存所需要的數(shù)據(jù),使程序簡(jiǎn)單易懂。 在程序編譯的過程中,遇到了一些令我措手不及的錯(cuò)誤.由于初次遇到此類問題,我花費(fèi)了大量的時(shí)間閱讀代碼,瀏覽程序,并查找課本和資料,找出指令的差別尤其是中斷指令部分的差別. 6.2.1 結(jié)束命令錯(cuò)誤 最初的編譯,遇到該問題,仔細(xì)檢查源代碼,才發(fā)現(xiàn)l4段的退出部分出現(xiàn)問題.我將顯示命令 ” mov ah, 09h int 21h ” 誤當(dāng)作結(jié)束命令.改為 ” mov ah, 4ch int 21h “ 后,順利結(jié)束了該程序,也

20、解決了運(yùn)行時(shí)出現(xiàn)的該問題。 6.2.2 除數(shù)溢出錯(cuò)誤 除數(shù)溢出問題是本次課程設(shè)計(jì)中我遇到的最困難的問題. 開始時(shí)我把除數(shù)定義在2——“被除數(shù)/2” 方案一:“被除數(shù)/2”用右移一位AX實(shí)現(xiàn) 當(dāng)AX中為1時(shí),右移一位則AX為0,除數(shù)為0 , 出現(xiàn)邏輯錯(cuò)誤;當(dāng)AX為奇數(shù)時(shí),右移一位則結(jié)果不精確,運(yùn)行結(jié)果同樣出現(xiàn)錯(cuò)誤. 方案二:“被除數(shù)/2”用除2的除法實(shí)現(xiàn) 由于程序由兩層循環(huán)嵌套組成,又調(diào)用了一個(gè)輸出完全數(shù)的子程序,寄存器在各段中使用頻繁,數(shù)據(jù)的保存和恢復(fù)頻繁,容易破壞程序的條理性.而增加一次除法大大增加了寄存器的負(fù)荷,因此該方案也不是一種好的方案. 于是,我把除數(shù)定義在2——

21、被除數(shù)的范圍內(nèi),解決了除數(shù)溢出的問題和寄存器的限制,但同時(shí)也給程序的計(jì)算增加了“被除數(shù)/2”的復(fù)雜度。 我設(shè)計(jì)和編寫的程序完成了題目的要求,可以查找出任意正數(shù)范圍內(nèi)的完全數(shù),但它存在兩個(gè)不足: 第一: 現(xiàn)在的程序,如果要修改完全數(shù)的查找范圍,就必須在源程序中改動(dòng),重新定義n的值.但如果在程序之初給出提示,讓用戶輸入所要查找的范圍,并把該數(shù)賦值給n,從而通過n重新定義被除數(shù)就更完善了. 第二: 考慮到寄存器數(shù)量上的限制和程序的可讀性和條理性的要求,我擴(kuò)大了除數(shù)的范圍,使除數(shù)不再溢出.但這在一定程度上延遲了程序的執(zhí)行速度.如果能找出協(xié)調(diào)這二者的方法,程序就更完善了. 在本次

22、的課程設(shè)計(jì)過程中,我最大的收獲就是學(xué)到了不少新的知識(shí),同時(shí)可以把自己學(xué)到的匯編語(yǔ)言的知識(shí)和以前學(xué)的程序設(shè)計(jì)的知識(shí)應(yīng)用到實(shí)踐中, 熟悉了開發(fā)環(huán)境 ,提高了自己的動(dòng)手能力, 并順利地完成了此次的任務(wù).課程設(shè)計(jì)讓我從中得到莫大的信心,鼓勵(lì),快樂和成就感. 編程過程中,我遇到了一些困難.這時(shí),我通過上網(wǎng)查詢和去圖書館查找資料解決問題,有效地利用網(wǎng)絡(luò)資源和學(xué)校圖書資源,同時(shí)也了解了更多的知識(shí)獲取的途徑,擴(kuò)大了自己的知識(shí)面. 遇到問題時(shí),多數(shù)情況下我是自己獨(dú)立解決的,這鍛煉我獨(dú)立思考問題和獨(dú)立解決問題的能力;如果自己通過查找資料無(wú)法解決,我就向老師和同學(xué)尋求幫助,不但學(xué)到了新的,更完善解決問題的方法,

23、還學(xué)會(huì)了與人溝通,與人交流.我認(rèn)識(shí)到有時(shí)候,其他人的一點(diǎn)提示,就會(huì)令自己茅塞頓開,得到靈感.因此,在作課程設(shè)計(jì)時(shí),不要吝惜自己的思路和想法,盡可能多的與大家的交流.許多時(shí)候,我們都能從中得到進(jìn)步,得到提示,甚至得到更好的方案. 同時(shí),我也發(fā)現(xiàn)了自己的一些問題.例如,編寫程序不夠規(guī)范,總是在出現(xiàn)問題時(shí),才意識(shí)到格式和編程習(xí)慣的重要性,然后手忙腳亂的去修改,給自己的自信和成就感帶來很大的挑戰(zhàn).另外,為了圖方便,我把在實(shí)驗(yàn)室和寢室修改過的程序直接運(yùn)行,結(jié)果卻不能導(dǎo)入MASM環(huán)境,不能出現(xiàn)編譯,連接和運(yùn)行的結(jié)果,經(jīng)過同學(xué)的提示,我才知道在進(jìn)行程序的編譯前,要將程序在EDIT下打開.由此,我意識(shí)到,許多工作都像這樣,要一步一步的來,不能耍小聰明,圖省事. 本次課程設(shè)計(jì),對(duì)我?guī)椭艽?它提高了我的理論知識(shí)和和實(shí)踐動(dòng)手能力;提高了我獨(dú)立思考問題和解決問題的能力;同時(shí),增強(qiáng)了我與人探討問題,交流思路的意識(shí);此外,它還讓我發(fā)現(xiàn)了自己在編程習(xí)慣上的許多不足,對(duì)以后的編寫程序和設(shè)計(jì)解題思路有很大的啟發(fā). 在以后的學(xué)習(xí)和實(shí)踐中,我會(huì)不斷督促自己,不斷提高,不斷進(jìn)步.

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!