《匯編語言》課程設(shè)計---用匯編語言進行音樂動畫功能的實現(xiàn)_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

2、括:</p><p>  (1)編寫一個樂曲程序;</p><p>  (2)編寫指令以文本方式在品紅底上顯示5個藍色的笑臉符號;</p><p>  (3)編寫程序,使一只“鳥”飛過屏幕;</p><p>  (4)在模擬游戲程序中用隨機數(shù)來控制其圖形在屏幕移動;</p><p>  (5)編寫驅(qū)動打印機打印字符的程

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

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

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

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

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

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

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

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

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

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

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

14、就拷貝完成了。</p><p><b>  四、設(shè)計框圖</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>  ;----------------------------------------------------- 音樂頻率表和節(jié)拍時間表</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>  ;----------------------------------------------------- 小鳥</p><p>  BIRD_DB DB 'V', 0010B ;綠色小鳥</p&

22、gt;<p>  DB '_', 0010B</p><p>  ;----------------------------------------------------- 隨機數(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 ;要打開的文件的路徑和文件名</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 !' , '$' ;出錯時的提示</p&g

29、t;<p>  finish_MSG DB 0dh,0AH , 'success!$' ;操作成功后的提示</p><p>  HANDLE DW ? ;保存文件代號</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 ;選項輸入</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 ;訪問 FACE</p><p>  JMP START</p><p>  J1: CMP AL,'2'</p><p>  

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

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

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

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

38、p><p>  JNZ START</p><p>  CALL FILE ;訪問 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 ;第一頁</p><p>  MOV BL,01010001B ;品紅背景,藍色笑臉</p><p>  MOV CX,05 ;5個</p><p> 

41、 INT 10H</p><p><b>  RET</b></p><p>  FACE ENDP</p><p>  ;----------------------------------------------------- 音樂</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)播放音樂</p><p>  CMP DI,-1 </p><p>  JE

43、 END_MUS ;為-1結(jié)束</p><p>  MOV BX,DS:[BP]</p><p>  CALL SOUNDF ;訪問發(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 ;對定時器2進行初始化,使其準備接收計數(shù)初值</p>

46、<p>  MOV DX,12H</p><p>  MOV AX,348CH </p><p>  DIV DI ;頻率DX=12H</p><p>  OUT 42H,AL ;42H端口裝入一個16位的計數(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 ;時間延遲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、----------------------------------------------- 小鳥</p><p>  BIRD PROC NEAR ;小鳥子程序</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 ;小鳥起始位置</p><p>  BEGIN_BIR: MOV DH, 8</p><p>  MOV SI, 2</p><p>  MOV CX, 1 ;小鳥個數(shù)</p&g

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

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

55、L, ' ' ;覆蓋小鳥</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 ;延時子程序</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>  ;----------------------------------------------------- 隨機數(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,作隨機數(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,作隨機數(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 ;定義光標位置</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 ;訪問時鐘</p><p>  PUSH

75、 CX</p><p>  PUSH DX</p><p>  PUSH AX</p><p><b>  STI</b></p><p>  MOV AH,0 ;讀時鐘計數(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 ;初始化打印機</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><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、 ;打印一個字符</p><p>  MOV AH,5</p><p>  INT 21H</p><p>  CMP AL,KEY_CR ;是否為回車</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 ;打印標志</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 ;獲取鍵盤狀態(tài)</p><p>

90、;  INT 16H</p><p>  JZ NEXT_COM ;如果ZF=1,沒有按鍵</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 ;向端口通信口寫字符</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=通信口號</p><p>  INT 14H</p><p>  AND AH,1 ;刪掉所

93、有字節(jié),除了D0</p><p>  CMP AH,1 ;數(shù)據(jù)準備是否好</p><p>  JNE AGAIN_COM ;沒有字符,跳到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 ;打開文件</p><p>  INT 21H</p><p>  JC ERROR_FIL ;若打開出錯,轉(zhuǎn)error</p><p>  MOV HANDLE , AX ;保存文件代號</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 ;若讀出錯,轉(zhuǎn)error</p><p>  MOV BX , AX ;實際讀到的字符數(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 ;大寫轉(zhuǎn)小寫,并->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)樾懞?,傳給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 ;寫文件</p><p>  MOV CX , 0</p><p>  MOV AH , 3CH ;創(chuàng)建文件,若磁盤上原有此文件,則覆蓋</p><p>  INT 21H</p><p&g

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

106、BUF2 ;向文件中寫入26個字節(jié)內(nèi)容</p><p>  MOV AH , 40H</p><p>  INT 21H </p><p>  JC ERROR_FIL ;寫出錯,轉(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)閉文件出錯,轉(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 ;顯示錯

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>  飛鳥:</b></p><p><b>  隨機數(shù):</b></p><p><b>  通信:</b></p><p>&l

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

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

溫馨提示

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

評論

0/150

提交評論