《匯編語(yǔ)言》課程設(shè)計(jì)---用匯編語(yǔ)言進(jìn)行音樂(lè)動(dòng)畫(huà)功能的實(shí)現(xiàn)_第1頁(yè)
已閱讀1頁(yè),還剩17頁(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)介

1、<p>  《匯編語(yǔ)言》課程設(shè)計(jì) </p><p><b>  設(shè)計(jì)題目</b></p><p>  用匯編語(yǔ)言進(jìn)行音樂(lè)動(dòng)畫(huà)功能的實(shí)現(xiàn)</p><p><b>  設(shè)計(jì)主要功能</b></p><p>  建立一個(gè)菜單,菜單上有7個(gè)功能,根據(jù)選擇的菜單項(xiàng)執(zhí)行相應(yīng)的功能,功能包

2、括:</p><p>  (1)編寫(xiě)一個(gè)樂(lè)曲程序;</p><p>  (2)編寫(xiě)指令以文本方式在品紅底上顯示5個(gè)藍(lán)色的笑臉?lè)?hào);</p><p>  (3)編寫(xiě)程序,使一只“鳥(niǎo)”飛過(guò)屏幕;</p><p>  (4)在模擬游戲程序中用隨機(jī)數(shù)來(lái)控制其圖形在屏幕移動(dòng);</p><p>  (5)編寫(xiě)驅(qū)動(dòng)打印機(jī)打印字符的程

3、序</p><p>  (6)寫(xiě)一個(gè)2臺(tái)計(jì)算機(jī)互相通信的程序,要求只編寫(xiě)近距離通信,傳輸速率和4800波特,字長(zhǎng)8位,終止位1位,無(wú)奇偶校驗(yàn),在A機(jī)上發(fā)送信息“How are you?”,在B 機(jī)上回答“very good!”;</p><p>  (7)編寫(xiě)建立、寫(xiě)入、讀出磁盤(pán)文件的程序;</p><p><b>  三、系統(tǒng)分析與設(shè)計(jì)</b>

4、;</p><p>  編寫(xiě)主程序,在主程序中用數(shù)字標(biāo)出各個(gè)子功能,當(dāng)用戶(hù)從鍵盤(pán)輸入某個(gè)數(shù)字時(shí),就去執(zhí)行相應(yīng)的功能。</p><p>  1. 樂(lè)曲是按照一定的高低、長(zhǎng)短和強(qiáng)弱關(guān)系組成的音調(diào),在一首樂(lè)曲中,每個(gè)音符的高低和音長(zhǎng),與頻率和節(jié)拍有關(guān)。要實(shí)現(xiàn)樂(lè)曲的演奏,可通過(guò)調(diào)用發(fā)聲程序來(lái)達(dá)到輸出音樂(lè)的效果。</p><p>  在程序中,可以設(shè)定兩個(gè)變量分別用來(lái)存儲(chǔ)音符

5、的頻率值和持續(xù)的時(shí)間。音符的頻率可以通過(guò)查閱有關(guān)資料獲得,音符的持續(xù)時(shí)間根據(jù)樂(lè)曲的速度及每個(gè)音符的節(jié)拍數(shù)來(lái)確定。得到了音頻和時(shí)間的關(guān)系,就可以按照樂(lè)曲的曲譜。</p><p>  將每個(gè)音和持續(xù)時(shí)間定義成兩個(gè)數(shù)據(jù)表,然后編寫(xiě)程序依次取出表中的頻率和時(shí)間值,調(diào)用程序發(fā)出聲音。</p><p>  通過(guò)對(duì)計(jì)數(shù)器2設(shè)定不同的值來(lái)得到不同頻率;</p><p>  通過(guò)監(jiān)控

6、端口61H的PB4,使PB4每隔15.08 µS觸發(fā)一次,產(chǎn)生一個(gè)固定的時(shí)間基準(zhǔn)也可以通過(guò)程序來(lái)延遲聲音的時(shí)間。</p><p>  2. 文本的顯示是通過(guò)調(diào)用BIOS 10H的子功能09H來(lái)顯示字符,其中BL中的值為前景和背景彩色屬性值。程序的實(shí)現(xiàn)可分為如下三步:</p><p>  彩色文本方式的屬性字節(jié)的設(shè)置;</p><p>  調(diào)用BIOS下的中

