四川大學(xué)微機(jī)原理實(shí)驗(yàn)報(bào)告_第1頁(yè)
四川大學(xué)微機(jī)原理實(shí)驗(yàn)報(bào)告_第2頁(yè)
四川大學(xué)微機(jī)原理實(shí)驗(yàn)報(bào)告_第3頁(yè)
四川大學(xué)微機(jī)原理實(shí)驗(yàn)報(bào)告_第4頁(yè)
四川大學(xué)微機(jī)原理實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、微機(jī)原理實(shí)驗(yàn)報(bào)告學(xué) 院: 專業(yè)班級(jí): 姓 名 學(xué) 號(hào) 實(shí)驗(yàn)一 匯編語(yǔ)言編程基礎(chǔ)1.3匯編語(yǔ)言程序上機(jī)操作和調(diào)試訓(xùn)練1 功能說(shuō)明 運(yùn)用8086匯編語(yǔ)言,編輯多字節(jié)非壓縮型BCD數(shù)除法的簡(jiǎn)單程序,文件名取為*.ASM。運(yùn)用MASMEXE文件進(jìn)行匯編,修改程序中的各種語(yǔ)法錯(cuò)誤,直至正確,形成*.OBJ文件。運(yùn)用LINK.EXE文件進(jìn)行連接,形成*.EXE文件。仔細(xì)閱讀和體會(huì)DEBUG調(diào)試方法,掌握各種命令的使用方法。運(yùn)用DEBUG。EXE文件進(jìn)行調(diào)試,使用單步執(zhí)行命令T兩次,觀察寄存器中內(nèi)容的變化,使用察看存儲(chǔ)器數(shù)據(jù)段命令D,觀察存儲(chǔ)器數(shù)據(jù)段內(nèi)數(shù)值。再使用連續(xù)執(zhí)行命令G,執(zhí)行程序,檢查結(jié)果是否正確,

2、若不正確可使用DEBUG的設(shè)置斷點(diǎn),單步執(zhí)行等功能發(fā)現(xiàn)錯(cuò)誤所在并加以改正。二程序流程圖 設(shè)置被除數(shù)、商的地址指針 設(shè)置單位除法次數(shù)計(jì)數(shù)器 取被除數(shù)一位作十進(jìn)制調(diào)整 作字節(jié)除法、存商 N 被除數(shù)各位已除完? Y 顯示運(yùn)算結(jié)果 結(jié)束 三程序代碼修改后的程序代碼如下:DATA SEGMENT A DB 9,6,8,7,5 B DB 5 C DB 5 DUP (0) N EQU 5 DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATASTART: MOV AX,DATA MOV DS,AX MOV ES,AX CLD LEA SI,A LEA DI,

3、C MOV CX,N MOV AH,0LP1: LODSB AAD DIV B STOSB LOOP LP1 MOV CX,N LEA DI,CLP2: MOV DL,DI ADD DL,30H MOV AH,2 INT 21H INC DI LOOP LP2 MOV AH,4CH INT 21HCODE ENDSEND START四實(shí)驗(yàn)感想和收獲通過(guò)這次試驗(yàn),我對(duì)微機(jī)原理上級(jí)試驗(yàn)環(huán)境有了初步的認(rèn)識(shí),可以較為熟練地對(duì)匯編語(yǔ)言進(jìn)行編譯,匯編及連接,同時(shí)也學(xué)會(huì)了用DEBUG調(diào)試程序,收獲很大。在這次試驗(yàn)中我也遇到了一些困難。在剛開(kāi)始我發(fā)現(xiàn)自己無(wú)法打開(kāi)MASM.EXE,計(jì)算機(jī)提示是由于版本不兼容。我

