匯編語(yǔ)言課程設(shè)計(jì)報(bào)告_第1頁(yè)
匯編語(yǔ)言課程設(shè)計(jì)報(bào)告_第2頁(yè)
匯編語(yǔ)言課程設(shè)計(jì)報(bào)告_第3頁(yè)
匯編語(yǔ)言課程設(shè)計(jì)報(bào)告_第4頁(yè)
匯編語(yǔ)言課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

設(shè)計(jì)題目1、輸入0~100之間的n值,計(jì)算Fibonacci數(shù),以十進(jìn)制數(shù)輸出。2、從鍵盤(pán)輸入一行字符,以‘$’結(jié)束,查找輸入的字符是否包含‘computer’字符串,如果包含,計(jì)算包含‘computer’字符串的個(gè)數(shù),并以十進(jìn)制數(shù)輸出個(gè)數(shù)。3、建立歌曲文檔,按演唱者排序,程序可接收查找的演唱者,并輸出其所有的歌曲4、建立圖書(shū)資料文檔,要求具有插入,更新,刪除,查詢(xún)等功能,使用菜單提示。

問(wèn)題分析及程序?qū)崿F(xiàn)問(wèn)題一、輸入0~100之間的n值,計(jì)算Fibonacci數(shù),以十進(jìn)制數(shù)輸出問(wèn)題分析經(jīng)過(guò)分析可知,程序可由三部分組成:在輸入部分程序接收用戶(hù)鍵入的n值,化為二進(jìn)制數(shù)后保存;在遞歸自程序部分求出n的Fibonacci數(shù)的值并存入result單元當(dāng)中;在輸出部分將result中的結(jié)果用十進(jìn)制數(shù)的形式在屏幕上顯示出來(lái)。通過(guò)以上分析,建立如下的模塊:1模塊名:main總控模塊輸入:從鍵盤(pán)獲得一個(gè)0到100間的數(shù)n,如果輸入的形式不滿足要求則提示錯(cuò)誤輸出:在終端屏幕上顯示n的Fibonacci數(shù)功能:計(jì)算一個(gè)0到100間的數(shù)n的Fibonacci數(shù),并在終端上顯示出來(lái)2模塊名:input輸入:從鍵盤(pán)獲得一個(gè)0到100間的數(shù)n輸出:將n存入bx當(dāng)中,如果輸入格式錯(cuò)誤,將輸出錯(cuò)誤提示信息,并要求重新輸入功能:從鍵盤(pán)輸入一個(gè)0到100間的數(shù)n并存入bx當(dāng)中;輸入格式錯(cuò)誤時(shí)輸出錯(cuò)誤提示信息,要求重新輸入3模塊名:output功能:在終端屏幕上以十進(jìn)制形式顯示bx的數(shù)值4模塊名:binidec輸入:從BX取得一個(gè)二進(jìn)制數(shù)輸出:在終端屏幕上顯示此數(shù)的十進(jìn)制形式功能:把BX寄存器中的二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù),并在終端屏幕上顯示出來(lái)調(diào)用子模塊dec_div用來(lái)做除法運(yùn)算并顯示字符5模塊名:dec_div輸入:從BX取得需轉(zhuǎn)換為十進(jìn)制的數(shù)輸出:在屏幕上顯示一位十進(jìn)制數(shù)功能:把BX寄存器中的二進(jìn)制數(shù)除以相應(yīng)的十的冪,并在屏幕上顯示一位商。余數(shù)保存在BX寄存器當(dāng)中6模塊名:decibin輸入:從鍵盤(pán)取得一個(gè)十進(jìn)制數(shù)輸出:把該數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)并存入BX寄存器當(dāng)中功能:把從鍵盤(pán)取得一個(gè)十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),并將結(jié)果存入BX寄存器當(dāng)中7模塊名:crlf輸出:向終端發(fā)出一次回車(chē)、換行符功能:完成一次回車(chē)、換行操作8模塊名:fib輸出:將ax的Fibonacci數(shù)存到result內(nèi)存單元功能:通過(guò)遞歸調(diào)用方式計(jì)算一個(gè)數(shù)的Fibonacci數(shù),并將結(jié)果保存到result內(nèi)存單元當(dāng)中各模塊按如下層級(jí)進(jìn)行組織:程序各模塊的層次圖在程序編寫(xiě)時(shí)要注意的問(wèn)題是一定要明確各個(gè)數(shù)據(jù)及結(jié)果在堆棧當(dāng)中的位置,因?yàn)槊看斡?jì)算都要利用上次計(jì)算的結(jié)果,如果對(duì)棧指針計(jì)算錯(cuò)誤,將直接導(dǎo)致不能讀取正確的數(shù)據(jù)進(jìn)而導(dǎo)致不能得到正確的結(jié)果。當(dāng)n=4時(shí),經(jīng)過(guò)推斷我們可以得到當(dāng)堆棧最滿時(shí)存儲(chǔ)的信息如下:16位字長(zhǎng)堆棧狀態(tài)示意圖為了節(jié)約內(nèi)存空間,我們可以直接用原來(lái)保存n的內(nèi)存單元保存最后結(jié)果。由于在遞歸調(diào)用時(shí),結(jié)果只由上一步的計(jì)算結(jié)果決定,那么在知道當(dāng)前的n之后,n的值就不再重要了,一次用他所占用的單元來(lái)保存結(jié)果是可行的。從堆棧狀態(tài)圖可以看出,在遞歸調(diào)用時(shí)要使[bp-2]和[bp-8]相加,結(jié)果保存至[bp+4]當(dāng)中即可。在編制子程序時(shí),特別是在編制嵌套或遞歸子程序時(shí),堆棧的使用是十分頻繁的。在這里順便說(shuō)明一下,在堆棧使用過(guò)程中,應(yīng)該注意有關(guān)堆棧溢出的問(wèn)題。由于堆棧區(qū)域是在堆棧定義時(shí)就確定了的,因而堆棧工作過(guò)程中有可能產(chǎn)生溢出。堆棧溢出有兩種情況可能發(fā)生:如堆棧已滿,但還想再存入信息,這種情況稱(chēng)為堆棧上溢;另一種情況是,如堆棧已空,但還想再取出信息,這種情況稱(chēng)為堆棧下溢。不論上溢或下溢,都是不允許的。因此在編制程序時(shí),如果可能發(fā)生堆棧溢出,則應(yīng)在程序中采取保護(hù)措施。這可以通過(guò)給SP規(guī)定上、下限,在進(jìn)?;虺鰲2僮髑跋茸鯯P和邊界值的比較,如溢出則作溢出處理,以避免破壞其他存儲(chǔ)區(qū)或使程序出錯(cuò)的情況發(fā)生。在分配堆棧段時(shí),要保證其足夠大,否則隨著要計(jì)算Fibonacci數(shù)的n值增大,可能超過(guò)堆棧的區(qū)域,導(dǎo)致不能得到最后結(jié)果。從本程序的實(shí)現(xiàn)方式來(lái)看,要計(jì)算n=100時(shí)的Fibonacci數(shù),就要壓棧100次,而每次壓棧要壓入3字節(jié),所以堆棧至少要有300字節(jié)的空間。為了便于擴(kuò)展,在程序編寫(xiě)時(shí)將堆棧大小設(shè)為1024字節(jié)。程序流程圖主程序的流程圖堆棧狀態(tài)跟蹤我們可以通過(guò)運(yùn)行debug程序來(lái)跟蹤堆棧的運(yùn)行狀態(tài)。具體過(guò)程如下:F:\1>debugfibonaci.exe-u1882:0000B80218MOVAX,18021882:00038ED0MOVSS,AX1882:0005BC0008MOVSP,08001882:00081EPUSHDS1882:00092BC0SUBAX,AX1882:000B50PUSHAX1882:000CB8FD17MOVAX,17FD1882:000F8ED8MOVDS,AX1882:0011E81C00CALL00301882:001453PUSHBX1882:0015E89900CALL00B11882:00188F060200POP[0002]1882:001CE80100CALL00201882:001FCBRETF-g15Pleaseinputanintegern(0<=n<=100):4AX=020DBX=0004CX=000ADX=000DSP=07FABP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=0015NVUPEIPLNZNAPONC1882:0015E89900CALL00B1-tAX=020DBX=0004CX=000ADX=000DSP=07F8BP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B1NVUPEIPLNZNAPONC1882:00B155PUSHBP-tAX=020DBX=0004CX=000ADX=000DSP=07F6BP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B2NVUPEIPLNZNAPONC1882:00B28BECMOVBP,SP-tAX=020DBX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B4NVUPEIPLNZNAPONC1882:00B48B4604MOVAX,[BP+04]SS:07FA=0004-tAX=0004BX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B7NVUPEIPLNZNAPONC1882:00B73D0200CMPAX,0002-tAX=0004BX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00BANVUPEIPLNZNAPONC1882:00BA7416JZ00D2-tAX=0004BX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00BCNVUPEIPLNZNAPONC1882:00BC3D0100CMPAX,0001-tAX=0004BX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00BFNVUPEIPLNZNAPENC1882:00BF7411JZ00D2-tAX=0004BX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C1NVUPEIPLNZNAPENC1882:00C148DECAX-tAX=0003BX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C2NVUPEIPLNZNAPENC1882:00C250PUSHAX-tAX=0003BX=0004CX=000ADX=000DSP=07F4BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C3NVUPEIPLNZNAPENC1882:00C3E8EBFFCALL00B1-tAX=0003BX=0004CX=000ADX=000DSP=07F2BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B1NVUPEIPLNZNAPENC1882:00B155PUSHBP-tAX=0003BX=0004CX=000ADX=000DSP=07F0BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B2NVUPEIPLNZNAPENC1882:00B28BECMOVBP,SP-tAX=0003BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B4NVUPEIPLNZNAPENC1882:00B48B4604MOVAX,[BP+04]SS:07F4=0003-tAX=0003BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B7NVUPEIPLNZNAPENC1882:00B73D0200CMPAX,0002-tAX=0003BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00BANVUPEIPLNZNAPONC1882:00BA7416JZ00D2-tAX=0003BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00BCNVUPEIPLNZNAPONC1882:00BC3D0100CMPAX,0001-tAX=0003BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00BFNVUPEIPLNZNAPONC1882:00BF7411JZ00D2-tAX=0003BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C1NVUPEIPLNZNAPONC1882:00C148DECAX-tAX=0002BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C2NVUPEIPLNZNAPONC1882:00C250PUSHAX-tAX=0002BX=0004CX=000ADX=000DSP=07EEBP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C3NVUPEIPLNZNAPONC1882:00C3E8EBFFCALL00B1-tAX=0002BX=0004CX=000ADX=000DSP=07ECBP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B1NVUPEIPLNZNAPONC1882:00B155PUSHBP-tAX=0002BX=0004CX=000ADX=000DSP=07EABP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B2NVUPEIPLNZNAPONC1882:00B28BECMOVBP,SP-tAX=0002BX=0004CX=000ADX=000DSP=07EABP=07EASI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B4NVUPEIPLNZNAPONC1882:00B48B4604MOVAX,[BP+04]SS:07EE=0002-tAX=0002BX=0004CX=000ADX=000DSP=07EABP=07EASI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B7NVUPEIPLNZNAPONC1882:00B73D0200CMPAX,0002-tAX=0002BX=0004CX=000ADX=000DSP=07EABP=07EASI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00BANVUPEIPLZRNAPENC1882:00BA7416JZ00D2-tAX=0002BX=0004CX=000ADX=000DSP=07EABP=07EASI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00D2NVUPEIPLZRNAPENC1882:00D2B80100MOVAX,0001-tAX=0001BX=0004CX=000ADX=000DSP=07EABP=07EASI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00D5NVUPEIPLZRNAPENC1882:00D5C746FE0100MOVWORDPTR[BP-02],0001SS:07E8=11EC-tAX=0001BX=0004CX=000ADX=000DSP=07EABP=07EASI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00DANVUPEIPLZRNAPENC1882:00DA894604MOV[BP+04],AXSS:07EE=0002-tAX=0001BX=0004CX=000ADX=000DSP=07EABP=07EASI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00DDNVUPEIPLZRNAPENC1882:00DD5DPOPBP-tAX=0001BX=0004CX=000ADX=000DSP=07ECBP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00DENVUPEIPLZRNAPENC1882:00DEC3RET-tAX=0001BX=0004CX=000ADX=000DSP=07EEBP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C6NVUPEIPLZRNAPENC1882:00C658POPAX-tAX=0001BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C7NVUPEIPLZRNAPENC1882:00C72BC0SUBAX,AX-tAX=0000BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C9NVUPEIPLZRNAPENC1882:00C90346FEADDAX,[BP-02]SS:07EE=11EC-tAX=3346BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00CCNVUPEIPLNZNAPONC1882:00CC0346F8ADDAX,[BP-08]SS:07E8=07F0-tAX=3B36BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00CFNVUPEIPLNZNAPENC1882:00CFEB09JMP00DA-tAX=3B36BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00DANVUPEIPLNZNAPENC1882:00DA894604MOV[BP+04],AXSS:07F4=0003-tAX=3B36BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00DDNVUPEIPLNZNAPENC1882:00DD5DPOPBP-tAX=3B36BX=0004CX=000ADX=000DSP=07F2BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00DENVUPEIPLNZNAPENC1882:00DEC3RET-tAX=3B36BX=0004CX=000ADX=000DSP=07F4BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C6NVUPEIPLNZNAPENC1882:00C658POPAX-tAX=3B36BX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C7NVUPEIPLNZNAPENC1882:00C72BC0SUBAX,AX-tAX=0000BX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C9NVUPEIPLZRNAPENC1882:00C90346FEADDAX,[BP-02]SS:07F4=11EC-tAX=3346BX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00CCNVUPEIPLNZNAPONC1882:00CC0346F8ADDAX,[BP-08]SS:07EE=07F6-tAX=3B3CBX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00CFNVUPEIPLNZNAPENC1882:00CFEB09JMP00DA-tAX=3B3CBX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00DANVUPEIPLNZNAPENC1882:00DA894604MOV[BP+04],AXSS:07FA=0004-tAX=3B3CBX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00DDNVUPEIPLNZNAPENC1882:00DD5DPOPBP-tAX=3B3CBX=0004CX=000ADX=000DSP=07F8BP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00DENVUPEIPLNZNAPENC1882:00DEC3RET-tAX=3B3CBX=0004CX=000ADX=000DSP=07FABP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=0018NVUPEIPLNZNAPENC1882:00188F060200POP[0002]DS:0002=0000-tAX=3B3CBX=0004CX=000ADX=000DSP=07FCBP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=001CNVUPEIPLNZNAPENC1882:001CE80100CALL0020-tAX=3B3CBX=0004CX=000ADX=000DSP=07FABP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=0020NVUPEIPLNZNAPENC1882:00208D162C00LEADX,[002C]DS:002C=6854-tAX=3B3CBX=0004CX=000ADX=002CSP=07FABP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=0024NVUPEIPLNZNAPENC1882:0024B409MOVAH,09-tAX=093CBX=0004CX=000ADX=002CSP=07FABP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=0026NVUPEIPLNZNAPENC1882:0026CD21INT21-tAX=093CBX=0004CX=000ADX=002CSP=07F4BP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=00A7IP=107CNVUPDIPLNZNAPENC00A7:107C90NOP-tAX=093CBX=0004CX=000ADX=002CSP=07F4BP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=00A7IP=107DNVUPDIPLNZNAPENC00A7:107D90NOP-tAX=093CBX=0004CX=000ADX=002CSP=07F4BP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=00A7IP=107ENVUPDIPLNZNAPENC00A7:107EE8E000CALL1161-tAX=093CBX=0004CX=000ADX=002CSP=07F2BP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=00A7IP=1161NVUPDIPLNZNAPENC00A7:11611EPUSHDS-tAX=093CBX=0004CX=000ADX=002CSP=07F0BP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=00A7IP=1162NVUPDIPLNZNAPENC00A7:116206PUSHES-tAX=093CBX=0004CX=000ADX=002CSP=07EEBP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=00A7IP=1163NVUPDIPLNZNAPENC00A7:116351PUSHCX-tAX=093CBX=0004CX=000ADX=002CSP=07ECBP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=00A7IP=1164NVUPDIPLNZNAPENC00A7:116456PUSHSI-tAX=093CBX=0004CX=000ADX=002CSP=07EABP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=00A7IP=1165NVUPDIPLNZNAPENC00A7:116557PUSHDI為了更加容易理解反匯編后各指令的含義,下面給出fib子程序的LST清單:00B1 fib proc near00B155 push bp00B28BEC mov bp,sp00B48B4604 mov ax,[bp+4]00B73D0002 cmp ax,200BA7416 je l100BC3D0001 cmp ax,100BF7411 je l1 00C148 dec ax;ax存放要計(jì)算F(n)的n值00C250 push ax00C3E800B1R call fib00C658 pop ax00C72BC0 sub ax,ax00C90346FE add ax,[bp-2];將F(n-1)和F(n-2)相加00CC0346F8 add ax,[bp-8]00CFEB0990 jmp exit00D2B80001 l1: mov ax,100D5C746FE0001 mov wordptr[bp-2],100DA exit:00DA894604 mov [bp+4],ax00DD5D pop bp ; popax00DEC3 ret00DF fib endp從跟蹤執(zhí)行的結(jié)果中我們可以很明顯地看出堆棧的變化與之前分析的是完全一致的。運(yùn)行結(jié)果演示經(jīng)過(guò)匯編、連接生成可執(zhí)行文件后,鍵入文件名fibonaci直接運(yùn)行程序。程序運(yùn)行時(shí)要求輸入0~100之間的整數(shù)。如果輸入的不是數(shù)字或者數(shù)字超出規(guī)定范圍,則程序會(huì)要求重新輸入。具體運(yùn)行結(jié)果如下:F:\1>fibonaciPleaseinputanintegern(0<=n<=100):1TheresultofF(n):1Pleaseinputanintegern(0<=n<=100):2TheresultofF(n):1Pleaseinputanintegern(0<=n<=100):3TheresultofF(n):2Pleaseinputanintegern(0<=n<=100):5TheresultofF(n):5Pleaseinputanintegern(0<=n<=100):20TheresultofF(n):6765Pleaseinputanintegern(0<=n<=100):25TheresultofF(n):75025Pleaseinputanintegern(0<=n<=100):30TheresultofF(n):832040Pleaseinputanintegern(0<=n<=100):35TheresultofF(n):9227465Pleaseinputanintegern(0<=n<=100):40TheresultofF(n):102334155Pleaseinputanintegern(0<=n<=100):44TheresultofF(n):701408733operableprogramorbatchfile.Pleaseinputanintegern(0<=n<=100):1111Pleaseinputanintegern(0<=n<=100):5555Pleaseinputanintegern(0<=n<=100):F:\1>程序的改進(jìn)程序有很多細(xì)節(jié)的地方值得注意。比如將二進(jìn)制數(shù)顯示時(shí)數(shù)字前面為零的問(wèn)題。這個(gè)問(wèn)題實(shí)際上解決起來(lái)很簡(jiǎn)單,只要判斷一下要顯示的數(shù)是幾位數(shù),然后進(jìn)行分支操作即可。一個(gè)問(wèn)題比較大的地方就是有關(guān)溢出的問(wèn)題。Fibonacci數(shù)列的增長(zhǎng)相當(dāng)快,基本上n值每增加5相應(yīng)的Fibonacci數(shù)就會(huì)增大10倍。在運(yùn)算過(guò)程中可以發(fā)現(xiàn),16位無(wú)符號(hào)數(shù)所能表示的最大的數(shù)為6553532,32位無(wú)符號(hào)數(shù)所能表示的最大的數(shù)為,64位無(wú)符號(hào)數(shù)所能表示的最大的數(shù)為,而100的Fibonacci數(shù)值為,99的Fibonacci數(shù)值為。顯然,要想真正地完成題目所要求的功能,利用64位二進(jìn)制來(lái)表示都會(huì)捉襟見(jiàn)肘。因此本程序只能相對(duì)滿足問(wèn)題的要求。對(duì)于利用16位無(wú)符號(hào)數(shù)運(yùn)算,當(dāng)算到24時(shí)就會(huì)出現(xiàn)溢出而得不到正確結(jié)果。為此,我對(duì)程序進(jìn)行了相應(yīng)的修改,利用32位無(wú)符號(hào)數(shù)運(yùn)算,這樣就能一定程度上擴(kuò)大運(yùn)算范圍。當(dāng)采用32位無(wú)符號(hào)二進(jìn)制數(shù)運(yùn)算時(shí),相應(yīng)的堆棧變化如下圖所示:32位字長(zhǎng)堆棧狀態(tài)示意圖實(shí)際上,要完成程序功能,也不一定非要利用遞歸調(diào)用,單純的運(yùn)用循環(huán)就可以解決。當(dāng)然,兩種方式各有利弊,在不同的情況下可以選用不同的方式來(lái)完成問(wèn)題功能。本程序雖然不大,但是有很多問(wèn)題值得我們?nèi)ニ伎?,存在很多方面需要我們?nèi)ジ倪M(jìn)、完善,也存在很多實(shí)現(xiàn)方式。總的來(lái)說(shuō),這個(gè)題目還是值得深入思考的。