7、斷類(lèi)型10H;</p><p>  使用CX來(lái)控制顯示符號(hào)的個(gè)數(shù)。</p><p>  3. 用小寫(xiě)字母v變?yōu)槠普厶?hào)來(lái)模仿飛鳥(niǎo)的動(dòng)作。調(diào)用BIOS的字符顯示功能 10H,使這兩個(gè)字符先后在兩列顯示,每個(gè)字符顯示固定的時(shí)間后消失。形成鳥(niǎo)飛翔的效果。</p><p>  4. 模擬游戲程序中用隨機(jī)數(shù)來(lái)控制其圖形在屏幕上移動(dòng)。</p><p>  

8、該功能實(shí)現(xiàn)的關(guān)鍵是如何得到一個(gè)隨機(jī)數(shù),隨機(jī)數(shù)的生成是通過(guò)調(diào)用1AH中斷來(lái)訪問(wèn)系統(tǒng)時(shí)間,用這樣的辦法來(lái)實(shí)現(xiàn)隨機(jī)數(shù)種子。</p><p>  然后通過(guò)一些運(yùn)算,如將行、列值分別加上一個(gè)數(shù)字,來(lái)實(shí)現(xiàn)圖形的移動(dòng)。</p><p>  另外,程序的圖形采用多字符組合實(shí)現(xiàn)。</p><p>  首先在屏幕上顯示出來(lái),延遲一個(gè)時(shí)間周期,讓圖形更清晰。然后清除圖形,調(diào)用隨機(jī)數(shù)種子,

9、計(jì)算出下一步圖形的位置,讓圖形在相應(yīng)的位置顯示。循環(huán)執(zhí)行上一步過(guò)程,直到移出屏幕位置為止。</p><p>  5.用戶(hù)從鍵盤(pán)輸入一個(gè)文件,在屏幕上回顯出來(lái)。每輸入一行180個(gè)字符,用戶(hù)檢查一遍,如果用戶(hù)認(rèn)為無(wú)須修改,則鍵入回車(chē),此時(shí)這行字符就存入BUFFER緩沖區(qū)保存,同時(shí)打印機(jī)把這行字符打印出來(lái)并換行。</p><p>  6.計(jì)算機(jī)之間進(jìn)行遠(yuǎn)程通信時(shí),可以用調(diào)制解調(diào)器(MODEM),

10、借助于電話電纜線進(jìn)行,這需要計(jì)算機(jī)串行地發(fā)送或接收數(shù)據(jù)與信息。由于串行數(shù)據(jù)通信使用的傳輸線條數(shù)少,微型機(jī)中已經(jīng)裝有異步接收發(fā)送器8250及一些通信接口,因此兩臺(tái)微型計(jì)算機(jī)之間在進(jìn)行近距離通信時(shí),可以不用調(diào)制解調(diào)器,通過(guò)電纜線直接進(jìn)行串行通信。</p><p>  使用串行通訊口BIOS功能(INT 14H)實(shí)現(xiàn)通信;</p><p>  PC上的串行接口是標(biāo)準(zhǔn)的RS-232接口,串行通訊口

11、BIOS功能INT 14H的AH=0子功能,把指定的串行通訊口初始化,即可進(jìn)行通信。</p><p> ?。?)使用8250中斷方式進(jìn)行通信。</p><p>  IBM PC機(jī)內(nèi)裝有通信適配器板,它使PC機(jī)有能力與其它具有標(biāo)準(zhǔn)RS-232C串行通信接口的計(jì)算機(jī)進(jìn)行通信。PC機(jī)中異步接收發(fā)送器組件8250芯片UART可以完成大多數(shù)串行協(xié)議中的要求, 通過(guò)此芯片實(shí)現(xiàn)異步通信。在通信之前,根據(jù)

12、協(xié)議規(guī)定的波特率、數(shù)據(jù)、停止位等,對(duì)8250進(jìn)行初始化。初始化之后,就可以進(jìn)行發(fā)送和接收數(shù)據(jù)了。</p><p>  7.文件是常用的數(shù)據(jù)存儲(chǔ)形式,也是磁盤(pán)存儲(chǔ)的基本內(nèi)容。用匯編語(yǔ)言可以有效地管理和控制磁盤(pán)資源,建立自己特有的文件并體會(huì)DOS的功能。用匯編語(yǔ)言實(shí)現(xiàn)DOS的TYPE和COPY功能。具體要求是:</p><p>  (1) 讀入一個(gè)文本文件,將大寫(xiě)的字母轉(zhuǎn)換為小寫(xiě)字母并將結(jié)果顯

