夢(mèng)想天籟之音剖析_第1頁(yè)
夢(mèng)想天籟之音剖析_第2頁(yè)
夢(mèng)想天籟之音剖析_第3頁(yè)
夢(mèng)想天籟之音剖析_第4頁(yè)
夢(mèng)想天籟之音剖析_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

華東交通大學(xué)課程設(shè)計(jì)(論文)紙 第 頁(yè)目錄緒論 2第一章 原理 3第二章 設(shè)計(jì)思路 5第三章 遇到的問(wèn)題及解決方案 8結(jié)論謝辭

9 10參考文獻(xiàn) 10附錄A 11華東交通大學(xué)課程設(shè)計(jì)(論文)紙 第 頁(yè)夢(mèng)想天籟之音緒論選擇匯編程序的理由:學(xué)習(xí)和使用匯編語(yǔ)言可以從根本上認(rèn)識(shí)和理解計(jì)算機(jī)的工作過(guò)程。現(xiàn)在計(jì)算機(jī)系統(tǒng)中,某些功能仍然靠匯編語(yǔ)言程序來(lái)實(shí)現(xiàn)。匯編語(yǔ)言程序的效率要高于任何的高級(jí)語(yǔ)言程序。即匯編程序的目標(biāo)代碼比高級(jí)語(yǔ)言程序短而運(yùn)行速度快。題目:為了具有音響輸出的能力,系統(tǒng)板上安裝有一個(gè)2.25英寸的揚(yáng)聲器以及控制電路和驅(qū)動(dòng)電路,控制電路能以位觸發(fā)和定時(shí)器控制兩種不同的方式驅(qū)動(dòng)揚(yáng)聲器發(fā)聲。要求用這兩種方法之一設(shè)定不同的音階,然后可根據(jù)不同的按鍵發(fā)出對(duì)應(yīng)的音頻和音長(zhǎng)。選擇這個(gè)題目的原因:我們喜歡古典音樂(lè)的人,喜歡名指揮家的人,在心目中都有一個(gè)美麗的夢(mèng)想。我們?cè)谝魳?lè)會(huì)上,在片子上,看過(guò)他們的絕妙的精彩表演。一次次傾聽(tīng)美妙的音樂(lè),不禁讓我有了一個(gè)新大陸般的發(fā)現(xiàn)。這個(gè)新大陸的發(fā)現(xiàn),著實(shí)讓我震驚了一次!不是因?yàn)樗闹笓]有多么的激烈,宏大,浪漫,也不是因?yàn)樗膶?duì)于德奧音樂(lè)的理性的,極為邏輯的詮釋?zhuān)且驗(yàn)?,他給我們帶來(lái)的一種完全是另類(lèi)風(fēng)格的沖擊。而且這樣的沖擊,也并不是那種感情的旋渦完全被掀起其高潮的那種沖擊,而是極為委婉的,甚至是極為平靜的,有著和音樂(lè)的極為靠近,又不失距離感的那種奇特的沖擊。其實(shí),要說(shuō)是一種沖擊,已經(jīng)不那么準(zhǔn)確了。因?yàn)槔峡说淖非?,是要讓人們既有完全與音樂(lè)融合,又時(shí)時(shí)處處不會(huì)被音樂(lè)吞沒(méi)的那種感覺(jué)。通過(guò)這一個(gè)學(xué)期的學(xué)習(xí)匯編知識(shí),我了解匯編原來(lái)可以讓我編出我喜愛(ài)的東西,我相信我一定能完成這個(gè)題目,因?yàn)槲蚁矚g所以我選擇。能夠通過(guò)計(jì)算機(jī)彈奏美妙的音樂(lè),這樣的事情很有意義。以前小時(shí)候特別喜歡聽(tīng)音樂(lè),所以每次上音樂(lè)課的時(shí)候都很高興聽(tīng)老師能在那么一架大鋼琴面前彈我們喜歡的歌曲?,F(xiàn)在可以在自己的電腦上演奏音樂(lè),那是一件多么令人高興的事情?。。?!編這個(gè)程序首先要電腦上有個(gè)揚(yáng)聲器(這個(gè)應(yīng)該不是問(wèn)題,每臺(tái)電腦上應(yīng)該都有),并且要能使它發(fā)聲。這是個(gè)關(guān)鍵。有中音樂(lè)意境優(yōu)美,樂(lè)曲結(jié)構(gòu)嚴(yán)密。它的主題旋律盡管有多種變化,新的因素層出不窮,但每一段的結(jié)尾都采用同一樂(lè)句出現(xiàn).聽(tīng)起來(lái)十分和諧。在民間音樂(lè)中,這種手法叫“換頭合尾”,能從格格不同角度揭示樂(lè)曲的意境,深化音樂(lè)表現(xiàn)的內(nèi)容。我想實(shí)現(xiàn)那么一種意境,可是能力有限啊,但是,萬(wàn)里長(zhǎng)征有第一步,我要用匯編編寫(xiě)出一段演奏音樂(lè)的程序來(lái),開(kāi)始著手設(shè)計(jì)程序。華東交通大學(xué)課程設(shè)計(jì)(論文)紙 第 頁(yè)第一章了解各種匯編原理基礎(chǔ)我想要首先了解匯編重點(diǎn)指令:宏指令的定義與使用在匯編語(yǔ)言源程序中,有的程序段在整個(gè)程序中要多次出現(xiàn)。這種出現(xiàn)可能是完全不修改的重復(fù),也可能是僅修改某個(gè)操作數(shù),而程序段的功能并無(wú)多大的變化。為了減少源程序中重復(fù)編寫(xiě)相同程序段的工作,可以使用宏指令來(lái)進(jìn)行,宏指令的使用要先進(jìn)行定義,然后才能調(diào)用,并在匯編過(guò)程中自動(dòng)展開(kāi)。第二:了解產(chǎn)生聲音的原理步驟:PC機(jī)通過(guò)內(nèi)置的永久磁鐵揚(yáng)聲器產(chǎn)生聲音,揚(yáng)聲器和端口42H、43H和61H連接。揚(yáng)聲器發(fā)聲的操作步驟如下:1.得到端口61H的狀態(tài),并保存。2.為了打開(kāi)揚(yáng)聲器,發(fā)送在位0和1中的位串11到端口61H。端口激活I(lǐng)nter8255可編程外圍接口(PPI)芯片。3.為了關(guān)閉揚(yáng)聲器發(fā)送在位 0和1中的位串00到端口61H。第三:了解調(diào)試程序DEBUG的使用DEBUG是DOS的一個(gè)外部命令,其命令格式為:[path]DEBUG[filename][parm1][parm2][path]是DEBUG命令在磁盤(pán)上的路徑filename是要用DEBUG來(lái)處理的文件的名字,它包括文件的盤(pán)符、路徑、文件主名和擴(kuò)展名。參數(shù)parm1和parm2是文件filename 運(yùn)行時(shí)使用的參數(shù)。當(dāng)啟動(dòng)DEBUG時(shí), 將對(duì)CPU的各寄存器進(jìn)行初始化:如果啟動(dòng)時(shí)指定的filename是.EXE文件,則DEBUG啟動(dòng)后將自動(dòng)把指定的文件裝入內(nèi)存,并置:CS為程序代碼段段地址IP為第一條要執(zhí)行指令的偏移地址SS為堆棧段段地址SP為堆棧底部+1單元的偏移地址DS和ES是裝入文件前第一個(gè)可用內(nèi)存段的段地址 (即DEBUG程序后的第一個(gè)段地址)標(biāo)志寄存器的所有標(biāo)志位為0BX(0)和CX是裝入的文件長(zhǎng)度其余寄存器為0。如果啟動(dòng)DEBUG時(shí)指定的文件filename不是.EXE文件,則DEBUG將把文件裝入內(nèi)存,并置:四個(gè)段寄存器為DEBUG程序后面的第一個(gè)段地址華東交通大學(xué)課程設(shè)計(jì)(論文)紙 第 頁(yè)IP指向100HSP指向這個(gè)段的段尾標(biāo)志寄存器的所有標(biāo)志位為 0BX和CX是裝入的文件長(zhǎng)度其余寄存器為0。如果啟動(dòng)DEBUG時(shí)不指定filename,則只是把CPU的各寄存器進(jìn)行初始化,初始化結(jié)果與上述的第2點(diǎn)相同。這時(shí)要想顯示、修改文件,可以用DEBUG的子命令裝入文件。從鍵盤(pán)輸入一個(gè)鍵用的是BIOS16H中斷,AL中回送的是鍵的ASCII碼。AH中回送鍵的掃描碼。因?yàn)闆](méi)有用到功能鍵或控制鍵,所以完全可以用DOS的鍵盤(pán)輸入功能。然后首先想到的是如何讓計(jì)算機(jī)發(fā)聲就是用8253定時(shí)輸出方波的那種,原來(lái)自己都弄過(guò)的,可時(shí)間久了,查到:8253/喇叭的口地址定時(shí)常數(shù)的設(shè)置用的是BIOS中的BEEP來(lái)控制.用定時(shí)器中的42H和43H來(lái)計(jì)數(shù),用輸出端口61H來(lái)發(fā)聲,和GENSOUND鏈接執(zhí)行。第四:宏觀掌握PC機(jī)發(fā)音原理及音樂(lè)程序編制方法,8088指令:IN,OUT,DIV,OR華東交通大學(xué)課程設(shè)計(jì)(論文)紙 第 頁(yè)第二章設(shè)計(jì)思路:了解計(jì)算機(jī)發(fā)聲原理(見(jiàn)第一章內(nèi)容),查找資料,找相關(guān)程序參考。設(shè)計(jì)子程序?qū)懲ㄓ冒l(fā)聲程序按鍵子程序等將子程序用主程序連接起來(lái),通過(guò)調(diào)試鏈接運(yùn)行程序。完成設(shè)計(jì)思路解析:從上表中可以看出編寫(xiě)一個(gè)發(fā)聲的程序不再?gòu)?fù)雜,有了思路可以開(kāi)始編寫(xiě),編寫(xiě)過(guò)程可以拿附件中的程序來(lái)解釋?zhuān)洪_(kāi)始放開(kāi)其他部分寫(xiě)發(fā)聲段 通用發(fā)聲程序段:gensound proc farpush axpush bxpush cxpush dxpush dimov al,0b6hout 43h,almov dx,12hmov ax,3280hdiv di華東交通大學(xué)課程設(shè)計(jì)(論文)紙第頁(yè)out42h,almoval,ahout42h,alinal,61hmovah,aloral,3out61h,alwait1:movcx,55afhdelay:loopdelaydecbxjnewait1moval,ahout61h,alpopdipopdxpopcxpopbxpopaxretgensoundendp寫(xiě)完后先不管它, 由于音樂(lè)的演奏肯定要出現(xiàn)延時(shí)部分 :第二步編寫(xiě)主程序(也是調(diào)用發(fā)聲程序的代碼)music proc farpush dssub ax,axpush axmov ax,dseg。。。 。。。end_mus:retmusic endp最后我寫(xiě)數(shù)據(jù)段:我選用了一首兒歌《兩只老虎》為播放音樂(lè),先寫(xiě)題目《twotigers!》根據(jù)網(wǎng)上提供的樂(lè)譜編寫(xiě)數(shù)據(jù)段代碼,如下所示:tiger db 0ah,0dh,' 《twotigers 》!$'mus_freqdw 2dup(262,294,330,262)dw 2dup(330,349,392)華東交通大學(xué)課程設(shè)計(jì)(論文)紙第頁(yè)dw2dup(392,440,392,349,330,262)dw2dup(294,196,262),0ffffhmus_timedw6dup(10000),20000dw2dup(10000,10000,20000)dw12dup(10000),40000dseg ends等等其他指令(個(gè)人習(xí)慣),編譯運(yùn)行通過(guò),完成匯編課程設(shè)計(jì)。編寫(xiě)過(guò)程:a.建立匯編源程序─通過(guò)───→