問(wèn)題二、從鍵盤(pán)輸入一行字符,以’$’結(jié)束,查找輸入的字符串是否包含’computer’字符串,如果包含,計(jì)算字符串個(gè)數(shù),并以十進(jìn)制形式輸出問(wèn)題分析本題目實(shí)際上屬于相當(dāng)基本的字符串查找問(wèn)題。經(jīng)過(guò)分析可以確定,程序同樣主要由輸入部分、字符串搜索部分和輸出部分三部分組成。為了達(dá)到題目要求,在程序編寫(xiě)時(shí)將程序分為以下幾個(gè)模塊:1模塊名:main總控模塊輸入:從鍵盤(pán)輸入字符串,回車(chē)作為輸入結(jié)束輸出:在終端屏幕上顯示字符串當(dāng)中含子串’computer’的個(gè)數(shù)功能:從鍵盤(pán)輸入一行字符,以’$’或回車(chē)結(jié)束,查找輸入的字符串是否包含’computer’字符串,如果包含,計(jì)算字符串個(gè)數(shù),并以十進(jìn)制形式輸出2模塊名:input輸入:從鍵盤(pán)獲得一個(gè)字符串輸出:將字符串保存到內(nèi)存單元strin開(kāi)始的地址當(dāng)中功能:保存從鍵盤(pán)獲得的字符串到內(nèi)存單元3模塊名:srch輸入:將內(nèi)存單元保存的字符串的內(nèi)容依次讀出輸出:將字符串中含’computer’的個(gè)數(shù)存入count內(nèi)存單元功能:將內(nèi)存單元保存的字符串的內(nèi)容依次讀出,通過(guò)字符串比較,求出字符串中含’computer’的個(gè)數(shù),并將結(jié)果存入count內(nèi)存單元4模塊名:output功能:將內(nèi)存單元count中保存的數(shù)以十進(jìn)制方式輸出5模塊名:binidec輸入:從BX取得一個(gè)二進(jìn)制數(shù)輸出:在終端屏幕上顯示此數(shù)的十進(jìn)制形式功能:把BX寄存器中的二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù),并在終端屏幕上顯示出來(lái)調(diào)用子模塊dec_div用來(lái)做除法運(yùn)算并顯示字符6模塊名:dec_div輸入:從BX取得需轉(zhuǎn)換為十進(jìn)制的數(shù)輸出:在屏幕上顯示一位十進(jìn)制數(shù)功能:把BX寄存器中的二進(jìn)制數(shù)除以相應(yīng)的十的冪,并在屏幕上顯示一位商。余數(shù)保存在BX寄存器當(dāng)中7模塊名:crlf輸出:向終端發(fā)出一次回車(chē)、換行符功能:完成一次回車(chē)、換行操作各模塊按如下關(guān)系進(jìn)行組織:程序各模塊的層次圖主要子程序流程圖主程序的流程圖子過(guò)程srch的流程圖問(wèn)題三、建立歌曲文檔,按演唱者排序,程序可接收查找的演唱者,并輸出所有的歌曲問(wèn)題分析按照題目要求,可以實(shí)現(xiàn)建立好一個(gè)歌曲數(shù)據(jù)文件,文件中以一個(gè)歌手的名字及其所有歌曲組成的信息塊作為一個(gè)數(shù)據(jù)項(xiàng);在程序運(yùn)行時(shí),每次從文件當(dāng)中讀取一個(gè)數(shù)據(jù)項(xiàng)進(jìn)行相應(yīng)的操作。由此可知,本程序主要由輸入部分、文件處理部分、內(nèi)存數(shù)據(jù)處理部分、輸出部分四個(gè)部分組成。當(dāng)然,為了完成相應(yīng)的功能,這幾個(gè)部分是不能割裂開(kāi)的。比如在信息查詢(xún)時(shí),就要將文件處理和內(nèi)存數(shù)據(jù)處理有機(jī)的結(jié)合起來(lái)。為了使程序的編寫(xiě)更加清晰,在實(shí)現(xiàn)程序時(shí)建立了如下幾個(gè)模塊分別進(jìn)行編寫(xiě):1模塊名:main總控模塊輸入:從鍵盤(pán)獲得歌手名稱(chēng),如果輸入的形式不滿足要求則提示錯(cuò)誤輸出:在終端屏幕上顯示該歌手的相關(guān)的所有歌曲,若歌手不存在則顯示相應(yīng)提示功能:從鍵盤(pán)獲得歌手名稱(chēng),從建立歌曲文檔中查找該演唱者相關(guān)的所有歌曲,并從屏幕上顯示出來(lái)2模塊名:query輸入:從鍵盤(pán)獲得歌手名稱(chēng),如果輸入的形式不滿足要求則提示錯(cuò)誤輸出:在終端屏幕上顯示該歌手的相關(guān)的所有歌曲,若歌手不存在則顯示相應(yīng)提示功能:顯示歌手相應(yīng)的所有歌曲3模塊名:openf功能:打開(kāi)文件程序當(dāng)中將要涉及文件操作,兼顧信息的完整性和讀寫(xiě)效率,在讀文件和寫(xiě)文件時(shí)都將一條信息一條信息的進(jìn)行讀寫(xiě),每條信息包括歌手的名稱(chēng)及其歌曲的名稱(chēng)。每一個(gè)歌手預(yù)留5個(gè)歌曲的位置,歌手姓名和每首歌名用15個(gè)字符來(lái)表示。為此定義下面的結(jié)構(gòu)結(jié)構(gòu)定義scorestrucsdb15dup('')m1db15dup('')m2db15dup('')m3db15dup('')m4db15dup('')m5db15dup('')scoreends在查找時(shí)已歌手姓名為關(guān)鍵字,當(dāng)查找到姓名一致的歌手時(shí),將他所有的歌曲名稱(chēng)顯示出來(lái)。宏定義程序當(dāng)中有到的宏定義及相應(yīng)的功能如下:showmacroaddrs;顯示字符串leadx,addrsmovah,9int21hendmclearmacro;全屏幕清除moval,0movcl,0movch,0movdh,24movdl,79movbh,7movah,6int10hendmnewlinemacro;回車(chē)換行pushaxpushdxmovdl,0dhmovah,2int21hmovdl,0ahmovah,2int21hpopdxpopaxendm;-----------------------------------------------------------show_itemmacroaddrslocaliloop,w10,again,exitspushbxpushcxmovbx,0iloop:movdl,addrs[bx];displaychar輸出addrs開(kāi)始的15個(gè)字符movah,2int21hincbxcmpbx,15jliloopmovdl,0dhmovah,2int21hmovdl,0ahmovah,2int21hmovcx,1w10:movsi,15cmpaddrs[bx],''jeexitsmovdl,''movah,2int21hmovdl,cladddl,30hmovah,2int21hmovdl,''movah,2int21hagain:movdl,addrs[bx];輸出addrs開(kāi)始的15個(gè)字符movah,2int21hincbxdecsijnzagainnewlineinccxcmpcx,5jlew10exits:popcxpopbxendm;---------------------------------------------------------getinmacroaddrs,count2localzeroit,lp,input_end,exitm;將count2個(gè)字符輸入到addrs為首的內(nèi)存單元當(dāng)中,以回車(chē)換行作為終止,多余15個(gè)字符的忽略pushbxpushaxmovbx,0;addrs為首的15個(gè)字符置為空格zeroit:movaddrs[bx],''incbxcmpbx,15jlzeroitmovbx,0;將count2個(gè)字符輸入到addrs為首的內(nèi)存單元當(dāng)中l(wèi)p:movah,1int21hcmpal,0ah;輸入字符若為回車(chē)或換行,則輸入結(jié)束jzinput_endcmpal,0dhjzinput_endmovaddrs[bx],alincbxcmpbx,count2jllpinput_end:;多輸入的字符忽略,直到輸入為回車(chē)換行時(shí)輸入停止cmpal,0dhjzexitmcmpal,0ahjzexitmmovah,7int21h;無(wú)回顯的鍵盤(pán)輸入jmpinput_endexitm:popaxpopbxendm模塊圖及流程圖各模塊及宏按如下層級(jí)進(jìn)行組織:程序的模塊層次圖主程序的流程圖運(yùn)行結(jié)果演示程序的數(shù)據(jù)文件保存在程序同目錄下的文本文件list.txt當(dāng)中。對(duì)源程序進(jìn)行匯編連結(jié)后,直接鍵入可執(zhí)行文件的文件名book.exe即可運(yùn)行程序。程序運(yùn)行的界面和執(zhí)行結(jié)果如下:MusicListManagementSystemPleaseinputthenameofthesinger:xietingfengThefollowingsongsbelongtothesingerxietingfeng1xiexienideai2bielaiwuyang3huozhe4yuhudie5feizoubukeContinuetosearch?(y/n)yPleaseinputthenameofthesinger:liudehuaThefollowingsongsbelongtothesingerliudehua1wangqingshui2shanghaitan3benxiaohai4zhongguoren5duziqutouhuanContinuetosearch?(y/n)yPleaseinputthenameofthesinger:zhangxueyouThefollowingsongsbelongtothesingerzhangxueyou1wenbie2nihaodu3ainiduoyixieContinuetosearch?(y/n)yPleaseinputthenameofthesinger:zhangxueyouThefollowingsongsbelongtothesingerzhangxueyou1wenbie2nihaodu3ainiduoyixieContinuetosearch?(y/n)yPleaseinputthenameofthesinger:zhangThesingeryouwantdoesnotexistinthedatabase!Continuetosearch?(y/n)nF:\>數(shù)據(jù)文件的內(nèi)容程序數(shù)據(jù)文件的讀寫(xiě)是按照嚴(yán)格的方式與數(shù)據(jù)文件對(duì)應(yīng)的。如果數(shù)據(jù)文件由于某種原因遭到破壞,哪怕是有一個(gè)字符被刪除,那么程序就不能得到正確的結(jié)果。本程序所用到的數(shù)據(jù)文件的內(nèi)容如下:liudehuawangqingshuishanghaitanbenxiaohaizhongguorenduziqutouhuanrenxianqiwoshiyizhiyuxintairuanhenshoushangjuzixiangshuiduimiandenvhaixietingfengxiexienideaibielaiwuyanghuozheyuhudiefeizoubukezhangxueyouwenbienihaoduainiduoyixiezhouhuajianpengyouqinqinbaobeiwangyoucaoguzhennanmian