13、示在屏幕上。</p><p>  對(duì)于讀文件,應(yīng)首先打開(kāi)文件,順序讀取文件內(nèi)容并顯示,同時(shí)將其中的大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母,最后關(guān)閉文件。</p><p>  (2) 將剛轉(zhuǎn)換成小寫(xiě)字母的文件拷貝到另一個(gè)文件中。</p><p>  本功能實(shí)現(xiàn)DOS中的COPY命令,可首先打開(kāi)源文件和目標(biāo)文件,其次順序讀取源文件,將每個(gè)字節(jié)賦給目的文件對(duì)應(yīng)位置,源文件讀完時(shí),目的文件

14、就拷貝完成了。</p><p><b>  四、設(shè)計(jì)框圖</b></p><p><b>  五、程序清單</b></p><p>  DATA SEGMENT</p><p>  ;----------------------------------------------------- 菜單&

15、lt;/p><p>  LIST DB 0DH,0AH</p><p>  DB '******************************',0DH,0AH</p><p>  DB '*Please input: *',0DH,0AH</p>&

16、lt;p>  DB '* 1.Smiling face *',0DH,0AH</p><p>  DB '* 2.Play music *',0DH,0AH</p><p>  DB '* 3.Flying bird *

17、9;,0DH,0AH</p><p>  DB '* 4.random *',0DH,0AH</p><p>  DB '* 5.Printing *',0DH,0AH</p><p>  DB '*

18、 6.Communication*',0DH,0AH</p><p>  DB '* 7.File *',0DH,0AH</p><p>  DB '* 0.Exit *',0DH,0AH</p><p>  DB

19、 '******************************',0DH,0AH,'$'</p><p>  ;----------------------------------------------------- 音樂(lè)頻率表和節(jié)拍時(shí)間表</p><p>  mus_freg dw 330,294,262,294,3 dup(330)

20、</p><p>  dw 3 dup(294),330,392,392</p><p>  dw 330,294,262,294,4 dup(330)</p><p>  dw 294,294,330,294,262,-1</p><p>  mus_time dw 6 dup(250),500</p><p>

21、  dw 2 dup(500,250,500)</p><p>  dw 12 dup(250),1000 </p><p>  ;----------------------------------------------------- 小鳥(niǎo)</p><p>  BIRD_DB DB 'V', 0010B ;綠色小鳥(niǎo)</p&

22、gt;<p>  DB '_', 0010B</p><p>  ;----------------------------------------------------- 隨機(jī)數(shù)</p><p>  RANDOM_DW DW ?</p><p>  RANDOM_HI DB ?</

23、p><p>  RANDOM_WI DB ?</p><p>  ;----------------------------------------------------- 打印</p><p>  INTR_MSG DB 'YOU are using a typer simulator.'</p><

24、;p>  DB 'To quit this program,press Esc',13,10,'$'</p><p>  PROMPT_MSG DB 9EH,10H,'$'</p><p>  KEY_ESC EQU 1BH</p><p>  KEY_CR EQU

25、 0DH</p><p>  KEY_LF EQU 0AH</p><p>  ;-----------------------------------------------------通訊</p><p>  COM_MESSAGE DB 'Serial communication via COM2,4800,no

26、 p,1 stop,8 bit data',0AH,0DH</p><p>  DB 'Any key press is sent to other Pc',0AH,0DH</p><p>  DB 'Press Esc to exit','$'</p><p>  ;-------

27、----------------------------------------------文件</p><p>  FILE1 DB 'd:\masm\1.txt' , 0 ;要打開(kāi)的文件的路徑和文件名</p><p>  FILE2 DB 'd:\masm\2.txt' , 0 ;創(chuàng)建的文件的路徑和文件名&

28、lt;/p><p>  BUF1 DB 256 DUP(0) ;文件內(nèi)容暫存區(qū)</p><p>  BUF2 DB 256 DUP(0) ;文件內(nèi)容暫存區(qū)</p><p>  ERROR_Msg DB 0dh,0AH , 'error !' , '$' ;出錯(cuò)時(shí)的提示</p&g

