版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 匯編語言課程設(shè)計報告課程名稱: 匯編語言課程設(shè)計 設(shè)計題目: 顯示系統(tǒng)時間 院 系: 計算機科學與技術(shù)學院班 級: 計專10703 設(shè) 計 者: 學 號: 200700172 序 號: 33 指導教師: 設(shè)計時間: 2009.06.08-2009.06.19目錄1. 課程設(shè)計題目2. 課程設(shè)計內(nèi)容3. 設(shè)計目的4. 設(shè)計圖形5. 源代碼6. 運行界面7. 感想體會一, 課程設(shè)計目的。 1.掌握中斷的使用方法。2.掌握bios系統(tǒng)功能調(diào)用。3.掌握基本的顯存讀寫技術(shù)。 4.學會用匯編語言編寫一個較完整的實用程序, 培養(yǎng)自己的動手操作能力。5. 學習程序設(shè)計的基本思路和方法,編程、調(diào)試、撰寫報告
2、等。二、程序內(nèi)容: 第一部分:定義顯示界面。 第二部分:調(diào)用系統(tǒng)時間,并將調(diào)用的用二進制表示的時間數(shù)轉(zhuǎn)換成ascii碼,并將時間數(shù)存入顯存區(qū)。(顯存的起始地址:b8000h) 第三部分:將存在系統(tǒng)內(nèi)存區(qū)的時間用字符串的形式顯示出來。 第四部分:定時響鈴功能,指定時間和倒計時。響鈴為一首自寫音樂。注意:1、如果用圖形方式顯示更好,2、注意設(shè)置顯示時候的背景顏色3、可以增加鍵盤設(shè)置的功能,設(shè)置顯示顏色,顯示位置4、鬧鈴如果不關(guān)閉,可以設(shè)置為間隔1分鐘再響三、程序設(shè)計原理 首先在數(shù)據(jù)段開辟一顯示緩沖區(qū),用來存儲系統(tǒng)時間。調(diào)用bios中斷,返回系統(tǒng)時間,并將來返回的二進制時間轉(zhuǎn)換成ascii碼,方便時
3、間顯示時的調(diào)用。分別將來小時數(shù)、分鐘數(shù)、秒數(shù)存入顯示緩沖區(qū)。通過寫顯存將時間顯示出來。由于獲取了的系統(tǒng)時間不會自動刷新,所以我們要設(shè)計成刷新的方式來不斷獲取系統(tǒng)的時間,這樣就形成了會跳動的電子鐘了。定時功能主要指定一個報警時間作為比較,到了需要響鈴時間調(diào)用一個音樂程序表示時間到。四、程序流程圖 開 始獲取原中斷類型1ch 保存原中斷類型 設(shè)置新的中斷類型 執(zhí)行中斷處理程序 結(jié)束 保護現(xiàn)場 中斷返回 讀取系統(tǒng)時間 保存原中斷類型分別將時間的bcd碼轉(zhuǎn)換為字符在指定位置寫顯存以顯示時間 恢復現(xiàn)場 圖一 主程序流程圖 圖二 中斷處理程序流程圖 開始播放音樂輸入#輸入1-7間隔1分鐘停止鬧鈴開關(guān)是否關(guān)
4、開始鬧鈴a=b取系統(tǒng)時間a設(shè)置鬧鈴時間b結(jié)束五、程序代碼eraserscreen macro ab ;清除過時顯示的時間 push ax push cx push bx mov bx ,cloaddre ;當前地址 sub bx,ab ;得按鍵前地址 mov ax,0b800h mov es,ax mov di,bx lea si,blank call disptime pop bx pop cx pop ax endmclearscreen macro clor ;相當于清屏 ,指定顏色 push cx push si push di mov cx,1 lea si, blank write
5、char 0,0,clor,2000 pop di pop si pop cx endm writechar macro arra,row,color,cc ;在指定位置寫入數(shù)據(jù) local lp mov dl,arra ;第幾列 lp: mov dh ,row ;第幾行 mov ah,02 ;設(shè)置位置 mov bh, 0 int 10h mov al,si mov ah,09h mov bl,color ;顏色 push cx mov cx,cc int 10h add si,1 add dl,1 pop cx loop lp endm .model small.stack .data ;
6、-學生個人信息 mess1 db 0dh,0ah,0dh,0ah,0dh,0ah db 9,9,9,-,0dh,0ah ;0dh,0ah是回車換行的意思 db 9,9,9,| students,33, information |,0dh,0ah db 9,9,9,| name: zhangshuguang |,0dh,0ah db 9,9,9,| class: three |,0dh,0ah db 9,9,9,| grade: tow |,0dh,0ah db 9,9,9, | number: 200700172 |,0dh,0ah db 9,9,9,- ,0dh,0ah,$ msg1 db
7、0dh,0ah,9,9,9,press any key to continue.,0dh,0ah,$ ;提示信息 ; - 菜單 mess2 db 0dh,0ah,0dh,0ah,0dh,0ah db 9,9,9,-,0dh,0ah db 9,9,9,| 1- create a music |,0dh,0ah db 9,9,9,| 2- time to ring a bell |,0dh,0ah db 9,9,9,| 3- exit |,0dh,0ah db 9,9,9,- ,0dh,0ah,$ msg2 db 0dh,0ah,9,9,9, press 1 or 2 or 3 ,0dh,0ah,
8、$ ;提示信息 ; - 變量數(shù)據(jù) showmusicbook db 0dh,0ah,0dh,0ah,0dh,0ah db 9,9,9 ,press # to conclude,0dh,0ah db 9, the music book is: ,$ showmsg db press q to stop the clock,0dh,0ah db press esc to exit,0dh,0ah db press b to back thr main mu ,$ cloaddre dw 850h msgdown db the last:,?, ,s len equ $-msgdown blank
9、db 25 dup( ),0,0 msgring db ring ok!,10 dup( ) music db 337665654444334555666# initab dw 8e5h,7f4h,6adh,5f1h,54bh,4b7h,472h settime db please set the time to ring,$ timer0 db ?,? timer1 db 0ffh sign db 0 year db ?,?,?,? db / mounth db ?,? db / day db ?,?,0,0 msg db the time is: time0 db ?,? db : tim
10、e1 db ?,? db : time2 db ?,?,0,0 .code.startup ; -程序開始 mov ah,09h lea dx, mess1 int 21h mov ah,09h lea dx, msg1 int 21h mov ah,07h int 21h start0: clearscreen 6fh mov ah,09h lea dx,mess2 int 21h lea dx, msg2 ;顯示提示信息 msg2 int 21h lop1: mov ah,08h ;從標準輸入設(shè)備輸入一個字符,在此是用戶輸入所選菜單 int 21h ;-判斷從鍵盤輸入的選項 push ax
11、 cmp al,3 jz c3 pop ax push ax cmp al,1 ; jz (相等的時候跳轉(zhuǎn)) jz c1 ;若等于1,則跳轉(zhuǎn)到c1 pop ax ;否則ax出棧,并與2比較 push ax cmp al,2 jz c2 pop ax jmp lop1 ;否則跳轉(zhuǎn)到lop1,即重新輸入一個字符(1/2/3) ;- 此為前面所要跳轉(zhuǎn)的程序 c1: clearscreen 6fh call creatmiusic ;創(chuàng)作鈴聲 mov byte ptr sign,1 ;鬧鈴開啟 call clock mov byte ptr sign,0 ;鬧鈴關(guān)閉 jmp start0 c2: jm
12、p start1 c3: jmp over;- 設(shè)置鬧鐘鬧鈴時間 start1: clearscreen 6fh push dx push bx mov dl,10 ;第幾列 mov dh ,5 ;設(shè)置光標位置 mov ah,02 mov bh, 0 int 10h lea dx, settime mov ah,09h int 21h pop bx pop dx push si push cx lea si,timer0 mov cx ,2 ;-;輸入需鬧鈴時間 input: mov ah,02h mov dl,: ;冒號輸出 int 21h mov ah,01h int 21h ;- ;以下
13、為輸入有效值的判斷,時針在00-23有效,分針在00-59有效 .if cx=2 ;輸入時高位 .if al2 pop cx pop si jmp start1 .elseif al5 pop cx pop si jmp start1 .elseif al3 pop cx pop si jmp start1 .elseif al9 pop cx pop si jmp start1 .elseif al9 pop cx pop si jmp start1 .elseif al0 pop cx pop si jmp start1 .else sub al,0 sub bl,0 push cx mo
14、v cl,4 shl bl,cl pop cx add bl,al mov byte ptr si,bl add si,1 .endif .endif dec cx jnz input startcha: push dx push bx mov dl,0 ;第幾列 mov dh ,0;設(shè)置光標位置 mov ah,02 mov bh, 0 int 10h pop bx pop dx mov dx,offset showmsg mov ah,09h int 21h ; - 讀取系統(tǒng)時間 startloop: push cx push dx push es push si push di mov a
15、h,2ah ;獲取系統(tǒng)時間,cxyear dhmouth dlday,為十六進制表示 int 21h call translate ;轉(zhuǎn)化寄存器中值為bcd碼格式 mov al,ch lea si,year call bcd ;將bcd碼轉(zhuǎn)化為可以輸出的相應(yīng)字符 mov al,cl lea si,year2 call bcd mov al,dh lea si,mounth call bcd mov al,dl lea si,day call bcd mov ax,0b800h ;將年月日寫入顯存 mov es,ax mov di,720h lea si,year call disptime p
16、op di pop si pop es pop dx pop cx mov ax,0200h ;獲取系統(tǒng)時間,chhours clminutes dhseconds,均為bcd碼格式 int 1ah mov al,ch lea si,time0 call bcd mov al,cl lea si,time1 call bcd mov al,dh lea si,time2 call bcd mov ax,0b800h ;顯存地址 采用直接寫顯存的方法輸出字符 mov es,ax ;es:di 指向顯存地址 mov di,cloaddre ;變量cloaddre為偏移地址 lea si,msg c
17、all disptime ;顯示時間 ; - 判斷是否鬧鈴 mov al,sign ;判斷鬧鈴是否開著sign為1表示沒有開著 or al,al jnz to ;若鬧鈴沒關(guān),整分鬧鈴 mov al,ch xor al,timer00 ;比較時針 jnz disp0 mov al,cl xor al,timer01 ;繼續(xù)比較分針 jnz downc or dh,dh jnz disp0 mov byte ptr sign,1 ;鬧鈴開啟 call clock ;鬧鈴 jmp disp0 ; - 判斷倒計時 to : mov al,dh cmp al,51h jb to1 sub al,51h
18、call countdown to1: mov al,cl cmp al,timer1 jna to2 ;分針變化則鬧 call clock to2: mov byte ptr timer1,cl jmp disp0 downc : mov al,cl ;判斷分針,是否可以準備鬧鈴 add al,1 xor al,timer01 jnz disp0 mov al,dh cmp al,51h ;倒數(shù)十秒開始鬧鈴 jb disp0 sub al,51h call countdown ; - 鍵盤控制時間顯示位置 disp0: mov ah,01h int 16h ;從鍵盤緩沖區(qū)讀取掃描碼 ;- 是
19、否按了q鍵 cmp ah,10h jne i0 mov byte ptr sign,0 ;關(guān)閉鬧鈴 call clear jmp startloop ;- 是否按了上方向鍵 i0: cmp ah,48h jne i1 sub cloaddre,160 call clear eraserscreen 0ff60h ;當前地址減160 jmp intend ;直接結(jié)束一次中斷,以避免修改其它單元內(nèi)容 ;- 是否按了左方向鍵 i1: cmp ah,4bh jne i2 sub cloaddre,2 call clear eraserscreen 0fffeh ;當前地址減2 jmp intend ;
20、-是否按了下方向鍵 i2: cmp ah,50h jne i3 add cloaddre,160 call clear eraserscreen 160 ;當前地址加160 jmp intend ;- 是否按了右方向鍵 i3: cmp ah,4dh jne i4 add cloaddre,2 call clear eraserscreen 2 ;當前地址加2 jmp intend ;直接結(jié)束一次中斷,以避免修改其它單元內(nèi)容 ; - ;是否按了esc鍵 i4: cmp ah,01h jne i5 jmp over ; - ;按以下鍵變化不同種顏色 i5: .if ah=1eh ;按a鍵變色 cl
21、earscreen 04h call clear jmp startcha .elseif ah=1fh ;按s鍵變色 clearscreen 1eh call clear jmp startcha .elseif ah=20h ;按d鍵變色 clearscreen 0e0h call clear jmp startcha .elseif ah=21h clearscreen 23h call clear jmp startcha .elseif ah=22h clearscreen 41h call clear jmp startcha .else jmp i6 .endifi6: cmp
22、ah,30h ; 按b 鍵 je start0 ;返回主菜單 intend : call clear jmp startloop ; -bcd碼轉(zhuǎn)換 bcd: mov ah,al push cx mov cl,4 shr ah,cl pop cx and al,0fh add ax,00 xchg ah,al mov ds:si,ax ret ; -退出 over: mov ax,4c00h int 21h ; - 顯示時間子程序 disptime proc disp : mov al,si inc si or al,al jz back cld stosb ;將al傳送到es:di inc
23、di jmp disp back: ret disptime endp ; -編寫音樂子程序 creatmiusic proc push ax push si push cx push dx mov dx,offset showmusicbook mov ah,09h int 21h lea si,music loop0: mov ah,07h int 21h cmp al,# jne loop1 mov byte ptr si,al jmp finish ; #結(jié)束編輯 loop1: .if al7 jmp loop0 .else mov ah,02 mov dl,al int 21h mo
24、v byte ptr si,al inc si .endif jmp loop0 finish: pop dx pop cx pop si pop ax retcreatmiusic endp ; -倒計時子程序countdown proc push cx push dx push si mov ah,al mov al,9 sub al,ah ;用9減當前秒數(shù)即得倒計數(shù) add al,0 ;將字符存入指定位置 lea si,msgdown push si add si,len sub si,3 mov byte ptr si,al pop si mov cx,lengthof msgdown
25、 writechar 28,7,0f4h,1 pop si pop dx pop cx retcountdown endp ; -清除鍵盤緩沖區(qū) clear proc push es push ax push cx push dx push di mov ax,0040h mov es,ax mov ax,es:001ch mov word ptr es:001ah,ax ;隊首地址等于隊尾地址 mov di,es:001ch mov word ptr es:di,0000h ;清0 pop di pop dx pop cx pop ax pop es ret clear endp ; -發(fā)聲
26、鬧鈴子程序 clock proc push ax push bx push cx push dx push si mov cx ,lengthof msgring lea si,msgring writechar 28,7,0f4h,1 mov si,offset music lp1: mov al,si cmp al,# jz done and al,0fh dec al shl al,1 xor ah,ah push si lea si,initab add si,ax ;對映相應(yīng)音調(diào)頻率 mov bx,si mov al,01h out 61,al mov al,10110110b ;給定時器2送控制字 out 43h,al ;2號控制寄存器 mov al,bl out 42h,al ;給定時器送計數(shù)值低字節(jié) mov al,bh out 42h,al ;給定時器送計數(shù)值高字節(jié) in al,61h or al,3 ;開揚聲器,低二位全置1 out 61h,al call delay and al,0fch ;關(guān)閉揚聲器,低二位置為0 out 61h,al pop si add si,1 in al,60h cmp al, 10h jne
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 天門職業(yè)學院《基礎(chǔ)分子生物學實驗》2023-2024學年第一學期期末試卷
- 2024-2025學年高中政治第三單元收入與分配第八課財政與稅收1國家財政課時作業(yè)含解析新人教版必修1
- 機械制造工藝課程設(shè)計
- 備戰(zhàn)2024年高考歷史一輪復習易錯題01古代中國的政治制度含解析
- 大班探索性主題課程設(shè)計
- 海鮮做法課程設(shè)計
- 多元課程設(shè)計紙
- 刀具預(yù)調(diào)儀行業(yè)相關(guān)投資計劃提議范本
- 果汁飲料行業(yè)相關(guān)投資計劃提議范本
- 拉擠樹脂行業(yè)相關(guān)投資計劃提議范本
- 四川省南充市2023-2024學年高一上學期期末考試化學試題 含解析
- 2024北京東城初二(上)期末語文試卷及答案
- 護理年終個人工作總結(jié)
- 高等學校學生公寓服務(wù)指南-地方標準編制說明
- 電力行業(yè)用水管理制度
- 2025高考數(shù)學復習必刷題:概率與統(tǒng)計的綜合應(yīng)用
- 狐假虎威第二課時說課稿
- 合同法-006-國開機考復習資料
- 2022年軍隊文職統(tǒng)一考試《專業(yè)科目》管理學類-管理學試卷(含解析)
- 山東師范大學形勢與政策期末復習題
- 2024全國國家版圖知識競賽題庫(含答案)
評論
0/150
提交評論