4、這才想起來(lái)我的操作系統(tǒng)是64位的,和該軟件版本不兼容。不過(guò)我并沒(méi)有放棄,經(jīng)過(guò)我的摸索之后,我發(fā)現(xiàn)用DOSBOX這個(gè)程序可以解決我的電腦運(yùn)行不了該程序的問(wèn)題。在解決了第一個(gè)難題后,我開(kāi)始著手改正試驗(yàn)1.3中的語(yǔ)法錯(cuò)誤和邏輯錯(cuò)誤,但是無(wú)論我怎么修改卻始終都無(wú)法通過(guò)編譯,并且基本上每句話都有編譯錯(cuò)誤。根據(jù)我多年編程的經(jīng)驗(yàn)來(lái)看,這應(yīng)該是中文輸入法在搞鬼,之后我耐心地把程序重新輸了一遍,果然通過(guò)了編譯,并且之后的連接也進(jìn)行的很順利。在用DEBUG調(diào)試時(shí)發(fā)現(xiàn)得出的結(jié)果也很正確。盡管這次的實(shí)驗(yàn)內(nèi)容非常簡(jiǎn)單,僅僅是教會(huì)我們一些基本的操作,但我卻明顯感覺(jué)到了匯編語(yǔ)言和C語(yǔ)言等高級(jí)語(yǔ)言所不同的地方。越是底層,基礎(chǔ)

5、的東西就越不人性化,用C語(yǔ)言一行代碼就能實(shí)驗(yàn)的功能在匯編語(yǔ)言中可能要花上數(shù)十行??磥?lái)匯編語(yǔ)言的學(xué)習(xí)不是幾周就能速成的,必須要有長(zhǎng)年累月的積淀才能掌握。 實(shí)驗(yàn)二 設(shè)計(jì)匯編語(yǔ)言程序一功能說(shuō)明練習(xí)1. 實(shí)驗(yàn)題目:編程計(jì)算下列表達(dá)式:A=90,B=-70,C=5,Y均為有符號(hào)數(shù),計(jì)算Y=2(A+B)+(AC)5要編寫一些稍微復(fù)雜的程序,我們會(huì)遇到一段程序被反復(fù)執(zhí)行,這樣,我們會(huì)用到LOOP指令。使用該指令時(shí),需在CX中裝入循環(huán)次數(shù)。練習(xí)2.碼轉(zhuǎn)換程序設(shè)計(jì)編制程序,把十進(jìn)制數(shù)15786轉(zhuǎn)化成二進(jìn)制數(shù)。提示:15786=110101010+510+710+810+6,循環(huán)CX=5練習(xí)3.編制程序,從鍵盤輸

6、入最多5個(gè)數(shù),求他們的和,存入SUM。練習(xí)4.用“冒泡“法對(duì)一組數(shù)300,250,280,240,260,按從小到大的順序排列。提示:用冒泡的方法對(duì)一組數(shù)據(jù)元素排序,它的基本方法是:將相鄰的兩個(gè)元素通過(guò)比較進(jìn)行排序,通過(guò)多次,多遍的鄰元素排序,實(shí)現(xiàn)整個(gè)一組數(shù)的排序。對(duì)于5(N)個(gè)元素,整個(gè)排序通過(guò)4遍(=N-1)鄰元素排序完成。每一遍的排序由若干次鄰元素的排序組成。4遍排序中,鄰元素的排序依次為4,3,2,1遍。完成第一遍排序后,最大數(shù)沉底,已經(jīng)到達(dá)它應(yīng)占據(jù)的位置,不需要參加下一遍的排序。外循環(huán)的次數(shù)為CX=4次(N-1),內(nèi)循環(huán)的次數(shù)為4,3,2,1(DEC CX)排序遍數(shù)本遍排序前第一次排

7、序后第二次排序后第三次排序后第四次排序后1300,250,280,240,260250,300,280,240,260250,280,300,240,260250,280,240,300,260250,280,240,260,3002250,280,240,260,300250,280,240,260,300250,240,280,260,300250,240,260,280,3003250,240,260,280,300250,240,260,280,300240,250,260,280,3004240,250,260,280,300240,250,260,280,300實(shí)驗(yàn)要求:1. 編制