29、t;<p>  finish_MSG DB 0dh,0AH , 'success!$' ;操作成功后的提示</p><p>  HANDLE DW ? ;保存文件代號(hào)</p><p>  ;--------------------------------------------------

30、---</p><p>  DATA ENDS</p><p>  ;----------------------------------------------------- </p><p>  CODE SEGMENT</p><p>  ASSUME CS:CODE,DS:DATA</p><p> 

31、 MAIN PROC NEAR ;主程序</p><p>  START: MOV AX,DATA</p><p>  MOV DS,AX</p><p>  MOV AH,09</p><p>  LEA DX,LIST ;輸出菜單</p>&l

32、t;p>  INT 21H</p><p>  MOV AH,01H ;選項(xiàng)輸入</p><p>  INT 21H</p><p>  CMP AL,'0'</p><p>  JZ EXIT</p><p>  CMP

33、 AL,'1'</p><p>  JNZ J1</p><p>  CALL FACE ;訪問(wèn) FACE</p><p>  JMP START</p><p>  J1: CMP AL,'2'</p><p>  

34、JNZ J2</p><p>  CALL MUSIC ;訪問(wèn) MUSIC</p><p>  JMP START</p><p>  J2: CMP AL,'3'</p><p>  JNZ J3</p><p>  CALL

35、 BIRD ;訪問(wèn) BIRD</p><p>  JMP START</p><p>  J3: CMP AL,'4'</p><p>  JNZ J4</p><p>  CALL RANDOM ;訪問(wèn) RANDOM</p>&l

36、t;p>  JMP START</p><p>  J4: CMP AL,'5'</p><p>  JNZ J5</p><p>  CALL PRINTING ;訪問(wèn) PRINTING</p><p>  JMP START</p>&l

37、t;p>  J5: CMP AL,'6'</p><p>  JNZ J6</p><p>  CALL COM ;訪問(wèn) COM</p><p>  JMP START</p><p>  J6: CMP AL,'7'</

38、p><p>  JNZ START</p><p>  CALL FILE ;訪問(wèn) FILE</p><p>  JMP START</p><p>  EXIT: MOV AH,4CH</p><p>  INT 21H</p>&l

39、t;p>  MAIN ENDP</p><p>  ;----------------------------------------------------- 笑臉</p><p>  FACE PROC NEAR</p><p>  MOV DS,AX</p><p>  MOV AH,09

40、 </p><p>  MOV AL,01 ;笑臉字符</p><p>  MOV BH,0 ;第一頁(yè)</p><p>  MOV BL,01010001B ;品紅背景,藍(lán)色笑臉</p><p>  MOV CX,05 ;5個(gè)</p><p> 

41、 INT 10H</p><p><b>  RET</b></p><p>  FACE ENDP</p><p>  ;----------------------------------------------------- 音樂(lè)</p><p>  MUSIC PROC NEAR<

42、/p><p>  LEA SI,DS:MUS_FREG </p><p>  LEA BP,DS:MUS_TIME</p><p>  FREQ: MOV DI,[SI] ;循環(huán)播放音樂(lè)</p><p>  CMP DI,-1 </p><p>  JE

43、 END_MUS ;為-1結(jié)束</p><p>  MOV BX,DS:[BP]</p><p>  CALL SOUNDF ;訪問(wèn)發(fā)聲程序</p><p>  ADD SI,2</p><p>  ADD BP,2</p><p>  JMP

44、 FREQ</p><p>  END_MUS: RET</p><p>  MUSIC ENDP</p><p>  SOUNDF PROC NEAR ;發(fā)聲程序</p><p>  PUSH AX</p><p>  PUSH BX</p><p&g

45、t;  PUSH CX</p><p>  PUSH DX</p><p>  PUSH DI</p><p>  MOV AL,0B6H ;(10110110B)</p><p>  OUT 43H,AL ;對(duì)定時(shí)器2進(jìn)行初始化,使其準(zhǔn)備接收計(jì)數(shù)初值</p>

