微機(jī)原理與接口技術(shù)課程設(shè)計(jì)說(shuō)明書(shū)鐘表顯示匯編語(yǔ)言程序設(shè)計(jì)_第1頁(yè)
微機(jī)原理與接口技術(shù)課程設(shè)計(jì)說(shuō)明書(shū)鐘表顯示匯編語(yǔ)言程序設(shè)計(jì)_第2頁(yè)
微機(jī)原理與接口技術(shù)課程設(shè)計(jì)說(shuō)明書(shū)鐘表顯示匯編語(yǔ)言程序設(shè)計(jì)_第3頁(yè)
微機(jī)原理與接口技術(shù)課程設(shè)計(jì)說(shuō)明書(shū)鐘表顯示匯編語(yǔ)言程序設(shè)計(jì)_第4頁(yè)
微機(jī)原理與接口技術(shù)課程設(shè)計(jì)說(shuō)明書(shū)鐘表顯示匯編語(yǔ)言程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩11頁(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、鐘表顯示匯編語(yǔ)言程序設(shè)計(jì)1 設(shè)計(jì)目的與要求1.1設(shè)計(jì)目的:(1)理解掌各個(gè)中斷的使用方法,通過(guò)對(duì)一些較大程序的編寫(xiě),加深對(duì)匯編語(yǔ)言的認(rèn)識(shí),尤其是對(duì)中斷的理解。(2)掌握一定的匯編語(yǔ)言知識(shí),培養(yǎng)自己的動(dòng)手操作能力,同時(shí)培養(yǎng)學(xué)生應(yīng)用計(jì)算機(jī)解決實(shí)際問(wèn)題的能力。(3)學(xué)習(xí)程序設(shè)計(jì)的基本思路和方法。1.2 設(shè)計(jì)要求: 設(shè)計(jì)匯編語(yǔ)言程序,實(shí)現(xiàn)系統(tǒng)時(shí)間顯示功能,具體功能要求如下: (1)設(shè)計(jì)一個(gè)界面顯示系統(tǒng)方框。 (2)單擊“t”鍵顯示本機(jī)系統(tǒng)的時(shí)間。 (3)單擊“esc鍵退出程序。1.3 程序內(nèi)容第一部分:定義顯示界面。第二部分:調(diào)用系統(tǒng)時(shí)間,并將調(diào)用的用二進(jìn)制表示的時(shí)間數(shù)轉(zhuǎn)換成ascii碼,并將時(shí)間數(shù)存

2、入內(nèi)存區(qū)。第三部分:將存在系統(tǒng)內(nèi)存區(qū)的時(shí)間數(shù)用顯示字符串的形式顯示出來(lái)。第四部分:獲取鍵盤(pán)的按鍵值,以esc鍵退出系統(tǒng)返回dos。2 總體方案論證這次的任務(wù),一共設(shè)計(jì)了兩種方案。方案一主要是調(diào)用2ch號(hào)dos中斷讀系統(tǒng)時(shí)間,把各相關(guān)寄存器中的內(nèi)容轉(zhuǎn)換為十進(jìn)制ascii碼輸出,分別將小時(shí)數(shù)、分鐘數(shù)、秒數(shù)存入顯示緩沖區(qū),調(diào)用dos字符串顯示功能將時(shí)間顯示出來(lái),然后定位光標(biāo)的開(kāi)始位置,結(jié)合著將時(shí)間顯示在我們預(yù)先定義好的位置上。方案二同樣調(diào)用2ch號(hào)dos中斷讀系統(tǒng)時(shí)間,只是方案二簡(jiǎn)單點(diǎn),沒(méi)有把小時(shí)數(shù)、分鐘數(shù)、秒數(shù)分開(kāi),直接將系統(tǒng)當(dāng)下的時(shí)間存入了顯示緩沖區(qū),調(diào)用dos字符串顯示功能將時(shí)間顯示出來(lái),然后

3、定位光標(biāo)的開(kāi)始位置,結(jié)合著將時(shí)間顯示在我們預(yù)先定義好的位置上。經(jīng)過(guò)對(duì)比,我覺(jué)得方案一好點(diǎn)們雖然復(fù)雜一些,但是大體的思路很清楚。 總體思路就是調(diào)用2ch號(hào)dos中斷讀系統(tǒng)時(shí)間,把各相關(guān)寄存器中的內(nèi)容轉(zhuǎn)換為十進(jìn)制ascii碼輸出,分別將小時(shí)數(shù)、分鐘數(shù)、秒數(shù)存入顯示緩沖區(qū),調(diào)用dos字符串顯示功能將時(shí)間顯示出來(lái),然后定位光標(biāo)的開(kāi)始位置,結(jié)合著將時(shí)間顯示在我們預(yù)先定義好的位置上。由于獲取了的系統(tǒng)時(shí)間不會(huì)自動(dòng)刷新,所以我們要設(shè)計(jì)成循環(huán)的方式來(lái)不斷獲取系統(tǒng)的時(shí)間,這樣就形成了會(huì)跳動(dòng)的電子鐘了。程序一旦進(jìn)入運(yùn)行,就會(huì)顯示一個(gè)精美的方框,顯示按鍵提示,按t就將不間斷地在顯示屏顯示時(shí)間,要想程序停止運(yùn)行,可同時(shí)

4、在鍵盤(pán)按下esc鍵退出。在本程序中,時(shí)鐘的精確度為秒。其中dos調(diào)用功能中,編號(hào)為2ch的功能是取時(shí)間,出口參數(shù):cx:dx=時(shí)間。程序中會(huì)有四個(gè)子程序:子程序bin100ut 功能:把二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制ascii碼輸出;子程序stdout 功能:標(biāo)準(zhǔn)輸出一個(gè)字符;子程序clrscr 功能:清屏;子程序setcurs 功能:設(shè)置光標(biāo)位置。2.1 子程序bin10out子程序bin100ut的功能就是把二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制ascii碼輸出。基本原理:首先要完成二進(jìn)制到十進(jìn)制數(shù)的轉(zhuǎn)換,一般采用“除10取余”法來(lái)完成,其大致過(guò)程如下:將待轉(zhuǎn)換的數(shù)(在ax中)除以10,得到第一個(gè)商和余數(shù),此第一個(gè)余

5、數(shù)就是所求的十進(jìn)制數(shù)的個(gè)位;再用第一個(gè)商除以10,得到第二個(gè)商和余數(shù),此第二個(gè)余數(shù)就是所求十進(jìn)制數(shù)的十位;重復(fù)這一過(guò)程直至商為0,此時(shí)的余數(shù)就是所求十進(jìn)制數(shù)的最高位。在內(nèi)存中分配一緩沖區(qū),用來(lái)存放以上分離出來(lái)的十進(jìn)制數(shù)的每一位,然后再逐個(gè)轉(zhuǎn)換成ascii碼,轉(zhuǎn)換成ascii碼的過(guò)程很簡(jiǎn)單,就是給每個(gè)十進(jìn)制位加上30h即可;最后送顯示器輸出。從轉(zhuǎn)換的過(guò)程可以看出,先分離出來(lái)的是十進(jìn)制數(shù)的低位,要后顯示;后分離出來(lái)的是十進(jìn)制數(shù)的高位,應(yīng)該先顯示。因此在編程時(shí),我們可以利用堆棧操作中“先進(jìn)后出、后進(jìn)先出”的特性,當(dāng)分離出各十進(jìn)制位時(shí)依次入棧,要逐個(gè)轉(zhuǎn)換成ascii碼送顯示時(shí)依次出棧。 子程序bin1

6、00ut流程圖如圖2-1所示。 圖2-1 子程序bin100ut流程圖2.2子程序stdout 子程序stdout的功能是顯示輸出。在編寫(xiě)這一段程序時(shí),我用到了int 21 02h號(hào)中斷,int 21的功能是系統(tǒng)功能調(diào)用,入口參數(shù):ah=調(diào)用號(hào)。編號(hào)02h的功能就是顯示輸出,入口參數(shù):dl=輸出字符。一旦了解了這一功能,顯示輸出子程序便可解決,程序如下所示。程序:stdout proc push dx mov dl,al mov ah,2 int 21h pop dxretstdout endp 子程序stdout流程圖如圖2-2所示。 圖2-2 子程序stdout流程圖2.3子程序clrsc

7、r子程序clrscr的功能是清屏。在子程序clrscr中,我用到了顯示器驅(qū)動(dòng)程序(int 10h)中ah=6的功能。ah=6的功能是當(dāng)前頁(yè)上滾,入口參數(shù):al=行數(shù),(從窗口底部算起,空白的行數(shù));al=0為整個(gè)窗口空白;(ch,cl)=滾動(dòng)區(qū)域的左上角行、列;(dh,dl)=滾動(dòng)區(qū)域的右下角的行、列;bh=空白頁(yè)的屬性。以上是對(duì)int 10 ah=6中斷的簡(jiǎn)述,在本課題中用到清屏程序是為了使屏幕顯示更加美觀(guān),同時(shí)改變bh的數(shù)值,便可改變字體顏色,程序中即讓ax=0600h,左上角的行列號(hào)為(ch,cl)=(0,0),右下角的行列號(hào)為dx=184fh。其實(shí)在這里也可以用到ah=7的功能,它們的

8、功能都是初始化屏幕或滾屏,ah=6為向上滾屏,ah=7為向下滾屏,其它功能一樣。子程序clrscr流程圖如圖2-3所示。 圖2-3 子程序clrscr流程圖2.4子程序setcurs子程序setcurs 的功能是設(shè)置光標(biāo)位置。在子程序setcurs中,我用到了顯示器驅(qū)動(dòng)程序(int 10h)中ah=2的功能。ah=2的功能是設(shè)置光標(biāo)位置,入口參數(shù):(dh,dl)=行、列;bh=頁(yè)號(hào)(圖形模式為0)。為了使顯示的時(shí)間在dos屏幕中的中間顯示,dx設(shè)置為0a24h,即dh=0ah,dl=24h,就是在0ah行,24h列。如果想改變時(shí)間顯示的位置,只要改變dx的數(shù)值就可以達(dá)到目的。由于在第零頁(yè)中定位

9、,可用sub bh,bh來(lái)完成此操作。子程序setcurs流程圖如圖2-4所示。 圖2-4 子程序setcurs流程圖綜上所述,為系統(tǒng)顯示時(shí)鐘的幾個(gè)重要子程序,缺一不可,但實(shí)現(xiàn)這些功能其實(shí)還有很多其它中斷可以完成,在這里不一一介紹。課程題目中設(shè)計(jì)通過(guò)點(diǎn)擊esc鍵退出程序,在這里簡(jiǎn)單介紹一下,首先要用到int 21 0bh號(hào)中斷,改中斷的功能是檢查標(biāo)準(zhǔn)輸入狀態(tài),出口參數(shù)al=00無(wú)鍵入,al=ff有鍵入。同時(shí)還要用到int 21 08h號(hào)中斷,該中斷的功能是鍵盤(pán)輸入字符(無(wú)回應(yīng)顯示),出口參數(shù):al=輸出字符。在此設(shè)計(jì)中要求點(diǎn)擊esc鍵退出,先在ascii碼表中查詢(xún)esc的ascii值,查表得1

10、bh,即al=1bh。退出程序(exit)用的是int 21 4ch號(hào)中斷,該中斷的功能是終止當(dāng)前程序并返回調(diào)用程序,入口參數(shù):al=退出碼。通過(guò)以上的幾個(gè)功能調(diào)用就可以實(shí)現(xiàn)點(diǎn)擊esc鍵退出程序的功能。 3 主程序流程圖 主程序流程圖如圖3-1所示。 圖3-1 主程序流程圖主程序?qū)讉€(gè)子程序有效的結(jié)合在一起,其中要注意的是最后一步(點(diǎn)擊esc退出),因?yàn)槿绻O(shè)計(jì)不好循環(huán),會(huì)影響系統(tǒng)提取時(shí)間,導(dǎo)致時(shí)間停止不走動(dòng),綜上所述,便基本完成了設(shè)計(jì)要求。4 調(diào)試過(guò)程(1)編譯匯編源文件,命名為徐聯(lián)杏.asm。(2)asm將生成一個(gè)obj文件,如果有程序有錯(cuò)誤,則提示不能生成obj文件,那么就要檢查源程序中