b.編譯為目標(biāo)文件─

↓┬─→

d.連接為可執(zhí)行文件↑│ c.不通過(guò),重新修改(語(yǔ)句錯(cuò)誤)├──────────────────────┘↑ f.不正確,用調(diào)試工具調(diào)試,重新修改(邏輯錯(cuò)誤)└────────────────────────────←

↓↓↓e運(yùn)行↓正確g.完成華東交通大學(xué)課程設(shè)計(jì)(論文)紙 第 頁(yè)第三章設(shè)計(jì)過(guò)程中出現(xiàn)的問(wèn)題及解決方案:第一.我的作業(yè)中出現(xiàn)在divideoverflow的錯(cuò)誤:結(jié)果是除法溢出!檢查了被除數(shù)是不是0,或是別的不合適的值等等。查出錯(cuò)誤改寫(xiě)程序第二.以下代碼出現(xiàn)錯(cuò)誤: wait: movcx,5000spkr_on: loop spkr_ondec bxjnz wait提示為MOV還有WAIT錯(cuò)誤,錯(cuò)誤類(lèi)型看不懂,于是我將這段代碼刪除,并改寫(xiě)了程序代碼,匯編通過(guò)!第三,原理問(wèn)題:就是用什么語(yǔ)句訪(fǎng)問(wèn)端口。編譯時(shí)碰到ASM時(shí)會(huì)把文件編譯成一個(gè)巨大的ASM文件,再重新啟動(dòng)匯編程序匯編,速度太慢。這通過(guò)看各種程序不斷優(yōu)化和簡(jiǎn)化程序得到改進(jìn)!第四.學(xué)習(xí)尋址是重點(diǎn)。實(shí)地址尋址和保護(hù)地址尋址,了解各種尋址方式。第五.始寫(xiě)完沒(méi)聲音。首先,了解到聲音應(yīng)該是從 PCSpeaker上發(fā)出的,看看發(fā)聲,我看到課外書(shū)上有介紹:測(cè)試 PCSpeaker