8、程序,從鍵盤輸入300,250,280,240,260這五個(gè)數(shù),并思考如何輸入任意五個(gè)數(shù),五個(gè)數(shù)可以有一位數(shù),二位數(shù),三位數(shù),四位數(shù),五位數(shù),混合輸入比較大?。?. 對(duì)這組數(shù)用冒泡法進(jìn)行排序,并輸出原始數(shù)據(jù)及排序后數(shù)據(jù),兩兩數(shù)據(jù)之間用空格分隔;3. 利用DEBUG調(diào)試工具,用D0命令,查看排序前后,內(nèi)存數(shù)據(jù)的變化,以及會(huì)用調(diào)試命令查看程序運(yùn)算中寄存器中的值;4. 去掉最大和最小的兩個(gè)值,求出其余值的平均值,并輸出最大值,最小值和平均值;5. 用壓棧PUSH和出棧POP指令“先進(jìn)后出”的特點(diǎn),設(shè)計(jì)算法將平均值按位逐個(gè)輸出(即輸出263);6. 用移位指令將平均值以二進(jìn)制串的形式輸出。7. 設(shè)計(jì)程

9、序要有模塊化的思想,用子程序?qū)崿F(xiàn)不同的功能;所有數(shù)據(jù)輸出前要用字符串的輸出指令,進(jìn)行輸出提示(如:zui da zhi shi : 300等),所有數(shù)據(jù)結(jié)果能清晰地顯示在電腦屏幕上。二程序流程圖三程序代碼練習(xí)一:DATA SEGMENTA DB 90B DB -70C DB 5Y DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV BL,A MOV CL,B ADD BL,CL ;A+B MOV AL,02H IMUL BL ;2*(A+B) MOV BX,AX MOV AL,A MOV

10、 CL,C IMUL CL ;A*C IDIV CL ;A*C/5 ADD AX,BX MOV Y,AX MOV AH,4CH INT 21HCODE ENDS END START練習(xí)二:DATA SEGMENTA DW 15786DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV BX,A MOV CX,16LEFT: TEST BX,8000H JNZ L1 ;當(dāng)首位為1,執(zhí)行L1 MOV DL,0 ;輸出0 MOV AH,02H INT 21HSHL: SHL BX,1 LOOP LEFT

11、 MOV AX,4CH INT 21HL1: MOV DL,1 ;輸出1 MOV AH,02H INT 21H JMP SHLCODE ENDS END START運(yùn)行結(jié)果:練習(xí)三:DATA SEGMENTSUM DW ?HEHE DB ?,?,?,?,?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX LEA SI,HEHE MOV BL,0 MOV CX,5LOOP1: MOV AH,01H INT 21H SUB AL,30H MOV SI,AL INC SI LOOP LOOP1 MOV CX

12、,5 MOV AX,0 SUB SI,5LOOP2: ADD AL,SI AAA INC SI LOOP LOOP2 MOV BX,AX MOV SUM,AX MOV DL,BH ADD DL,30H MOV AH,2 INT 21H MOV DL,BL ADD DL,30H MOV AH,2 INT 21H MOV AH,4CH INT 21HCODE ENDS END START運(yùn)行結(jié)果:冒泡排序法程序:DATAS SEGMENTSHURU DB QING SHU RU 5 GE SHU JU,13,10,$SHU1 DB 4,?,3 DUP(?)SHU2 DB 4,?,3 DUP(?)S

13、HU3 DB 4,?,3 DUP(?)SHU4 DB 4,?,3 DUP(?)SHU5 DB 4,?,3 DUP(?)AVER DB 3 DUP(?)SHUCHU DB PAI XU HOU DE SHU JU SHUN XU SHI,:,$MAX DB ZUI DA ZHI SHI,:,$MIN DB ZUI XIAO ZHI SHI,:,$AVERAGE DB PING JUN ZHI SHI,:,$CHUSHU DB 100,10HE DW ?STR1 DB 16 DUP(30H)STR2 DB PING JUN ZHI DE ER JIN ZHI CHUAN SHU CHU,:,$DA

