版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 匯編語言課程設(shè)計(jì)報(bào)告</p><p> 課程名稱: 匯編語言課程設(shè)計(jì) </p><p> 設(shè)計(jì)題目: 顯示系統(tǒng)時(shí)間 </p><p> 院 系: 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院</p><p> 班 級: </p><p> 設(shè)
2、計(jì) 者: </p><p> 學(xué) 號: </p><p> 序 號: </p><p> 指導(dǎo)教師: </p><p> 設(shè)計(jì)時(shí)間: 2009.06.08-2009.06.1
3、9</p><p><b> 目錄</b></p><p><b> 課程設(shè)計(jì)題目</b></p><p><b> 課程設(shè)計(jì)內(nèi)容</b></p><p><b> 設(shè)計(jì)目的</b></p><p><b> 設(shè)
4、計(jì)圖形</b></p><p><b> 源代碼</b></p><p><b> 運(yùn)行界面</b></p><p><b> 感想體會</b></p><p><b> 課程設(shè)計(jì)目的。</b></p><p>
5、 1. 掌握中斷的使用方法。</p><p> 2. 掌握BIOS系統(tǒng)功能調(diào)用。</p><p> 3. 掌握基本的顯存讀寫技術(shù)。</p><p> 4. 學(xué)會用匯編語言編寫一個(gè)較完整的實(shí)用程序, 培養(yǎng)自己的動手操作能力。</p><p> 5&
6、#160;. 學(xué)習(xí)程序設(shè)計(jì)的基本思路和方法,編程、調(diào)試、撰寫報(bào)告等。</p><p> 二、程序內(nèi)容: 第一部分:定義顯示界面。 第二部分:調(diào)用系統(tǒng)時(shí)間,并將調(diào)用的用二進(jìn)制表示的時(shí)間數(shù)轉(zhuǎn)換成ASCII碼,并將時(shí)間數(shù)存入顯存區(qū)。(顯存的起始地址:B8000H) 第三部分:將存在系統(tǒng)內(nèi)存區(qū)的時(shí)間用字符串的形式顯示出來。</p><p> 第四部分:定時(shí)響鈴功能,
7、指定時(shí)間和倒計(jì)時(shí)。響鈴為一首自寫音樂。</p><p> 注意:1、如果用圖形方式顯示更好,</p><p> 2、注意設(shè)置顯示時(shí)候的背景顏色</p><p> 3、可以增加鍵盤設(shè)置的功能,設(shè)置顯示顏色,顯示位置</p><p> 4、鬧鈴如果不關(guān)閉,可以設(shè)置為間隔1分鐘再響三、程序設(shè)計(jì)原理 首先在數(shù)據(jù)段開辟一顯示緩沖區(qū),用
8、來存儲系統(tǒng)時(shí)間。調(diào)用BIOS中斷,返回系統(tǒng)時(shí)間,并將來返回的二進(jìn)制時(shí)間轉(zhuǎn)換成ASCII碼,方便時(shí)間顯示時(shí)的調(diào)用。分別將來小時(shí)數(shù)、分鐘數(shù)、秒數(shù)存入顯示緩沖區(qū)。通過寫顯存將時(shí)間顯示出來。由于獲取了的系統(tǒng)時(shí)間不會自動刷新,所以我們要設(shè)計(jì)成刷新的方式來不斷獲取系統(tǒng)的時(shí)間,這樣就形成了會跳動的電子鐘了。定時(shí)功能主要指定一個(gè)報(bào)警時(shí)間作為比較,到了需要響鈴時(shí)間調(diào)用一個(gè)音樂程序表示時(shí)間到。</p><p><b>
9、四、程序流程圖</b></p><p> 圖一 主程序流程圖 圖二 中斷處理程序流程圖 </p><p><b> 五、程序代碼</b></p><p> eraserScreen macro ab ;;清除過時(shí)顯示的時(shí)間</p><p><b> pus
10、h ax</b></p><p> push cx </p><p> push bx </p><p> mov bx ,cloAddre ;;當(dāng)前地址 </p><p> sub bx,ab ;;得按鍵前地址</p><p> mov ax,0b
11、800h </p><p> mov es,ax </p><p><b> mov di,bx</b></p><p> lea si,blank</p><p> call disptime</p><p> pop bx </p>&l
12、t;p><b> pop cx</b></p><p><b> pop ax</b></p><p><b> endm</b></p><p> clearscreen macro clor ;;相當(dāng)于清屏 ,指定顏色 </p><p>
13、;<b> push cx</b></p><p><b> push si</b></p><p><b> push di</b></p><p><b> mov cx,1</b></p><p> lea si, blank</p
14、><p> writechar 0,0,clor,2000 </p><p><b> pop di</b></p><p><b> pop si</b></p><p><b> pop cx </b></p><p> endm
15、 </p><p> writechar macro arra,row,color,cc ;;在指定位置寫入數(shù)據(jù)</p><p><b> local LP </b></p><p> mov dl,arra ;;第幾列 </p><p> LP: mov dh ,row
16、 ;;第幾行</p><p> mov ah,02 ;;設(shè)置位置</p><p><b> mov bh, 0</b></p><p><b> int 10h </b></p><p> mov al,[si]</p>&
17、lt;p> mov ah,09h </p><p> mov bl,color ;;顏色</p><p><b> push cx</b></p><p><b> mov cx,cc</b></p><p><b> int 1
18、0h</b></p><p><b> add si,1</b></p><p><b> add dl,1</b></p><p><b> pop cx</b></p><p> loop LP </p><p><b
19、> endm </b></p><p> .model small</p><p><b> .stack</b></p><p><b> .data </b></p><p> ; -------------------------------------------
20、---------------學(xué)生個(gè)人信息</p><p> MESS1 DB 0DH,0AH,0DH,0AH,0DH,0AH</p><p> DB 9,9,9,'------------------------------',0DH,0AH ;0DH,0AH是回車換行的意思 </p><p> DB 9,9,9,'| Stude
21、nts',33,' information |',0DH,0AH </p><p> DB 9,9,9,'| name: zhangshuguang |',0DH,0AH </p><p> DB 9,9,9,'| class: three |',0DH,0AH
22、 </p><p> DB 9,9,9,'| Grade: Tow |',0DH,0AH </p><p> DB 9,9,9, '| Number: 200700172 |',0DH,0AH </p><p> DB 9,9,9,'---------------
23、---------------- ',0DH,0AH,'$' </p><p> MSG1 DB 0DH,0AH,9,9,9,'press any key to continue.....',0DH,0AH,'$' ;提示信息 </p><p> ; ---------------------------------------
24、------------------- 菜單 </p><p> MESS2 DB 0DH,0AH,0DH,0AH,0DH,0AH</p><p> db 9,9,9,'-------------------------------',0DH,0AH </p><p> DB 9,9,9,'| 1- Create a mu
25、sic |',0DH,0AH </p><p> DB 9,9,9,'| 2- Time to ring a bell |',0DH,0AH </p><p> DB 9,9,9,'| 3- Exit |',0DH,0AH </p><p> DB
26、9,9,9,'------------------------------- ',0DH,0AH,'$'</p><p> MSG2 DB 0DH,0AH,9,9,9,' PRESS [1 OR 2 OR 3 ]',0DH,0AH,'$' ;提示信息 </p><p> ; --------------------
27、-------------------------------------- 變量數(shù)據(jù) </p><p> showMusicBook DB 0DH,0AH,0DH,0AH,0DH,0AH</p><p> db 9,9,9 ,'PRESS [#] TO CONCLUDE',0DH,0AH</p><p> db 9, '
28、;The Music book is: ','$' </p><p> showMSG db 'PRESS [Q] TO STOP THE CLOCK',0DH,0AH </p><p> db 'PRESS [ESC] TO EXIT',0DH,0AH </p><p> db 'PR
29、ESS [B] TO BACK THR MAIN MU' ,'$'</p><p> cloAddre dw 850h</p><p> msgdown db 'the last:',?,' ','S'</p><p> len equ $-msgdown</p><
30、p> blank db 25 dup(' '),0,0</p><p> msgring db ' Ring Ok!',10 dup(' ')</p><p> music db '337665654444334555666#'</p><p> INITAB dw 8E5H,7F
31、4H,6ADH,5F1H,54BH,4B7H,472H </p><p> setTime db 'Please set the time to ring','$'</p><p> timer0 db ?,?</p><p> timer1 db 0ffh</p><p> sign d
32、b 0 </p><p> year db ?,?,?,?</p><p><b> db '/' </b></p><p> mounth db ?,?</p><p><b> db '/'</b></p><p>
33、 day db ?,?,0,0</p><p> msg db ' The time is: ' </p><p> time0 db ?,?</p><p><b> db ':'</b></p><p> time1 db ?,? </p>
34、<p><b> db ':'</b></p><p> time2 db ?,?,0,0</p><p><b> .code</b></p><p><b> .startup </b></p><p> ; ----------
35、------------------------------------------------程序開始</p><p> MOV AH,09H </p><p> LEA DX, MESS1 </p><p><b> INT 21H </b></p><p> MOV AH,09H &
36、lt;/p><p> LEA DX, MSG1 </p><p> INT 21H </p><p> mov ah,07h </p><p><b> int 21H</b></p><p> START0: clearscreen 6fh&
37、lt;/p><p> mov ah,09h</p><p> lea DX,MESS2</p><p><b> INT 21H </b></p><p> LEA DX, MSG2 ;顯示提示信息 MSG2 </p><p><b> INT 21H
38、 </b></p><p> LOP1: MOV AH,08H ;從標(biāo)準(zhǔn)輸入設(shè)備輸入一個(gè)字符,在此是用戶輸入所選菜單 </p><p><b> INT 21H </b></p><p> ;-------------------------------判斷從鍵盤輸入的選項(xiàng) </p&
39、gt;<p><b> PUSH AX </b></p><p> CMP AL,'3' </p><p><b> JZ C3 </b></p><p><b> POP AX </b></p><p> PUSH AX
40、</p><p> CMP AL,'1' ; JZ (相等的時(shí)候跳轉(zhuǎn)) </p><p> JZ C1 ;若等于1,則跳轉(zhuǎn)到C1 </p><p> POP AX ;否則AX出棧,并與2比較 </p><p><b> PUSH AX </b&
41、gt;</p><p> CMP AL,'2' </p><p><b> JZ C2 </b></p><p><b> POP AX </b></p><p> JMP LOP1 ;否則跳轉(zhuǎn)到LOP1,即重新輸入一個(gè)字符(1/2/3) </p>
42、;<p> ;----------------------------------------------------------------------- 此為前面所要跳轉(zhuǎn)的程序</p><p> C1: clearscreen 6fh</p><p> call creatMiusic ;創(chuàng)作鈴聲</p><p> mov
43、 byte ptr sign,1 ;鬧鈴開啟</p><p> call clock</p><p> mov byte ptr sign,0 ;鬧鈴關(guān)閉</p><p> JMP START0</p><p> C2: JMP START1</p><p> C3: JMP over
44、</p><p> ;----------------------------------------------- 設(shè)置鬧鐘鬧鈴時(shí)間</p><p> START1: clearscreen 6fh</p><p><b> push dx</b></p><p><b> push bx</
45、b></p><p> mov dl,10 ;第幾列 </p><p> mov dh ,5 ;設(shè)置光標(biāo)位置</p><p><b> mov ah,02</b></p><p><b> mov bh, 0</b></p>&
46、lt;p><b> int 10h</b></p><p> lea dx, setTime</p><p> mov ah,09h</p><p><b> int 21h</b></p><p><b> pop bx</b></p><
47、p><b> pop dx</b></p><p><b> push si</b></p><p><b> push cx</b></p><p> lea si,timer0 </p><p><b> mov cx ,2</b>&l
48、t;/p><p> ;-----------;輸入需鬧鈴時(shí)間</p><p> input: mov ah,02h </p><p> mov dl,':' ;冒號輸出</p><p><b> int 21h</b></p><p> mov ah,01
49、h</p><p><b> int 21h</b></p><p> ;-------- ;以下為輸入有效值的判斷,時(shí)針在00-23有效,分針在00-59有效</p><p> .if cx==2 ;輸入時(shí)高位 </p><p> .if al>'2' </p>
50、<p><b> pop cx</b></p><p><b> pop si</b></p><p> jmp START1</p><p> .elseif al<'0'</p><p><b> pop cx</b></
51、p><p><b> pop si</b></p><p> jmp START1</p><p><b> .else</b></p><p><b> mov bl,al</b></p><p><b> .endif</b&
52、gt;</p><p><b> .else</b></p><p> .if al>'5'</p><p><b> pop cx</b></p><p><b> pop si </b></p><p> jmp S
53、TART1</p><p> .elseif al<'0'</p><p><b> pop cx</b></p><p><b> pop si</b></p><p> jmp START1</p><p><b> .else
54、</b></p><p><b> mov bl,al</b></p><p><b> .endif</b></p><p><b> .endif</b></p><p><b> int 21h</b></p>&l
55、t;p> .if cx==2 ;輸入時(shí)低位 </p><p> .if bl=='2' ;若高位為2,則地位有效輸入為0-3</p><p> .if al>'3'</p><p><b> pop cx</b></p><p><b>
56、pop si</b></p><p> jmp START1</p><p> .elseif al<'0'</p><p><b> pop cx</b></p><p><b> pop si</b></p><p> jmp
57、 START1</p><p><b> .else</b></p><p> sub al,'0'</p><p> sub bl,'0'</p><p><b> push cx</b></p><p><b> mo
58、v cl,4</b></p><p><b> shl bl,cl</b></p><p><b> pop cx</b></p><p><b> add bl,al</b></p><p> mov byte ptr [si],bl</p>
59、<p><b> add si,1 </b></p><p><b> .endif</b></p><p><b> .else</b></p><p> .if al>'9'</p><p><b> pop cx<
60、;/b></p><p><b> pop si</b></p><p> jmp START1</p><p> .elseif al<'0'</p><p><b> pop cx</b></p><p><b> pop
61、 si</b></p><p> jmp START1</p><p><b> .else</b></p><p> sub al,'0'</p><p> sub bl,'0'</p><p><b> push cx</
62、b></p><p><b> mov cl,4</b></p><p><b> shl bl,cl</b></p><p><b> pop cx</b></p><p><b> add bl,al</b></p><
63、;p> mov byte ptr [si],bl</p><p><b> add si,1 </b></p><p><b> .endif</b></p><p><b> .endif</b></p><p><b> .else</b&g
64、t;</p><p> .if al>'9'</p><p><b> pop cx</b></p><p><b> pop si</b></p><p> jmp START1</p><p> .elseif al<'0&
65、#39;</p><p><b> pop cx</b></p><p><b> pop si</b></p><p> jmp START1</p><p><b> .else</b></p><p> sub al,'0
66、9;</p><p> sub bl,'0'</p><p><b> push cx</b></p><p><b> mov cl,4</b></p><p><b> shl bl,cl</b></p><p><b&
67、gt; pop cx</b></p><p><b> add bl,al</b></p><p> mov byte ptr [si],bl</p><p><b> add si,1 </b></p><p><b> .endif</b></p
68、><p><b> .endif</b></p><p><b> dec cx</b></p><p><b> jnz input</b></p><p> startcha: PUSH DX</p><p><b> PUSH B
69、X</b></p><p> mov dl,0 ;第幾列 </p><p> mov dh ,0;設(shè)置光標(biāo)位置</p><p><b> mov ah,02</b></p><p><b> mov bh, 0</b></p><p><b>
70、 int 10h</b></p><p><b> POP BX</b></p><p><b> POP DX</b></p><p> mov dx,offset showMSG</p><p> mov ah,09h</p><p><b&g
71、t; int 21h</b></p><p> ; ---------------------------------------------------------- 讀取系統(tǒng)時(shí)間 </p><p> startloop: </p><p><b> push cx</b></p><p&
72、gt;<b> push dx</b></p><p><b> push es</b></p><p><b> push si</b></p><p><b> push di</b></p><p> mov ah,2ah ;
73、獲取系統(tǒng)時(shí)間,cx→year dh→mouth dl→day,為十六進(jìn)制表示</p><p><b> int 21h</b></p><p> call translate ;轉(zhuǎn)化寄存器中值為BCD碼格式</p><p><b> mov al,ch</b></p><p> lea
74、 si,year</p><p> call bcd ;將BCD碼轉(zhuǎn)化為可以輸出的相應(yīng)字符 </p><p><b> mov al,cl</b></p><p> lea si,year[2] </p><p><b> call bcd</b></p>
75、;<p><b> mov al,dh</b></p><p> lea si,mounth</p><p><b> call bcd</b></p><p><b> mov al,dl</b></p><p> lea si,day</p&g
76、t;<p><b> call bcd</b></p><p> mov ax,0b800h ;將年月日寫入顯存</p><p><b> mov es,ax</b></p><p> mov di,720h</p><p> lea si,year</p&g
77、t;<p> call disptime</p><p><b> pop di</b></p><p><b> pop si</b></p><p><b> pop es</b></p><p><b> pop dx</b>
78、</p><p><b> pop cx</b></p><p> mov ax,0200h ;獲取系統(tǒng)時(shí)間,ch→hours cl→minutes DH→seconds,均為BCD碼格式</p><p><b> int 1ah</b></p><p><b> mov al
79、,ch</b></p><p> lea si,time0 </p><p><b> call bcd</b></p><p><b> mov al,cl</b></p><p> lea si,time1</p><p><b> cal
80、l bcd</b></p><p><b> mov al,dh</b></p><p> lea si,time2</p><p><b> call bcd</b></p><p> mov ax,0b800h ;顯存地址 采用直接寫顯存的方法輸出字符</p&g
81、t;<p> mov es,ax ;es:di 指向顯存地址 </p><p> mov di,cloAddre ;變量cloAddre為偏移地址</p><p> lea si,msg</p><p> call disptime ;顯示時(shí)間</p><p> ; ------------
82、---------------------------------------------- 判斷是否鬧鈴 </p><p> mov al,sign ;判斷鬧鈴是否開著sign為1表示沒有開著</p><p> or al,al </p><p> jnz to@ ;若鬧鈴沒關(guān),整分鬧鈴</p>
83、<p> mov al,ch </p><p> xor al,timer0[0] ;比較時(shí)針</p><p><b> jnz disp0</b></p><p><b> mov al,cl</b></p><p> xor al,timer0[1] ;繼續(xù)比較分
84、針</p><p><b> jnz downc</b></p><p><b> or dh,dh</b></p><p> jnz disp0 </p><p> mov byte ptr sign,1 ;鬧鈴開啟</p><p> call clock
85、 ;鬧鈴</p><p> jmp disp0 </p><p> ; ---------------------------------------------------------- 判斷倒計(jì)時(shí)</p><p> to@ : mov al,dh</p><p> cmp al,51h</p>
86、<p><b> jb to1</b></p><p> sub al,51h</p><p> call countDown</p><p> to1: mov al,cl</p><p> cmp al,timer1</p><p> jna to2
87、 ;分針變化則鬧</p><p> call clock</p><p> to2: mov byte ptr timer1,cl</p><p><b> jmp disp0</b></p><p> downc : mov al,cl ;判斷分針,是否可以準(zhǔn)備鬧鈴<
88、/p><p><b> add al,1</b></p><p> xor al,timer0[1]</p><p><b> jnz disp0</b></p><p> mov al,dh </p><p> cmp al,51h ;倒數(shù)十秒
89、開始鬧鈴</p><p><b> jb disp0</b></p><p> sub al,51h</p><p> call countDown </p><p> ; ---------------------------------------------------------- 鍵
90、盤控制時(shí)間顯示位置 </p><p> disp0: mov ah,01h</p><p> int 16h ;從鍵盤緩沖區(qū)讀取掃描碼</p><p> ;---------------- 是否按了'Q'鍵 </p><p> cmp ah,10h</p><
91、;p><b> jne i0</b></p><p> mov byte ptr sign,0 ;關(guān)閉鬧鈴 </p><p> call clear</p><p> jmp startloop</p><p> ;---------------- 是否按了'上'方向鍵 <
92、/p><p><b> i0: </b></p><p> cmp ah,48h </p><p><b> jne i1 </b></p><p> sub cloAddre,160</p><p> call clear</p>
93、<p> eraserScreen 0ff60h ;當(dāng)前地址減160</p><p> jmp intend ;直接結(jié)束一次中斷,以避免修改其它單元內(nèi)容 </p><p> ;-------------- 是否按了'左'方向鍵 </p><p> i1: cmp ah,4bh <
94、;/p><p><b> jne i2 </b></p><p> sub cloAddre,2</p><p> call clear</p><p> eraserScreen 0fffeh ;當(dāng)前地址減2</p><p> jmp intend </p>&l
95、t;p> ;---------------是否按了'下'方向鍵 </p><p><b> i2: </b></p><p> cmp ah,50h </p><p><b> jne i3 </b></p><p> add cloAddre
96、,160</p><p> call clear</p><p> eraserScreen 160 ;當(dāng)前地址加160</p><p> jmp intend </p><p> ;---------------- 是否按了'右'方向鍵 </p><p><b>
97、 i3: </b></p><p> cmp ah,4dh </p><p><b> jne i4 </b></p><p> add cloAddre,2</p><p> call clear</p><p> eraserScreen 2
98、;當(dāng)前地址加2</p><p> jmp intend ;直接結(jié)束一次中斷,以避免修改其它單元內(nèi)容 </p><p> ; ---------------- ;是否按了'ESC'鍵 </p><p><b> i4: </b></p><p> cmp
99、ah,01h </p><p><b> jne i5</b></p><p><b> jmp over</b></p><p> ; ---------------- ;按以下鍵變化不同種顏色 </p><p> i5: .if ah==1eh
100、 ;按A鍵變色</p><p> clearscreen 04h</p><p> call clear</p><p> jmp startcha</p><p> .elseif ah==1fh ;按S鍵變色</p><p> clearscreen 1eh</p><
101、;p> call clear</p><p> jmp startcha</p><p> .elseif ah==20h ;按D鍵變色</p><p> clearscreen 0e0h</p><p> call clear</p><p> jmp startcha</p&g
102、t;<p> .elseif ah==21h</p><p> clearscreen 23h</p><p> call clear</p><p> jmp startcha</p><p> .elseif ah==22h</p><p> clearscreen 41h</p&g
103、t;<p> call clear</p><p> jmp startcha</p><p><b> .else</b></p><p><b> jmp i6</b></p><p><b> .endif</b></p><p
104、> i6: cmp ah,30h ; 按'B '鍵</p><p> je START0 ;返回主菜單 </p><p> intend : call clear</p><p> jmp startloop </p><p> ;
105、----------------------------------------------------------bcd碼轉(zhuǎn)換 </p><p><b> bcd: </b></p><p><b> mov ah,al</b></p><p><b> push cx</b&g
106、t;</p><p><b> mov cl,4</b></p><p><b> shr ah,cl</b></p><p><b> pop cx</b></p><p> and al,0fh</p><p> add ax,'0
107、0'</p><p> xchg ah,al</p><p> mov ds:[si],ax</p><p><b> ret</b></p><p> ; --------------------------------------------------------------退出
108、</p><p> over: mov ax,4c00h</p><p><b> int 21h</b></p><p> ; ---------------------------------------------------------- 顯示時(shí)間子程序 </p><p> disptime
109、 proc </p><p> disp : mov al,[si]</p><p><b> inc si</b></p><p><b> or al,al</b></p><p> jz back </p><p><b> cld&l
110、t;/b></p><p> stosb ;將al傳送到es:di</p><p> inc di </p><p><b> jmp disp</b></p><p> back: ret </p><p> disptime endp
111、</p><p> ; ----------------------------------------------------------編寫音樂子程序 </p><p> creatMiusic proc</p><p><b> push ax</b></p><p><b> push
112、 si</b></p><p><b> push cx </b></p><p><b> push dx</b></p><p> mov dx,offset showMusicBook</p><p> mov ah,09h</p><p><
113、;b> int 21h</b></p><p> lea si,music</p><p> loop0: mov ah,07h</p><p><b> int 21h</b></p><p> cmp al,'#' </p><p>
114、 jne loop1</p><p> mov byte ptr [si],al</p><p> jmp finish ; '#'結(jié)束編輯</p><p> loop1: .if al<'1' ;有效輸入值為'1'~'7'</p><p>
115、;<b> jmp loop0</b></p><p> .elseif al>'7'</p><p><b> jmp loop0</b></p><p><b> .else</b></p><p><b> mov ah,02&l
116、t;/b></p><p><b> mov dl,al</b></p><p><b> int 21h</b></p><p> mov byte ptr [si],al</p><p><b> inc si</b></p><p>
117、<b> .endif</b></p><p><b> jmp loop0</b></p><p> finish: pop dx</p><p><b> pop cx</b></p><p><b> pop si</b></p&
118、gt;<p><b> pop ax</b></p><p><b> ret</b></p><p> creatMiusic endp</p><p> ; ----------------------------------------------------------倒計(jì)時(shí)子程序</p
119、><p> countDown proc </p><p><b> push cx</b></p><p><b> push dx</b></p><p><b> push si</b></p><p><b> mov ah,
120、al</b></p><p> mov al,9 </p><p> sub al,ah ;用9減當(dāng)前秒數(shù)即得倒計(jì)數(shù)</p><p> add al,'0' ;將字符存入指定位置</p><p> lea si,msgdown</p>&
121、lt;p><b> push si</b></p><p> add si,len</p><p><b> sub si,3</b></p><p> mov byte ptr [si],al</p><p><b> pop si</b></p>
122、<p> mov cx,lengthof msgdown</p><p> writechar 28,7,0f4h,1</p><p><b> pop si</b></p><p><b> pop dx</b></p><p><b> pop cx</b
123、></p><p><b> ret</b></p><p> countDown endp </p><p> ; ------------------------------------------------------清除鍵盤緩沖區(qū)</p><p> clear proc </p>
124、<p><b> push es</b></p><p><b> push ax</b></p><p><b> push cx</b></p><p><b> push dx</b></p><p><b> push
125、 di</b></p><p> mov ax,0040h</p><p><b> mov es,ax</b></p><p> mov ax,es:[001ch]</p><p> mov word ptr es:[001ah],ax ;隊(duì)首地址等于隊(duì)尾地址</p><p
126、> mov di,es:[001ch]</p><p> mov word ptr es:[di],0000h ;清0</p><p> pop di </p><p><b> pop dx</b></p><p><b> pop cx</b></p>
127、<p><b> pop ax</b></p><p><b> pop es</b></p><p><b> ret</b></p><p> clear endp </p><p> ; ------------------------------
128、----------------------------發(fā)聲鬧鈴子程序</p><p> clock proc </p><p><b> push ax</b></p><p><b> push bx</b></p><p><b> push cx</b>&l
129、t;/p><p><b> push dx</b></p><p><b> push si</b></p><p> mov cx ,lengthof msgring</p><p> lea si,msgring</p><p> writechar 28,7,0f
130、4h,1 </p><p> MOV si,offset music</p><p> LP1: mov al,[si] </p><p> CMP AL,'#'</p><p><b> JZ DONE</b></p><p> AND AL,0
131、FH </p><p><b> DEC AL</b></p><p><b> SHL AL,1</b></p><p><b> XOR AH,AH</b></p><p><b> push si</b></p><p
132、> LEA SI,INITAB</p><p> ADD SI,AX ;對映相應(yīng)音調(diào)頻率</p><p> MOV BX,[SI] </p><p> MOV AL,01H</p><p> OUT 61,AL </p><p> MOV AL,101101
133、10B ;給定時(shí)器2送控制字</p><p> OUT 43H,AL ;2號控制寄存器</p><p><b> MOV AL,BL</b></p><p> OUT 42H,AL ;給定時(shí)器送計(jì)數(shù)值低字節(jié)</p><p><b> MOV AL,BH</b&
134、gt;</p><p> OUT 42H,AL ;給定時(shí)器送計(jì)數(shù)值高字節(jié)</p><p><b> IN AL,61H</b></p><p> OR AL,3 ;開揚(yáng)聲器,低二位全置1</p><p> OUT 61H,AL</p><p> C
135、ALL DELAY</p><p> AND AL,0FCH ;關(guān)閉揚(yáng)聲器,低二位置為0 </p><p> OUT 61H,AL </p><p><b> pop si</b></p><p><b> add si,1</b></p><p><
136、;b> in al,60h</b></p><p> cmp al, 10h</p><p><b> jne go</b></p><p> mov byte ptr sign,0</p><p><b> jmp DONE</b></p><p&g
137、t; go: JMP LP1 </p><p> DONE: mov cx ,lengthof msgring</p><p> lea si, blank</p><p> writechar 28,7,6fh,1 </p><p><b> pop si</b>&
138、lt;/p><p><b> pop dx</b></p><p><b> pop cx</b></p><p><b> pop bx</b></p><p><b> pop ax</b></p><p><b>
139、; ret</b></p><p> clock endp </p><p> ; ----------------------------------------------------------延時(shí)子程序</p><p> DELAY PROC near</p><p><b> MOV C
140、X,0</b></p><p> DL2: MOV AX,10000</p><p> DL1: SUB AX,1 ;1000*65535</p><p><b> JNZ DL1 </b></p><p><b> LOOP DL2</b></p&g
141、t;<p><b> RET</b></p><p> DELAY ENDP </p><p> ; --------------------------------將0ah轉(zhuǎn)換成10h的形式 </p><p> translate proc </p><p><b> push
142、 bx</b></p><p><b> xor bx,bx</b></p><p> lpp0 : cmp cx,1000 ;若大于1000沒比較一次bx加1000h,cx自減1000</p><p><b> jb lpp1</b></p><p> s
143、ub cx,1000</p><p> add bx,1000h</p><p><b> jmp lpp0 </b></p><p> lpp1: cmp cx,100 ;若大于100沒比較一次bx加100h,cx自減100</p><p><b> jb lpp2</b>&l
144、t;/p><p> sub cx,100</p><p> add bx,100h</p><p><b> jmp lpp1</b></p><p> lpp2: cmp cx,10 ;若大于10沒比較一次bx加10h,cx自減10</p><p><b> j
145、b lpp3</b></p><p> sub cx,10 </p><p> add bx,10h</p><p><b> jmp lpp2</b></p><p> lpp3: add bx,cx ;若小于10,bx直接加cx</p><p>
146、 mov cx,bx ;得到轉(zhuǎn)換后cx值</p><p> xor bx,bx ;bx清0</p><p> lpp4: cmp dl,10</p><p><b> jb lpp5</b></p><p><b> sub dl,10</b></p&g
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《匯編語言》課程設(shè)計(jì)報(bào)告顯示系統(tǒng)時(shí)間
- 匯編語言課程設(shè)計(jì)---系統(tǒng)時(shí)間顯示
- 匯編語言課程設(shè)計(jì)--用匯編語言實(shí)現(xiàn)顯示系統(tǒng)時(shí)間的程序
- 匯編語言課程設(shè)計(jì)----顯示系統(tǒng)當(dāng)前時(shí)間與日期
- 匯編語言課程設(shè)計(jì)顯示系統(tǒng)當(dāng)前時(shí)間與日期
- 匯編語言課程設(shè)計(jì)《定時(shí)顯示系統(tǒng)》
- 匯編語言課程設(shè)計(jì)_提取系統(tǒng)時(shí)間
- 匯編語言課程設(shè)計(jì)報(bào)告
- 匯編語言課程設(shè)計(jì)報(bào)告
- 匯編語言課程設(shè)計(jì)報(bào)告
- 匯編語言課程設(shè)計(jì)報(bào)告a
- 匯編課程設(shè)計(jì)報(bào)告---顯示系統(tǒng)時(shí)間
- 匯編課程設(shè)計(jì)報(bào)告-系統(tǒng)時(shí)間顯示
- 匯編語言課程設(shè)計(jì)
- 匯編語言課程設(shè)計(jì)
- 匯編語言課程設(shè)計(jì)報(bào)告---打字游戲
- 匯編語言課程設(shè)計(jì)--“霓虹燈”的模擬顯示
- 匯編語言課程設(shè)計(jì)安排
- 《匯編語言》課程設(shè)計(jì)報(bào)告--判斷閏年程序
- 匯編語言課程設(shè)計(jì)-- 計(jì)算比賽成績系統(tǒng)
評論
0/150
提交評論