

版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 匯編語(yǔ)言課程設(shè)計(jì)--用匯編語(yǔ)言實(shí)現(xiàn)顯示系統(tǒng)時(shí)間的程序
- 匯編語(yǔ)言動(dòng)畫(huà)設(shè)計(jì)課程設(shè)計(jì)
- 匯編語(yǔ)言課程設(shè)計(jì)
- 匯編語(yǔ)言課程設(shè)計(jì)
- 匯編語(yǔ)言課程設(shè)計(jì)報(bào)告
- 匯編語(yǔ)言課程設(shè)計(jì) 音樂(lè)點(diǎn)播程序
- 匯編語(yǔ)言課程設(shè)計(jì)報(bào)告
- 匯編語(yǔ)言課程設(shè)計(jì)安排
- 匯編語(yǔ)言課程設(shè)計(jì)報(bào)告
- 匯編語(yǔ)言課程設(shè)計(jì)報(bào)告a
- 匯編語(yǔ)言推箱子課程設(shè)計(jì)
- 匯編語(yǔ)言課程設(shè)計(jì)----電子鬧鐘
- 打字游戲-匯編語(yǔ)言課程設(shè)計(jì)
- 匯編語(yǔ)言程序設(shè)計(jì)-課程設(shè)計(jì)
- 匯編語(yǔ)言程序設(shè)計(jì)課程設(shè)計(jì)
- 微機(jī)原理與匯編語(yǔ)言課程設(shè)計(jì)
- 匯編語(yǔ)言課程設(shè)計(jì)磁盤(pán)文件管理
- 匯編語(yǔ)言課程設(shè)計(jì)_提取系統(tǒng)時(shí)間
- 匯編語(yǔ)言課程設(shè)計(jì)《定時(shí)顯示系統(tǒng)》
- 匯編語(yǔ)言課程設(shè)計(jì)報(bào)告---打字游戲
評(píng)論
0/150
提交評(píng)論