14、TAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX MOV ES,AX LEA DX,SHURU;顯示QING SHU RU 5 GE SHU JU: MOV AH,9 INT 21H MOV CX,5;輸入五個(gè)數(shù)字 MOV SI,0INPUT: LEA DX,SHU1+SI;輸入要排序的原始數(shù)據(jù) MOV AH,10 INT 21H MOV DL,10;輸入后換行 MOV AH,2 INT 21H ADD SI,5;指針加5,指向下一個(gè)變量 LOOP INPUT CLD MOV CX,4;設(shè)定排

15、序外循環(huán)次數(shù)A: MOV BP,0 PUSH CX;外循環(huán)次數(shù)入棧PX: PUSH CX MOV CX,3 LEA SI,SHU1+BP+2;逐位比較兩個(gè)數(shù)大小 LEA DI,SHU1+BP+7 REPZ CMPSB JB B;如果小于直接比較下一個(gè)數(shù),否則兩個(gè)數(shù)對(duì)換位置 MOV CX,3Jh: MOV AL,SHU1BP+2 XCHG AL,SHU1BP+7;將兩個(gè)字節(jié)對(duì)換位置,循環(huán)3次即完成這兩個(gè)數(shù)的交換 XCHG AL,SHU1BP+2 INC BP LOOP Jh SUB BP,3B: ADD BP,5;指向后面兩個(gè)數(shù)字 POP CX LOOP PX POP CX;外循環(huán)次數(shù)出棧 LO

16、OP A LEA DX,SHUCHU;輸出字符串PAI XU HOU DE SHU JU SHUN XU SHI: MOV AH,9 INT 21H MOV CX,5 MOV SI,2OUTPUT:PUSH CX;計(jì)數(shù)器入棧實(shí)現(xiàn)循環(huán)嵌套 MOV CX,3L: MOV AL,SHU1+SI;輸出排序后的5個(gè)數(shù)字 MOV DL,AL MOV AH,2 INT 21H INC SI LOOP L MOV DL,2CH MOV AH,2 INT 21H ADD SI,2 POP CX;計(jì)數(shù)器出棧 LOOP OUTPUT MOV DL,10 MOV AH,2 INT 21H MOV DL,0DH MOV

17、 AH,2 INT 21H LEA DX,MAX;輸出字符串ZUI DA ZHI SHI: MOV AH,9 INT 21H MOV CX,3 MOV SI,2 D: MOV DL,SHU5+SI;輸出最大值 MOV AH,2 INT 21H INC SI LOOP D MOV DL,10;換行 MOV AH,2INT 21H MOV DL,0DH MOV AH,2 INT 21H LEA DX,MIN;輸出字符串ZUI XIAO ZHI SHI: MOV AH,9 INT 21H MOV CX,3 MOV SI,2 E: MOV DL,SHU1+SI;輸出最小值 MOV AH,2 INT 2

18、1H INC SI LOOP E MOV DL,10 MOV AH,2 INT 21H MOV DL,0DH MOV AH,2 INT 21H LEA DX,AVERAGE;輸出字符串PING JUN ZHI SHI: MOV AH,9 INT 21H MOV CX,3 MOV BX,10;除數(shù)10 MOV SI,2 AD: MOV DX,0 MOV AH,0 PUSH CX MOV CX,3 ZH: MOV AL,SHU2+SI;將十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),為后面求平均值做準(zhǔn)備 SUB AL,30H PUSH AX MOV AX,DX MUL BX MOV DX,AX POP AX ADD D

19、X,AX INC SI LOOP ZH;執(zhí)行3次完成3個(gè)十進(jìn)制數(shù)的轉(zhuǎn)換 ADD SI,2 POP CX ADD HE,DX;將DX的數(shù)放在HE中 LOOP AD;循環(huán)后得到三個(gè)十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)之后的相加和 MOV DX,HE; MOV AX,DX XOR DX,DX MOV BX,3 DIV BX;除3取平均值,結(jié)果將商放在AX中,余數(shù)放在DX中 MOV BX,AX;給BX賦值平均數(shù),然后將BX中表示的十進(jìn)制數(shù)轉(zhuǎn)換為對(duì)應(yīng)的字符串 DIV CHUSHU;除100取最高位 ADD AL,30H;轉(zhuǎn)換為ASCII碼 MOV AVER,AL MOV AL,AH XOR AH,AH DIV CHU