46、<p>  MOV DX,12H</p><p>  MOV AX,348CH </p><p>  DIV DI ;頻率DX=12H</p><p>  OUT 42H,AL ;42H端口裝入一個(gè)16位的計(jì)數(shù)值(533*896/頻率),以建立將要產(chǎn)生的聲音的頻率<

47、;/p><p>  MOV AL,AH</p><p>  OUT 42H,AL</p><p>  IN AL,61H</p><p>  MOV AH,AL</p><p>  OR AL,3 ;把61H的0,1兩位置1,發(fā)出聲音</

48、p><p>  OUT 61H,AL</p><p>  MOV BX,10000</p><p>  WAIT_mus: MOV CX,8FF0H </p><p>  DELAY: LOOP DELAY ;時(shí)間延遲loop執(zhí)行100000*8ff0h次</p>

49、<p>  DEC BX</p><p>  JNZ WAIT_mus</p><p>  MOV AL,AH</p><p>  OUT 61H,AL ;恢復(fù)端口</p><p>  POP DI</p><p>  POP

50、 DX</p><p>  POP CX</p><p>  POP BX</p><p>  POP AX</p><p><b>  RET</b></p><p>  SOUNDF ENDP</p><p>  ;------

51、----------------------------------------------- 小鳥(niǎo)</p><p>  BIRD PROC NEAR ;小鳥(niǎo)子程序</p><p>  MOV AH, 0 ;設(shè)置300*200彩色圖形方式</p><p>  MOV AL, 3</p>&l

52、t;p>  INT 10H</p><p>  MOV DL, 1 ;小鳥(niǎo)起始位置</p><p>  BEGIN_BIR: MOV DH, 8</p><p>  MOV SI, 2</p><p>  MOV CX, 1 ;小鳥(niǎo)個(gè)數(shù)</p&g

53、t;<p>  LEA DI, BIRD_DB ;DI指向小鳥(niǎo)字符表的首字母</p><p>  DISP_BIR: INC DH</p><p>  MOV AH, 2 ;設(shè)置光標(biāo)位置</p><p>  INT 10H</p><p>  MOV AH

54、, 9 ;顯示小鳥(niǎo)字符V</p><p>  MOV AL, [DI]</p><p>  MOV BL, [DI+1]</p><p>  INT 10H</p><p>  CALL DLY_BIR ;延時(shí)</p><p>  MOV A

55、L, ' ' ;覆蓋小鳥(niǎo)</p><p>  MOV BL, 0</p><p>  INT 10H</p><p>  ADD DI, 2</p><p>  INC DL</p><p>  CMP DL, 80 ;看是否

56、到邊界</p><p>  JAE EXIT_BIR ;是,退出</p><p>  DEC SI</p><p>  JNZ DISP_BIR</p><p>  JMP BEGIN_BIR</p><p>  EXIT_BIR: RET</p>

57、<p>  BIRD ENDP</p><p>  DLY_BIR PROC NEAR ;延時(shí)子程序</p><p>  PUSH CX</p><p>  PUSH DX</p><p>  MOV DX, 10000</p><p>  DL1:

58、 MOV CX, 6801</p><p>  DL2: LOOP DL2 ;10000*6801</p><p>  DEC DX</p><p>  JNZ DL1</p><p>  POP DX</p><p>  POP

59、 CX</p><p><b>  RET</b></p><p>  DLY_BIR ENDP</p><p>  ;----------------------------------------------------- 隨機(jī)數(shù)</p><p>  RANDOM PROC NEAR</p>

60、<p>  MOV SI,10</p><p>  MOV AH,0 ;設(shè)置屏幕</p><p>  MOV AL,03 ;25*80,16色文本</p><p>  INT 10H </p><p> 

61、 DISP_RAN: MOV AX,DATA</p><p>  MOV DS,AX </p><p>  CALL RAND </p><p>  MOV AX,RANDOM_DW</p><p>  AND AH,

62、3 ;清高6位</p><p>  MOV DL, 25</p><p>  DIV DL</p><p>  MOV RANDOM_HI,AH ;除25,余數(shù)存hi,作隨機(jī)數(shù)</p><p>  MOV AX,RANDOM_DW</p>&

63、lt;p>  AND AH,1 ;清高7位</p><p>  MOV DL,80</p><p>  DIV DL</p><p>  MOV RANDOM_WI,AH ;除80,余數(shù)存wi,作隨機(jī)數(shù)</p><p>  MOV DH,