11、的錯(cuò)誤,并改正。(3)點(diǎn)擊連接,然后點(diǎn)擊運(yùn)行,即可顯示結(jié)果。結(jié)果如圖4-1所示。 圖4-1 程序運(yùn)行結(jié)果(4)如果要退出程序,點(diǎn)擊esc鍵即可。分析:調(diào)試屏幕上顯示的提示語(yǔ)與系統(tǒng)時(shí)間的位置都可通過(guò)前面介紹的內(nèi)容來(lái)改變,點(diǎn)擊esc鍵退出也可改變,同時(shí)字體顏色也可選為自己喜歡的顏色。5 編程時(shí)遇到的問(wèn)題及解決方法在課程設(shè)計(jì)中遇到的最大的困難是如何產(chǎn)生中斷,用什么形式的中斷實(shí)現(xiàn)功能,對(duì)中斷向量表的裝載還比較模糊,對(duì)中斷的初始化、具體設(shè)置、中斷返回還不是很清楚,程序設(shè)計(jì)一度陷入停滯狀態(tài),不知如何是好。我們又重新翻閱了周佩玲主編的微機(jī)原理與接口技術(shù)及網(wǎng)上的很多關(guān)于中斷的介紹與例題,重點(diǎn)研究了中斷過(guò)程,通