20、SHU+1;除10取十位 ADD AL,30H ADD AH,30H;余數(shù)就是個(gè)位 MOV AVER+1,AL MOV AVER+2,AH MOV CX,3 MOV SI,0 F: MOV DL,AVER+SI;輸出平均值 MOV AH,2 INT 21H INC SI LOOP F MOV DL,10 MOV AH,2 INT 21H MOV DL,0DH MOV AH,2 INT 21H LEA DX,STR2 ;輸出字符串PING JUN ZHI DE ER JIN ZHI CHUAN SHU CHU: MOV AH,9INT 21H MOV CX,16 MOV SI,0 G: RCL

21、BX,1;將平均數(shù)轉(zhuǎn)換為二進(jìn)制串 JNC H ADD STR1+SI,1;如果不為0就將其加1變成1的ASCII碼值 H: MOV DL,STR1+SI;將二進(jìn)制串逐個(gè)輸出 MOV AH,2 INT 21H INC SI LOOP G MOV AH,4CH INT 21HCODES ENDS END START運(yùn)行結(jié)果:4 實(shí)驗(yàn)感想和收獲 本次實(shí)驗(yàn)相較于第一次難度增大了很多,本人花了大約12個(gè)小時(shí)才做完。第一個(gè)練習(xí)很簡(jiǎn)單,從編譯到連接都是一次通過(guò),在用DEBUG調(diào)試發(fā)現(xiàn)結(jié)果卻實(shí)正確。不過(guò)在做第二個(gè)練習(xí)時(shí)我遇到了困難,完全沒(méi)有思路。當(dāng)時(shí)不知道怎么對(duì)一位一位的數(shù)據(jù)進(jìn)行操作,在看書的過(guò)程中無(wú)意中發(fā)現(xiàn)

22、了循環(huán)指令,我才意識(shí)到用SHL指令可以實(shí)現(xiàn)這個(gè)功能。第三個(gè)聯(lián)系主要考查我們對(duì)中斷指令的了解程度,我實(shí)現(xiàn)地是一位數(shù)的加法,不過(guò)后來(lái)老師發(fā)給了我們他自己編的版本,我感慨道編程真是一門大學(xué)問(wèn),要考慮到各種各樣的功能,人機(jī)互動(dòng),可能出錯(cuò)的地方。這都是需要大量的實(shí)踐積累才行。在編寫冒泡排序法這個(gè)程序時(shí)我遇到了很多困難。起初在編寫一段循環(huán)指令時(shí),未把寄存器CX入宅,所以影響了其他部分的循環(huán)次數(shù),導(dǎo)致結(jié)果出錯(cuò)。所以今后編程時(shí)一定要把有用的信息入宅,防止被其他指令所改變。在輸出字符時(shí),必須記得把要輸出字符的值轉(zhuǎn)變成ASCI碼,我期初輸出數(shù)字時(shí)就忘記了這一步導(dǎo)致出了很多差錯(cuò)。同時(shí)在將二進(jìn)制數(shù)轉(zhuǎn)變成BCD嗎輸出時(shí)