64、RANDOM_HI</p><p>  MOV DL,RANDOM_WI</p><p>  MOV AH,2 </p><p>  MOV BH,0</p><p>  INT 10H</p><p>  MOV AH,9</p><

65、;p>  MOV AL,'*' ;顯示*</p><p>  MOV BH,0</p><p>  MOV BL,5</p><p>  MOV CX,1</p><p>  INT 10H</p><p>  

66、MOV BX,20</p><p>  DELAY_RAN: MOV CX,20000 ;延遲</p><p>  CALL WAITF_RAN</p><p>  DEC BX</p><p>  JNZ DELAY_RAN</p><p>  JM

67、P NEXT</p><p>  WAITF_RAN PROC NEAR</p><p>  PUSH AX</p><p>  WAITF_RAN_0:</p><p>  IN AL,61H</p><p>  AND AL,10H</p>

68、<p>  CMP AL,AH</p><p>  JE WAITF_RAN_0</p><p>  MOV AH,AL</p><p>  LOOP WAITF_RAN_0</p><p>  POP AX</p><p><b>  R

69、ET</b></p><p>  WAITF_RAN ENDP</p><p>  NEXT: CALL CLEAR_SCR</p><p>  DEC SI</p><p>  JZ EXIT_RAN</p><p>  JMP DISP_RAN<

70、/p><p>  EXIT_RAN: CALL MAIN</p><p>  RANDOM ENDP</p><p>  CLEAR_SCR PROC NEAR ;清屏</p><p>  PUSH AX</p><p>  PUSH BX</p><p

71、>  PUSH CX</p><p>  PUSH DX</p><p>  MOV AH,6 ;卷屏</p><p>  MOV AL,0 ;黑屏</p><p>  MOV BH,7 ;黑線</p><p

72、>  MOV CH,0 ;左上行</p><p>  MOV CL,0 ;左上列</p><p>  MOV DH,24 ;右下行</p><p>  MOV DL,79 ;右下列</p><p>  INT

73、10H</p><p>  MOV DX,0 ;定義光標(biāo)位置</p><p>  MOV AH,2</p><p>  INT 10H</p><p>  POP DX</p><p>  POP CX</p><p>

74、;  POP BX</p><p>  POP AX</p><p><b>  RET</b></p><p>  CLEAR_SCR ENDP</p><p>  RAND PROC NEAR ;訪問(wèn)時(shí)鐘</p><p>  PUSH

75、 CX</p><p>  PUSH DX</p><p>  PUSH AX</p><p><b>  STI</b></p><p>  MOV AH,0 ;讀時(shí)鐘計(jì)數(shù)器值</p><p>  INT 1AH</p>

76、<p>  MOV RANDOM_DW,DX ;(DH:DL=秒:1/100秒)</p><p>  POP AX</p><p>  POP DX</p><p>  POP CX</p><p><b>  RET</b></p><p

77、>  RAND ENDP</p><p>  ;----------------------------------------------------- 打印</p><p>  PRINT MACRO STR_ADDR ;宏定義顯示信息</p><p>  PUSH DX</p><p>  PU

78、SH AX</p><p>  LEA DX,STR_ADDR </p><p>  MOV AH,09 </p><p>  INT 21H</p><p>  POP AX</p><p>  POP DX</p>

79、;<p><b>  ENDM</b></p><p>  PRINTING PROC NEAR </p><p>  MOV AH,0 ;設(shè)置屏幕</p><p>  MOV AL,02 ;25*80黑白文本</p><p&g

80、t;  INT 10H </p><p>  STI </p><p><b>  CLD</b></p><p>  MOV AH,0 ;初始化打印機(jī)</p><p>  MOV DX,0<

81、;/p><p>  INT 17H </p><p>  MOV AX,DATA</p><p>  MOV DS,AX</p><p>  MOV DX,0 ;顯示輸出</p><p>  MOV AH,2</p

82、><p>  INT 21H</p><p>  PRINT INTR_MSG</p><p>  PRINT PROMPT_MSG</p><p>  GET_CHAR: MOV AH,1 ;鍵盤(pán)輸入字符</p><p>  INT 21H&l