12、過(guò)對(duì)這一內(nèi)容的學(xué)習(xí),我們終于對(duì)中斷有了詳細(xì)的認(rèn)識(shí),在設(shè)計(jì)程序時(shí)也容易了很多,最后在設(shè)計(jì)退出程序的時(shí)候也遇到了一點(diǎn)困難,設(shè)計(jì)的程序可以點(diǎn)擊esc鍵退出,但時(shí)間卻不走動(dòng)了,但通過(guò)對(duì)程序的修改與調(diào)試,最后加入循環(huán)后便解決了這一問(wèn)題。6 心得體會(huì)這次課程設(shè)計(jì)歷時(shí)兩周,從中發(fā)現(xiàn)了自己很多問(wèn)題,看見(jiàn)自己的知識(shí)有很多漏洞,雖然做過(guò)微機(jī)原理實(shí)驗(yàn),但實(shí)際經(jīng)驗(yàn)還是很缺乏。說(shuō)到設(shè)計(jì),很多人都有恐懼感,但我一聽(tīng)見(jiàn)設(shè)計(jì)就很高興,當(dāng)看到自己設(shè)計(jì)的東西在軟件上仿真成功的時(shí)候,就有一種成就感。在這次的設(shè)計(jì)中,我感覺(jué)有同學(xué)們的幫助很重要,這次設(shè)計(jì)的時(shí)間雖然有些倉(cāng)促,但是我們的熱情依然很高,在大量資料和老師的幫助下選定了方案,之