23、可以通過(guò)除10來(lái)實(shí)現(xiàn),將得到的商繼續(xù)除10,而得到的余數(shù)就是個(gè)位的值,同理,再次除10得到的余數(shù)就是10位。所以通過(guò)適當(dāng)此處的出發(fā)可以將二進(jìn)制數(shù)轉(zhuǎn)變?yōu)锽CD碼。通過(guò)親身實(shí)踐這次試驗(yàn),對(duì)匯編語(yǔ)言編程有了初步的認(rèn)識(shí),也體會(huì)到了編程的整個(gè)過(guò)程。從讀題,設(shè)計(jì)程序框架到寫代碼,步步承接,同時(shí)將課堂上所學(xué)的知識(shí)運(yùn)用起來(lái),在加深理解的同時(shí)也發(fā)現(xiàn)了自己很多不懂的地方,于是通過(guò)自己查資料,問(wèn)老師終于將程序一步步地調(diào)試正確得出期望的結(jié)果,那種自豪和滿足感油然而生。 第三次實(shí)驗(yàn) 8253定時(shí)器/計(jì)數(shù)器與接口實(shí)驗(yàn) 樂(lè)曲程序 一功能說(shuō)明計(jì)算機(jī)是如何產(chǎn)生音樂(lè)和聲響的呢?原來(lái)在計(jì)算機(jī)中有一個(gè)可編程時(shí)間間隔定時(shí)器8253,它

24、能根據(jù)程序提供的計(jì)數(shù)值和工作模式,產(chǎn)生各種形狀和各種頻率的計(jì)數(shù)/定時(shí)脈沖,提供給系統(tǒng)的各個(gè)部件使用。它還可以產(chǎn)生不同頻率的脈沖作為揚(yáng)聲器的聲源。在8253定時(shí)器內(nèi)部有3個(gè)獨(dú)立工作的計(jì)數(shù)器:Counter0, Counter1, Countre2,每個(gè)計(jì)數(shù)器都分配有一個(gè)端口地址,分別是40H,41H,42H。8253內(nèi)部還有一個(gè)公用的控制寄存器,端口地址為43H,端口地址輸入到8253的CS,A1,A0端,分別對(duì)三個(gè)計(jì)數(shù)器和控制器尋址。對(duì)8253編程時(shí),先要設(shè)定控制字,以選擇計(jì)數(shù)器,確定工作模式和計(jì)數(shù)值的格式,每個(gè)計(jì)數(shù)器由三個(gè)引腳與外部聯(lián)系,CLK為時(shí)鐘輸入端,GATA為門控制信號(hào)輸入端,OUT

25、為計(jì)數(shù)/定時(shí)信號(hào)輸入端。每個(gè)計(jì)數(shù)器是以倒計(jì)數(shù)的方式計(jì)數(shù),也就是說(shuō),從計(jì)數(shù)初值開(kāi)始逐次減1,直到減為0為止。端口地址與計(jì)數(shù)器的關(guān)系:40H選中計(jì)數(shù)器0:作為定時(shí)器為系統(tǒng)日時(shí)鐘提供計(jì)時(shí)基準(zhǔn)41H選中計(jì)數(shù)器1:作為定時(shí)器使用42H選中計(jì)數(shù)器2:用來(lái)控制揚(yáng)聲器發(fā)聲43H公用的控制器:分別對(duì)三個(gè)寄存器和控制器尋址那么,如何觸動(dòng)揚(yáng)聲器發(fā)出聲音呢?原來(lái)PC機(jī)的主音箱上裝有一只小喇叭,由定時(shí)器8253和并行接口芯片8255(可編程外圍接口芯片)控制其發(fā)聲,8255包括三個(gè)8位寄存器,兩個(gè)用于輸入功能,一個(gè)用于輸出功能。輸入寄存器分配的I/O端口地址為60H和62H,輸出寄存器分配的I/O端口地址為61H。82

26、53定時(shí)器計(jì)數(shù)器2連接到揚(yáng)聲器,其電路如下: 8253 DRIVER 1.9318MHZ CLK 喇叭與門門22門1門 OUT2 8255 PB0 GATE2 PB1 裝入計(jì)數(shù)器2的計(jì)數(shù)初值為533H(1.19318MHz/896Hz=1331=533H),這樣,得到的控制字為10110110B=0B6H,即選中計(jì)數(shù)器2,讀/寫,工作方式三(方波發(fā)聲器),二進(jìn)制。計(jì)數(shù)器2的初始化程序?yàn)椋?MOV AL,0B6H OUT 43H,AL 1) 計(jì)算計(jì)數(shù)值程序段:MOV DI, 給定頻率 MOV DX, 12HMOV AX, 34DCHDIV DIAX中即為計(jì)數(shù)值。2) 打開(kāi)揚(yáng)聲器發(fā)聲,8255PB