83、t;/p><p>  CMP AL,0</p><p>  JZ GET_CHAR</p><p>  CMP AL,KEY_ESC ;是否位ESC</p><p>  JZ PRINT_EXIT</p><p>  MOV DL,AL

84、 ;打印一個(gè)字符</p><p>  MOV AH,5</p><p>  INT 21H</p><p>  CMP AL,KEY_CR ;是否為回車(chē)</p><p>  JNZ GET_CHAR</p><p>  MOV DL,K

85、EY_LF ;換行</p><p>  MOV AH,2 ;顯示換行</p><p>  INT 21H </p><p>  MOV AH,5 ;打印換行</p><p>  INT 21H</p&g

86、t;<p>  PRINT PROMPT_MSG ;打印標(biāo)志</p><p>  JMP GET_CHAR</p><p>  print_EXIT:</p><p><b>  RET</b></p><p>  PRINTING ENDP</p><

87、p>  ;----------------------------------------------------- 通訊</p><p>  COM PROC NEAR</p><p>  MOV AX,DATA</p><p>  MOV DS,AX</p><p>  MOV AH,

88、09 ; 顯示信息</p><p>  MOV DX,OFFSET COM_MESSAGE</p><p>  INT 21H</p><p>  MOV AH,0 ;初始化COM端口</p><p>  MOV DX,1

89、 ;COM2</p><p>  MOV AL,0C3H ;4800,n,1,8</p><p>  INT 14H</p><p>  AGAIN_COM: MOV AH,01 ;獲取鍵盤(pán)狀態(tài)</p><p>

90、;  INT 16H</p><p>  JZ NEXT_COM ;如果ZF=1,沒(méi)有按鍵</p><p>  MOV AH,0 ;有按鍵,取之</p><p>  INT 16H</p><p>  CMP AL,1BH

91、 ;是否為ESC</p><p>  JE EXIT_COM</p><p>  MOV AH,1 ;向端口通信口寫(xiě)字符</p><p>  MOV DX,1</p><p>  INT 14H</p><p

92、>  NEXT_COM: MOV AH,3 ;取COM通信口狀態(tài)</p><p>  MOV DX,1 ;DX=通信口號(hào)</p><p>  INT 14H</p><p>  AND AH,1 ;刪掉所

93、有字節(jié),除了D0</p><p>  CMP AH,1 ;數(shù)據(jù)準(zhǔn)備是否好</p><p>  JNE AGAIN_COM ;沒(méi)有字符,跳到AGAIN_COM</p><p>  MOV AH,2 ;是,從端口COM2通信口讀字符<

94、;/p><p>  MOV DX,1</p><p>  INT 14H</p><p>  MOV DL,AL</p><p>  MOV AH,2 ;輸出字符</p><p>  INT 21H</p><

95、;p>  JMP AGAIN_COM</p><p>  EXIT_COM: RET</p><p><b>  COM ENDP</b></p><p>  ;----------------------------------------------------- 文件</p><p>  FI

96、LE PROC NEAR</p><p>  READ: MOV AX , DATA ;讀文件</p><p>  MOV DS , AX</p><p>  MOV DX , OFFSET FILE1</p><p>  MOV AL , 0</p><p

97、>  MOV AH , 3DH ;打開(kāi)文件</p><p>  INT 21H</p><p>  JC ERROR_FIL ;若打開(kāi)出錯(cuò),轉(zhuǎn)error</p><p>  MOV HANDLE , AX ;保存文件代號(hào)</p><p>  MOV BX ,

98、 AX</p><p>  MOV CX , 255</p><p>  MOV DX , OFFSET BUF1</p><p>  MOV AH , 3FH ;從文件中讀255字節(jié)→buf</p><p>  INT 21H</p><p>  JC

99、 ERROR_FIL ;若讀出錯(cuò),轉(zhuǎn)error</p><p>  MOV BX , AX ;實(shí)際讀到的字符數(shù)送入bx</p><p>  MOV BUF1[BX] , '$' ;在文件結(jié)束處放置一“$”結(jié)束符</p><p>  MOV BX , HANDLE</p&

100、gt;<p>  MOV AH , 3EH ;關(guān)閉文件</p><p>  INT 21H</p><p>  MOV SI , -1</p><p>  EXCHANGE: INC SI ;大寫(xiě)轉(zhuǎn)小寫(xiě),并->BUF2</p><p>  MOV