13、前想的可能是用硬件來(lái)實(shí)現(xiàn),但后來(lái)聽(tīng)老師一講,知道原來(lái)是用純軟件來(lái)實(shí)現(xiàn),一開(kāi)始一點(diǎn)頭緒都沒(méi)有,但查了一些資料后,心里就有些底了。其實(shí)在編程中,我們借鑒了很多現(xiàn)成的子程序,比如二進(jìn)制數(shù)的轉(zhuǎn)換,這些子程序的設(shè)計(jì)是固定的,因此可以直接從指導(dǎo)資料中調(diào)用,至于設(shè)置光標(biāo)的子程序,只需要修改幾個(gè)參數(shù)就可以,這大大方便了我們的設(shè)計(jì),為我們節(jié)省了很多的時(shí)間。平常上課都只是聽(tīng)老師講講,覺(jué)的很多東西很簡(jiǎn)單,但真正做起來(lái),真的發(fā)現(xiàn)了很多問(wèn)題,后來(lái)通過(guò)自己查資料和摸索解決了一些問(wèn)題。剛開(kāi)始的時(shí)候,做起來(lái)也比較得心應(yīng)手,但是程序的原理與結(jié)構(gòu)必須明白,這并不是為了應(yīng)付答辯,而是如果只知道原理,那么萬(wàn)一編程的時(shí)候有一點(diǎn)錯(cuò)誤,就

14、沒(méi)有辦法完成任務(wù)。通過(guò)這次課程設(shè)計(jì),使我對(duì)系統(tǒng)時(shí)鐘顯示的程序有了更深一步的了解,對(duì)它的各個(gè)模塊都有所研究,把死板的課本知識(shí)變得生動(dòng)有趣,激發(fā)了學(xué)習(xí)的積極性,加深了對(duì)理論知識(shí)的理解,以前對(duì)匯編語(yǔ)言的認(rèn)識(shí)比較模糊,現(xiàn)在通過(guò)自己做實(shí)驗(yàn),基本了解了它的使用,培養(yǎng)了自己的實(shí)踐動(dòng)手能力。對(duì)于課程設(shè)計(jì)我總結(jié)了五點(diǎn):首先它是一個(gè)對(duì)知識(shí)回顧的過(guò)程,而我們?cè)趶?fù)習(xí)中還能學(xué)到新的知識(shí);第二是開(kāi)拓了我們的思路,為了使我們的設(shè)計(jì)更簡(jiǎn)單更完善,我們大家都開(kāi)動(dòng)了腦筋,在不斷的嘗試中獲得最終方案;第三是給了我們實(shí)踐的機(jī)會(huì),我就是因?yàn)槿鄙賹?shí)踐經(jīng)驗(yàn),以為在課堂上學(xué)的東西就可以解決問(wèn)題,致使之后在編程中預(yù)到了很多困難;第四是給了我們