PCSpeaker能不能看別的程序是不是能響,有個(gè)用鍵盤(pán)模擬電子琴的程序,運(yùn)行試試,看是不是在Windows下這種直接訪(fǎng)問(wèn)端口地址的程序不讓運(yùn)行。把程序簡(jiǎn)化,只發(fā)一個(gè)音就退出,看是否發(fā)音。然后來(lái)檢查程序是否錯(cuò)誤。得到的結(jié)果是程序出錯(cuò), PCSpeaker沒(méi)有問(wèn)題。第六,由于設(shè)置播放的頻率有問(wèn)題,播放的歌曲速度不一,延時(shí)出現(xiàn)問(wèn)題,在改寫(xiě)延時(shí)后基本得到解決,解決方法很笨,有是大段的刪除代碼而保持速度的一致和提高,因?yàn)闀簳r(shí)沒(méi)有找到更好的方法來(lái)解決音樂(lè)中休止符問(wèn)題。以上就是在寫(xiě)程序時(shí)遇到的一些問(wèn)題,可能是程序比較小,遇到的大問(wèn)題沒(méi)有,小問(wèn)題不多,所以得到的問(wèn)題類(lèi)型不是很多,了解問(wèn)題的知識(shí)面也不是很廣!這樣積累起來(lái)的經(jīng)驗(yàn)很少,所以以后得經(jīng)常編寫(xiě)各種小程序,以便于提高自身的編程能力!華東交通大學(xué)課程設(shè)計(jì)(論文)紙 第 頁(yè)結(jié)論通過(guò)編寫(xiě)匯編發(fā)聲程序首先可以了解到產(chǎn)生聲音的原理:PC機(jī)通過(guò)內(nèi)置的永久磁鐵揚(yáng)聲器產(chǎn)生聲音,揚(yáng)聲器和端口 42H、43H和61H連接。在傳統(tǒng)的匯編語(yǔ)言程序設(shè)計(jì)中,選擇結(jié)構(gòu)程序設(shè)計(jì)一般用轉(zhuǎn)移指令(JMP)加標(biāo)號(hào)來(lái)實(shí)現(xiàn),這種程序結(jié)構(gòu)實(shí)際上并不是真正的選擇結(jié)構(gòu);在循環(huán)程序設(shè)計(jì)中,一般用循環(huán)指令(LOOP)或轉(zhuǎn)移指令來(lái)實(shí)現(xiàn)循環(huán),這種結(jié)構(gòu)也不具有結(jié)構(gòu)化程序中的"WHILE循環(huán)"或"REPEAT循環(huán)"的結(jié)構(gòu)特征;在程序分支和循環(huán)的控制條件方面,每步判斷只能判斷一個(gè)條件,條件增多時(shí),不得不增加判斷指令的條數(shù),在這里不能應(yīng)用邏輯表達(dá)式進(jìn)行條件判斷。本文介紹一些設(shè)計(jì)選擇結(jié)構(gòu)程序、循環(huán)結(jié)構(gòu)程序、過(guò)程子程序及其他一些用于結(jié)構(gòu)化程序設(shè)計(jì)的語(yǔ)句及用于多條件判斷的邏輯表達(dá)式。利用這些語(yǔ)句可設(shè)計(jì)具有高級(jí)語(yǔ)言結(jié)構(gòu)風(fēng)格的結(jié)構(gòu)化匯編語(yǔ)言程序。還可以了解其他更多的匯編知識(shí):匯編語(yǔ)言的實(shí)質(zhì)和機(jī)器語(yǔ)言是相同的,都是直接對(duì)硬件操作,只不過(guò)指令采用了英文縮寫(xiě)的標(biāo)識(shí)符,更容易識(shí)別和記憶。它同樣需要編程者將每一步具體的操作用命令的形式寫(xiě)出來(lái)。匯編程序通常由三部分組成:指令、偽指令和宏指令。由于匯編程序的每一句指令只能對(duì)應(yīng)實(shí)際操作過(guò)程中的一個(gè)很細(xì)微的動(dòng)作,例如移動(dòng)、自增,因此匯編源程序一般比較冗長(zhǎng)、復(fù)雜、容易出錯(cuò),而且使用匯編語(yǔ)言編程需要有更多的計(jì)算機(jī)專(zhuān)業(yè)知識(shí),但匯編語(yǔ)言的優(yōu)點(diǎn)也是顯而易見(jiàn)的,用匯編語(yǔ)言所能完成的操作不是一般高級(jí)語(yǔ)言所能實(shí)現(xiàn)的,而且源程序經(jīng)匯編生成的可執(zhí)行文件不僅比較小,而且執(zhí)行速度很快。高級(jí)語(yǔ)言是目前絕大多數(shù)編程者的選擇。和匯編語(yǔ)言相比,它不但將許多相關(guān)的機(jī)器指令合成為單條指令,并且去掉了與具體操作有關(guān)但與完成工作無(wú)關(guān)的細(xì)節(jié),例如使用堆棧、寄存器等,這樣就大大簡(jiǎn)化了程序中的指令。同時(shí),由于省略了很多細(xì)節(jié),編程者也就不需要有太多的專(zhuān)業(yè)知識(shí)。所以此次的匯編應(yīng)用課程設(shè)計(jì)大作業(yè)中,使我掌握了DOS的中斷,BIOS的中斷,以及鍵盤(pán)硬中斷的BIOS號(hào)中斷等。通過(guò)多次上機(jī)和指導(dǎo)老師的指導(dǎo)下從多方面掌握播放聲音技術(shù),使我對(duì)匯編知識(shí)有了更深一步的掌握。在匯編課程設(shè)計(jì)中,由于知識(shí)的局限,程序設(shè)計(jì)中難免有不足之處,我體會(huì)出知識(shí)是在平時(shí)的學(xué)習(xí)中是一點(diǎn)一點(diǎn)積累的,而且在學(xué)習(xí)中要刻苦學(xué)習(xí),虛心請(qǐng)教。才能不斷提高和完善自己的編程能力和水平!從而在以后的學(xué)習(xí)與生活中要注重積累,對(duì)匯編語(yǔ)言進(jìn)行全面的掌握和更好的應(yīng)用華東交通大學(xué)課程設(shè)計(jì)(論文)紙 第 頁(yè)謝辭謝謝一直支持幫助鼓勵(lì)我的朋友玉仙,還有生我養(yǎng)我的父母以及我的所有的親人,感謝他們一直這樣支持我鼓勵(lì)我,還要謝謝我們尊敬的老師,沒(méi)有老師的教導(dǎo)我很難自己編寫(xiě)出程序來(lái),還有寢室里我的電腦兒子和電風(fēng)扇朋友,讓我能完成這個(gè)任務(wù)。還有借給我參考書(shū)的圖書(shū)館,還有學(xué)校,晚上不熄燈,不斷電,使我們有充分的時(shí)間完成該課程設(shè)計(jì)。還有中國(guó)鐵通為我們裝的寬帶(雖然付了錢(qián)的),最后感謝大米!讓我能活下來(lái)!參考文獻(xiàn)IBMPC匯編語(yǔ)言程序設(shè)計(jì)(第五版)中文版》人民郵電出版社2002年4月80x86匯編語(yǔ)言程序設(shè)計(jì)教程》清華大學(xué)出版社出楊季文編《IBM-PC匯編語(yǔ)言程序設(shè)計(jì)》沈美明溫冬嬋編著出版社:清華大學(xué)出版社《PC機(jī)匯編語(yǔ)言實(shí)戰(zhàn)精解》李春生編著出版社:南開(kāi)大學(xué)出版社附錄A:源程序華東交通大學(xué)課程設(shè)計(jì)(論文)紙 第 頁(yè)stacksegmentpara'stack'db64dup('stack...')stackendsdsegsegmentpara'data'tigerdb0ah,0dh,'twotigers!$'mus_freqdw2dup(262,294,330,262)dw2dup(330,349,392)dw2dup(392,440,392,349,330,262)dw2dup(294,196,26

溫馨提示

  • 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)論