27、0,PBI送出高電平:IN AL , 61HOR AL , 3OUT 61H , AL3)關(guān)閉揚(yáng)聲器,停止發(fā)聲:IN AL ,61HAND AL , 0FCHOUT 61H, AL 兩只老虎的音頻表定義在數(shù)據(jù)段中,如下:STACK SEGMENT DW 100 DUP(?)STACK ENDSDATA SEGMENTMUSIC DW 2 DUP(262,294,330,262) ; 頻率表,1231;1231 DW 2 DUP(330,349,392) ;345;345; DW 2 DUP(392,440,392,349,330,262) ;565431;565431 dw 2 dup(294

28、,196,262),0 ;251;251,0表示結(jié)束 TIME DW 10 DUP(250*50),500*50,250*50,250*50,500*50 ;節(jié)拍表 DW 2 DUP(120*50,120*50,120*50,120*50,250*50,250*50) DW 2 DUP(250*50,250*50,500*50)N EQU 32 ;32個(gè)音符DATA ENDS二實(shí)驗(yàn)?zāi)康模?學(xué)習(xí)8253計(jì)數(shù)器2輸出方波信號(hào)用以驅(qū)動(dòng)揚(yáng)聲器發(fā)聲的原理,通過(guò)程序設(shè)置計(jì)數(shù)器2的輸出波形的頻率和延續(xù)時(shí)間,控制揚(yáng)聲器的音調(diào)和發(fā)生長(zhǎng)短。三.實(shí)驗(yàn)內(nèi)容:1.設(shè)計(jì)程序讓微機(jī)演奏一段兩只老虎的樂(lè)曲。2.思考如何讓PC

29、機(jī)演奏一遍,兩遍以及數(shù)遍這段兩只老虎的樂(lè)曲,并修改程序?qū)崿F(xiàn)。四.實(shí)驗(yàn)報(bào)告:整理出運(yùn)行正確的源程序清單(加以中文注釋),并給出詳細(xì)程序流程圖。三程序代碼DATAS SEGMENTBG DB 0AH,0DH,”TWO TIGER:$” FREQ DW 2 DUP(262,294,330,262) DW 2 DUP(330,349,392) DW 2 DUP(392,440,392,349,330,262) DW 2 DUP(294,196,262),0 ;頻率表TIME DW 10 DUP(250*50),500*50,250*50,250*50,500*50 DW 2 DUP(120*50,12

30、0*50,120*50,120*50,250*50,250*50) DW 2 DUP(250*50,250*50,500*50) NUM DB 3DATAS ENDSSTACK SEGMENT PARA STACK STACK DB 200 DUP(?) ;堆棧段定義并分配存儲(chǔ)空間STACK ENDS ASSUME CS:CODE,DS:DATA,SS:STACKSTAT PROC FAR PUSH DS ;DS中包含的是程序段前綴的起始地址 MOV AX,0 PUSH AX MOV AX ,DATA MOV DS,AX MOV DX,OFFSET BG MOV AH,09 INT 21H ; 輸出字符串“TWO TIGER”LP0: MOV SI,OFFSET FREQ MOV BP,OFFSET TIME CALL SING ;調(diào)用子程序,開(kāi)始演奏 DEC NUM CMP NUM,0 JNZ LP0 RETSTAT ENDPSING PROC NEAR ;演奏子程序 PUSH DI PUSH SI PUSH BP PUSH BXREPTO: MOV DI,SI ;DI指向頻率表首地址 CMP DI,0 JE END_SING 若DI=0,則演奏結(jié)束 MOV BX,DS:BP CALL SOUND ADD SI,2 ADD BP,2 JMP REPTOEN

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論