15、創(chuàng)新的機(jī)會(huì),老師讓我們大膽的去創(chuàng)新,去嘗試,使我們有動(dòng)力有信心去完成自己的想法;第五是使我感覺(jué)到了學(xué)無(wú)止境,真的是一山還比一山高,好的方案層出不窮,這使我在以后的學(xué)習(xí)中不會(huì)再只限于課本,要多查資料,多學(xué)習(xí),才能完善自己。 通過(guò)這次設(shè)計(jì),我想說(shuō),我真的付出很多,確實(shí)很辛苦,但我很開(kāi)心最后我認(rèn)為大學(xué)應(yīng)該多做一些這樣的課題,我相信我們會(huì)越做越好。參考文獻(xiàn)1 周佩玲,彭虎,傅忠謙微機(jī)原理與接口技術(shù)北京:電子工業(yè)出版社,20062 雷麗文,朱曉華,蔡征宇,繆均達(dá)微機(jī)原理與接口技術(shù)北京:電子工業(yè)出版社,19983 李文英,劉星,宋蘊(yùn)新,李勤微機(jī)原理與接口技術(shù)北京:清華大學(xué)出版社,20014 楊吉祥微型計(jì)算

16、機(jī)原理西安:電子科技大學(xué)出版社,20015 仇玉章等32位微型計(jì)算機(jī)原理與接口技術(shù)北京:清華大學(xué)出版社,2000附錄系統(tǒng)時(shí)鐘顯示源程序: stack segment stack dw 200 dup (?) stack endsdata segment space db 1000 dup ( ) pattern db 6 dup ( ),02ah,26 dup (02ah),02ah,6 dup ( ) db 6 dup ( ),023h,26 dup (20h),023h,6 dup ( ) db 6 dup ( ),02ah,26 dup (02ah),02ah,6 dup ( ) dbu

17、ffer db 8 dup (:),12 dup ( ) dbuffer1 db 20 dup ( ) str db 0dh,0ah, please input time(t) or quit(esc): $ data endscode segment assume cs:code,ds:data,ss:stackstart : mov ax,0001h ;設(shè)置顯示方式為40*25彩色文本方式 int 10h mov ax,data mov ds,ax mov es,ax mov bp,offset space mov dx,0b00h mov cx,1000 mov bx,0040h mov

18、 ax,1300h int 10h mov bp,offset pattern ;顯示矩形條 mov dx,0b00h mov cx,120 mov bx,004eh mov ax,1301h int 10h lea dx,str ;顯示提示信息 mov ah,9 int 21h mov ah,1 ;從鍵盤(pán)輸入單個(gè)字符 int 21hlop: call setcurs ;主程序,設(shè)置光標(biāo)位置,輸出時(shí)間 mov ah,2ch ;調(diào)用系統(tǒng)時(shí)間 int 21h push dx ;dx中的時(shí)間秒和百分秒入棧 mov dl,ch mov dh,0 call bin10out ;調(diào)用二進(jìn)制轉(zhuǎn)十進(jìn)制輸出時(shí)間

19、小時(shí) mov dl,: mov ah,2 int 21h mov dl,cl mov dh,0 call bin10out ;輸出時(shí)間分鐘 mov dl,: mov ah,2 int 21h pop dx ;秒和百分秒出棧 mov dl,dh mov dh,0 call bin10out ;輸出時(shí)間秒esc: mov ah,0bh ;若輸入esc,則退出程序 int 21h cmp al,0ffh jnz lop ;循環(huán)輸出每個(gè)當(dāng)前時(shí)間 mov ah,8 int 21h cmp al,1bh je exit jmp esc exit: mov ah,4ch int 21hclrscr proc

20、 ;清屏子程序 push ax push bx mov ax,0600h ;al=0整個(gè)窗口空白 mov bh,0fh sub cx,cx ;左上角行號(hào),列號(hào) mov dx,184fh ;右下角行號(hào),列號(hào) int 10h pop bx pop ax retclrscr endp setcurs proc ;設(shè)置光標(biāo)位置 push ax push bx push dx mov ah,02h ;調(diào)用bios2號(hào)中斷 sub bh,bh ;在第0頁(yè)中定位 mov dx,0c0eh int 10h pop dx pop bx pop ax retsetcurs endp bin10out proc ;二進(jìn)制轉(zhuǎn)十進(jìn)制ascuii碼輸出子程序 push di push dx push cx push ax mov cx,0 lea di,dbuffer1 ;去緩沖區(qū)首地址bin1: push cx mov ax,dx mov dx,0 mov cx,

溫馨提示

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