101、 AL ,BUF1[SI]</p><p>  CMP AL, 'A'</p><p>  JB chuan_FIL</p><p>  CMP AL,'Z'</p><p>  JG chuan_FIL</p><p>  A

102、DD AL , 20H</p><p>  MOV BUF1[SI], AL</p><p>  chuan_FIL: MOV BH, BUF1[SI]</p><p>  MOV BUF2[SI] ,BH ;把字符變?yōu)樾?xiě)后,傳給BUF2</p><p>  CMP bh ,&

103、#39;$' ;是否結(jié)束?</p><p>  Jnz EXCHANGE</p><p>  MOV DX , OFFSET BUF2 ;在屏幕顯示文件FILE1的內(nèi)容</p><p>  MOV AH , 9</p><p>  INT 21H</p&

104、gt;<p>  WRITE: MOV DX , OFFSET FILE2 ;寫(xiě)文件</p><p>  MOV CX , 0</p><p>  MOV AH , 3CH ;創(chuàng)建文件,若磁盤(pán)上原有此文件,則覆蓋</p><p>  INT 21H</p><p&g

105、t;  JC ERROR_FIL ;創(chuàng)建出錯(cuò),轉(zhuǎn)error處</p><p>  MOV HANDLE , AX ;保存文件代號(hào)</p><p>  MOV BX , AX</p><p>  MOV CX , si</p><p>  MOV DX , OFFSET

106、BUF2 ;向文件中寫(xiě)入26個(gè)字節(jié)內(nèi)容</p><p>  MOV AH , 40H</p><p>  INT 21H </p><p>  JC ERROR_FIL ;寫(xiě)出錯(cuò),轉(zhuǎn)error處</p><p>  MOV BX , HANDLE&l

107、t;/p><p>  MOV AH , 3EH ;關(guān)閉文件</p><p>  INT 21H</p><p>  JC ERROR_FIL ;關(guān)閉文件出錯(cuò),轉(zhuǎn)error處</p><p>  MOV DX , OFFSET finish_MSG</p><p

108、>  MOV AH , 9</p><p>  INT 21H ;操作成功后顯示提示</p><p>  JMP EXIT_FIL</p><p>  error_FIL:</p><p>  MOV DX , OFFSET ERROR_MSG ;顯示錯(cuò)

109、誤提示</p><p>  MOV AH , 9</p><p>  INT 21H</p><p>  EXIT_FIL: RET</p><p>  FILE ENDP</p><p>  ;------------------------------------------------

110、-----</p><p>  CODE ENDS</p><p>  END START</p><p>  ;-----------------------------------------------------</p><p>  六、程序執(zhí)行結(jié)果的屏幕拷貝</p><p><b> 

111、 選擇界面:</b></p><p><b>  笑臉:</b></p><p><b>  飛鳥(niǎo):</b></p><p><b>  隨機(jī)數(shù):</b></p><p><b>  通信:</b></p><p>&l

112、t;b>  打印:</b></p><p><b>  文件:</b></p><p><b>  七、設(shè)計(jì)分析:</b></p><p>  本次試驗(yàn)的難點(diǎn)在于調(diào)用功能的實(shí)現(xiàn),即bios中斷調(diào)用的實(shí)現(xiàn)。我們還設(shè)計(jì)到了子程序的調(diào)用,本程序可以把所有的小的調(diào)用全寫(xiě)成子程序,然后主程序中調(diào)用,跟那些高級(jí)語(yǔ)言一

113、樣。然而我已經(jīng)寫(xiě)完,就不再改動(dòng)了。</p><p><b>  八、設(shè)計(jì)總結(jié):</b></p><p>  本次試驗(yàn)考查了我們綜合實(shí)驗(yàn)的能力,bios調(diào)用是十分常見(jiàn)的,然而在做這個(gè)程序的時(shí)候,明顯感覺(jué)到自己還有很多欠缺的地方。我得許多程序全是查資料寫(xiě)的,沒(méi)有說(shuō)自己就可以編出來(lái),說(shuō)明自己還有待提高。這個(gè)程序使我加深了對(duì)于循環(huán)和分之的認(rèn)識(shí)。</p><

溫馨提示

  • 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ù)僅提供信息存儲(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)論