問(wèn)題四、建立圖書(shū)資料文檔,要求具有插入、更新、刪除、查詢(xún)等功能,使用菜單提示問(wèn)題分析按照題目所要求的功能,編寫(xiě)程序時(shí)將程序主要分為如下幾個(gè)模塊:1模塊名:main輸入:從鍵盤(pán)輸入代表相應(yīng)功能選項(xiàng)的字母代號(hào)輸出:按照選擇執(zhí)行相應(yīng)的功能,并進(jìn)行相應(yīng)的提示、輸出相應(yīng)的信息功能:使用菜單提示,按照用戶(hù)選擇的相應(yīng)的功能對(duì)存有圖書(shū)資料的文件進(jìn)行操作,實(shí)現(xiàn)圖書(shū)資料的插入、更新、刪除、查詢(xún)等功能2模塊名:list功能:按各式列出文件當(dāng)中存有的所有圖書(shū)信息3模塊名:query輸入:從鍵盤(pán)輸入想要查詢(xún)的圖書(shū)名輸出:從屏幕上顯示該圖書(shū)的相關(guān)信息,若不存在則給出相應(yīng)提示功能:實(shí)現(xiàn)圖書(shū)資料的查詢(xún)功能4模塊名:modify輸入:從鍵盤(pán)輸入想要修改資料信息的圖書(shū)名,并根據(jù)提示輸入新的圖書(shū)資料信息輸出:從屏幕上顯示該圖書(shū)的原有信息,若相關(guān)的記錄不存在則給出相應(yīng)提示功能:實(shí)現(xiàn)圖書(shū)資料的修改更新功能5模塊名:delete輸入:從鍵盤(pán)輸入想要修改資料信息的圖書(shū)名,并根據(jù)提示輸入新的圖書(shū)資料信息輸出:從屏幕上顯示該圖書(shū)的原有信息,若相關(guān)的記錄不存在則給出相應(yīng)提示,用戶(hù)確認(rèn)進(jìn)行刪除操作后若操作成功則給出相應(yīng)的提示信息功能:實(shí)現(xiàn)圖書(shū)資料的刪除功能6模塊名:insert輸入:根據(jù)提示從鍵盤(pán)輸入想要添加的圖書(shū)資料信息輸出:操作完成后給出相應(yīng)的提示信息功能:實(shí)現(xiàn)圖書(shū)資料的插入功能7模塊名:get_rec功能:提示用戶(hù)按格式輸入新的圖書(shū)信息8模塊名:openf功能:打開(kāi)程序目錄下的圖書(shū)資料文件list.txt程序當(dāng)中將要涉及文件操作,兼顧信息的完整性和讀寫(xiě)效率,在讀文件和寫(xiě)文件時(shí)都將一條信息一條信息的進(jìn)行讀寫(xiě),每條信息代表一條書(shū)目的所有信息,這樣的每條信息包括書(shū)名、作者、出版社、價(jià)格等。由此定義如下的結(jié)構(gòu):scorestrucnamesdbnnodup('')authordbanodup('')publishdbpnodup('')isbndbinodup('')pricedbprcnodup('')scoreends其中nno、ano、pno、ino、prcno是為了便于程序的擴(kuò)展而定義的常量。本程序中相關(guān)的常量定義及含義如下itemnoEQU68;讀寫(xiě)文件操作時(shí)處理的每條信息的長(zhǎng)度nnoEQU15;信息當(dāng)中書(shū)名所占的長(zhǎng)度anoEQU15;信息當(dāng)中作者所占的長(zhǎng)度pnoEQU15;信息當(dāng)中出版社所占的長(zhǎng)度inoEQU15;信息當(dāng)中ISBN所占的長(zhǎng)度prcnoEQU8;信息當(dāng)中價(jià)格所占的長(zhǎng)度宏定義值得一提的是程序中刪除功能的實(shí)現(xiàn)。本程序在實(shí)現(xiàn)刪除功能時(shí),先建立了一個(gè)臨時(shí)文件,將當(dāng)前文件當(dāng)中的信息一項(xiàng)一項(xiàng)的存入到臨時(shí)文件,而要?jiǎng)h除的信息不保存。這樣,當(dāng)刪除部分完成時(shí),只需將臨時(shí)文件替換現(xiàn)有數(shù)據(jù)文件即可。宏定義為了使程序看起來(lái)比較簡(jiǎn)潔,同時(shí)也為了使程序便與擴(kuò)展,程序設(shè)計(jì)當(dāng)中設(shè)計(jì)并使用了宏。宏的使用將為程序編寫(xiě)帶來(lái)很大方便,尤其是傳遞參數(shù)的功能是子程序所不可比擬的。本程序編寫(xiě)當(dāng)中用到的宏定義其相應(yīng)功能如下:showmacroaddrs;顯示字符串leadx,addrsmovah,9int21hendmset_pmacromovah,2;置光標(biāo)位置movdh,0;行movdl,0;列movbh,0;頁(yè)號(hào)int10hendmset_p0macro;光標(biāo)置于第11行,第2列movah,2movdh,6movdl,0movbh,0int10hendmclearmacro;全屏幕清除moval,0movcl,0movch,0movdh,24movdl,79movbh,7movah,6int10hmovah,2;置光標(biāo)位置movdh,0;行movdl,0;列movbh,0;頁(yè)號(hào)int10hendmnewlinemacro;回車(chē)換行pushaxpushdxmovdl,0dhmovah,2int21hmovdl,0ahmovah,2int21hpopdxpopaxendm;-----------------------------------------------------------showmenumacroclearshowm1showm2showm3showm4showm5showm6showm7showm8showm9showm10endm;-----------------------------------------------------------show_itemmacroaddrslocaliloop,w10,againsipushbxpushcxmovdl,'';輸出1個(gè)空格movah,2int21hmovbx,0iloop:movdl,addrs[bx];displaychar輸出addrs開(kāi)始的nno個(gè)字符movah,2int21hincbxcmpbx,nnojliloopmovcx,4;輸出格式:01234567w10:movdl,'';輸出水平制表符movah,2int21hmovsi,ano;輸出addrs開(kāi)始的ano個(gè)字符againsi:movdl,addrs[bx]movah,2int21hincbxdecsicmpsi,0jneagainsiloopw10popcxpopbxendm;---------------------------------------------------------getinmacroaddrs,count2localzeroit,lp,input_end,exitg;將count2個(gè)字符輸入到addrs為首的內(nèi)存單元當(dāng)中,以回車(chē)換行作為終止,多余15個(gè)字符的忽略pushbxpushaxmovbx,0;addrs為首的15個(gè)字符置為空格zeroit:movaddrs[bx],''incbxcmpbx,nnojlzeroitmovbx,0;將count2個(gè)字符輸入到addrs為首的內(nèi)存單元當(dāng)中l(wèi)p:movah,1int21hcmpal,0ah;輸入字符若為回車(chē)或換行,則輸入結(jié)束jzinput_endcmpal,0dhjzinput_endmovaddrs[bx],alincbxcmpbx,count2jllpinput_end:;多輸入的字符忽略,直到輸入為回車(chē)換行時(shí)輸入停止cmpal,0dhjzexitgcmpal,0ahjzexitgmovah,7int21h;無(wú)回顯的鍵盤(pán)輸入jmpinput_endexitg:popaxpopbxendm模塊圖及程序流程圖程序當(dāng)中使用的模塊及宏的相應(yīng)關(guān)系可用下面的層次圖來(lái)表示,從中我們可以很明顯地看出程序各個(gè)部分的關(guān)系。程序各模塊的層次圖主程序的流程圖運(yùn)行結(jié)果演示程序的數(shù)據(jù)文件保存在程序同目錄下的文本文件list.txt當(dāng)中。對(duì)源程序進(jìn)行匯編連結(jié)后,直接鍵入可執(zhí)行文件的文件名book.exe即可運(yùn)行程序。程序運(yùn)行的界面和執(zhí)行結(jié)果如下:WelcometotheBookInformationManagementSystem!DesignedandproducedbyZhangHuanrenFromInformationScience&EngineeringCollegeofCSU(c)Allrightsreserved2005-2006**************************************************************BookInformationManagementSystem ** **Insert (i) List(l) **Modify (m)Help(h) **Delete (d) Query(q) **Exit (e) ** **Pleasechoosecorrespondingfunction... **************************************************************Thebookinformationyouwantislistedasfollow:BookNameAuthorPublisherISBNpricewodedaxuegaorejishangwuyinshua987984611grexindongfangshijie167987933shuxuejianmojingqiyuanqinghua+989789448.6IBM_PCshenmeimingqinghuadaxue98974646934.8shubaosdfwang1549781414.5Pressanykeytoreturn...Pleaseinputtheinformationofthebookyouwanttoinsert:BookName:hongyuheiAuthor:tiantangPublisher:x

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論