

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 電子鬧鐘</b></p><p><b> 課題內(nèi)容和要求</b></p><p> 題目描述:利用匯編語言實(shí)現(xiàn)一個(gè)可以在顯示器上顯示時(shí)、分、秒的電子時(shí)鐘,并能提供整點(diǎn)報(bào)時(shí)功能。</p><p> 基本要求:(1)設(shè)計(jì)一個(gè)基本的具有顯示時(shí)、分、秒的電子時(shí)鐘。</p><
2、;p> (2)到整點(diǎn)或預(yù)定的報(bào)警時(shí)間,能夠以不同的音樂進(jìn)行報(bào)時(shí),可以自行設(shè)置鬧鐘報(bào)警時(shí)間; </p><p> ?。?)實(shí)物演示時(shí)要求講出程序原理和設(shè)計(jì)思想;</p><p> ?。?)程序運(yùn)行良好、界面清晰。</p><p> 提高要求:設(shè)計(jì)一個(gè)具有鐘面、分針、秒針的指針式鐘表,在圓盤上有均勻分布的60根刻度,對(duì)應(yīng)小時(shí)的刻度用不同顏色的長刻度區(qū)別,并且將
3、12、3、6、9對(duì)應(yīng)的拉丁文繪制于表盤外。</p><p> 設(shè)計(jì)提示:(1)指針式鐘表的繪制。將屏幕設(shè)置成圖形顯示方式,通過畫點(diǎn)、畫線,畫圓等基本程序完成鐘表的繪制。表盤圓周上刻度線段兩端點(diǎn)坐標(biāo)計(jì)算是鐘表繪制的核心部分。</p><p> (2)秒針、分針、時(shí)針的轉(zhuǎn)動(dòng)。是經(jīng)過一定的延時(shí)時(shí)間,通過在下一位置重新畫一個(gè),在原來的位置用背景色覆蓋的方法實(shí)現(xiàn)。</p><
4、p> ?。?)音樂的演奏。利用CPU支持的外圍電路8254與8255,通過匯編程序改變8255的PB0,PB1口,接通揚(yáng)聲器,使得計(jì)算機(jī)能夠發(fā)出一定頻率的聲音,同時(shí)通過8254的與8255連接的2號(hào)計(jì)數(shù)器控制指定頻率,從而達(dá)到控制揚(yáng)聲器的音樂的效果。通過建立適當(dāng)?shù)难訒r(shí)程序達(dá)到一定時(shí)間后則改變2號(hào)計(jì)數(shù)器產(chǎn)生的方波的頻率,實(shí)現(xiàn)音樂程序的演奏。</p><p><b> 二、需求和思路分析</b
5、></p><p> 經(jīng)分析本次程序設(shè)計(jì)的主要內(nèi)容主要分為如下的幾個(gè)模塊:</p><p> 當(dāng)前時(shí)間的獲取并顯示,碼制轉(zhuǎn)換,設(shè)定鬧鐘報(bào)鳴的時(shí)間,不同頻率的鬧鈴聲,鐘表的繪制和并實(shí)現(xiàn)動(dòng)態(tài)等模塊。其中鐘表的繪制和動(dòng)態(tài)走動(dòng)部分比較難是本次課程設(shè)計(jì)的提高部分,且改模塊可單獨(dú)形成一個(gè)模塊,所以放到最后進(jìn)行考慮</p><p> 1時(shí)間的獲取可以用int 21h的
6、2ch功能,該功能調(diào)用DOS時(shí)間調(diào)用功能,功能號(hào):2cH,小時(shí),分鐘,秒數(shù)分別保存在,保存的形式是以二進(jìn)制的形式,故顯示時(shí)要</p><p> 2碼制轉(zhuǎn)化利用ascii碼與二進(jìn)制碼的關(guān)系ascii=二進(jìn)制+30H</p><p> 3鬧鐘鳴叫主要利用8254的二號(hào)計(jì)數(shù)器和8255的PB0和PB1來設(shè)定</p><p> 4 鬧鐘的表盤,指針的繪制,并實(shí)現(xiàn)時(shí)針,
7、分針,秒針的走動(dòng)。主要通過過圖形的畫點(diǎn)進(jìn)行操作,并通過在固定的區(qū)域內(nèi)不斷的刷屏來實(shí)現(xiàn)。</p><p><b> 三、概要設(shè)計(jì) </b></p><p> (一)算法設(shè)計(jì)及重要程序流程圖</p><p><b> 1)程序整體流程</b></p><p> 2)edittime子程序流程圖
8、</p><p> 2)editmusic子程序</p><p> 3)打開和關(guān)閉揚(yáng)聲器</p><p> 此處重要用到了8254和8255的相關(guān)知識(shí),書中P238有相關(guān)代碼</p><p> 首先,應(yīng)該讀出8255的PB端口當(dāng)前的狀態(tài),將PB0和PB1分別置1,以讀修改寫的方式修改PB0和PB1接通揚(yáng)聲器。</p>&
9、lt;p> 其次,利用8254的2號(hào)計(jì)數(shù)器產(chǎn)生XXX Hz 的方波,此處計(jì)數(shù)初值利用公式</p><p> N=fclk1 /fout2</p><p> 對(duì)8254先寫低8位,再寫高8位,out2輸出方波</p><p> 最后,將8255的PB0和PB1回復(fù)位00,用AND AL,11111100B來修改</p><p>
10、 4)bctd子程序的流程圖</p><p> 該子程序程序功能主要是實(shí)現(xiàn)二進(jìn)制轉(zhuǎn)化成相應(yīng)BCD碼</p><p><b> AX輸入?yún)?shù) </b></p><p> AX輸出參數(shù),存放調(diào)整過的BCD碼 </p><p><b> (二)變量名聲明</b></p><p&
11、gt; data segment</p><p> mess1 db ' ****************ASM ASSIGNMENT**************** ',0ah,0dh</p><p> db ' ',0ah,0dh</p><p> db ' ***************ELECTRONIC CL
12、OCK*************** ',0ah,0dh</p><p> db ' ',0ah,0dh</p><p> db ' ',0ah,0dh</p><p> db ' *******Press C or c to edit the alarm time Press M or m to chang
13、e sound!**** ',0ah,0dh</p><p> db ' ',0ah,0dh</p><p> db ' ***********Press ESC button to exit*********** ',0ah,0dh,'$'</p><p> tn db 'Please inpu
14、t the new time (hh:mm:ss):',0dh,0ah,'$'</p><p> musicmess db 'Please choose the type of music:1(fast) 2(middle) 3(slow)',0dh,0ah,'$'</p><p> mess2 db '*******Ti
15、me is:',0ah,0dh,'$'</p><p> t_buff db 40 ;在數(shù)據(jù)段開一段時(shí)間顯示緩沖區(qū)</p><p><b> db ?</b></p><p> db 40 dup (?)</p><p> temphor db ? ;存放鍵入的定時(shí)時(shí)間的小時(shí)</p&
16、gt;<p> tempmin db ? ;存放鍵入的定時(shí)時(shí)間的分鐘</p><p> tempsec db ? ;存放鍵入的定時(shí)時(shí)間的秒數(shù)</p><p> music dw 800 ;存放默認(rèn)音樂的頻率數(shù)</p><p><b> data ends</b></p><p> stack s
17、egment </p><p> db 100 dup(?) </p><p> stack ends </p><p><b> 四、詳細(xì)設(shè)計(jì) </b></p><p> 課題任務(wù)實(shí)現(xiàn)的源程序(可以是一組源程序,每個(gè)功能模塊采用不同的函數(shù)實(shí)現(xiàn)),源程序要按照寫程序的規(guī)則來編寫。要結(jié)構(gòu)清晰,重點(diǎn)函數(shù)的重點(diǎn)變量,
18、重點(diǎn)功能部分要加上清晰的程序注釋。</p><p><b> (一)</b></p><p><b> 1主函數(shù)代碼</b></p><p> code segment </p><p> assume cs:code,ss:stack,ds:data ;確定各個(gè)邏輯段的類型 </p&
19、gt;<p><b> start: </b></p><p> mov ax,data </p><p> mov ds,ax </p><p> call clear ;調(diào)用清屏子程序 </p><p> display: ;時(shí)間顯示部分 </p><p> mov
20、ax,data </p><p> mov ds,ax </p><p> mov bx,offset t_buff ;送t_buff的偏移地址到BX </p><p> mov ah,2ch ;調(diào)用DOS時(shí)間調(diào)用功能,功能號(hào):2cH,小時(shí),分鐘,秒數(shù)分別保存在CH,CL,DH中 </p><p> int 21h ;判斷時(shí)間是否相等
21、</p><p> sub dh,1 ;秒鐘+1修正</p><p> CALL CHECK</p><p> mov al,ch ;小時(shí)數(shù)設(shè)定 </p><p><b> mov ah,0 </b></p><p&g
22、t; call bctd ;調(diào)用進(jìn)制轉(zhuǎn)換子程序 二進(jìn)制轉(zhuǎn)BCD碼子程序</p><p><b> push ax </b></p><p> and al,0f0h ;選取al高四位 </p><p> mov cl,4 ;設(shè)置右循環(huán)的次數(shù) </p><p> rol al,cl ;右循環(huán) </p>
23、<p> or al,30h ;加30h得到ACSII碼 </p><p> mov [bx],al ;將得到的結(jié)果送到t_buff緩沖區(qū) </p><p> inc bx ;BX自加1,指針指向下一個(gè)緩沖區(qū)的下一個(gè)地址 </p><p><b> pop ax </b></p><p> and
24、 al,0fh ;選取低四位 </p><p> or al,30h </p><p> mov [bx],al ;將轉(zhuǎn)換后的低四位值送入緩沖區(qū)的第二個(gè)地址 </p><p><b> inc bx </b></p><p> ;------------------------------------------
25、---------------- </p><p> mov al,':' ;顯示分隔符號(hào) </p><p> mov [bx],al </p><p><b> inc bx </b></p><p> ;---------------------------------------------
26、---------- </p><p> mov ah,2ch </p><p><b> int 21h </b></p><p> mov al,cl ;分鐘數(shù)設(shè)定 </p><p><b> mov ah,0 </b></p><p> call bctd &
27、lt;/p><p><b> push ax </b></p><p> and al,0f0h </p><p><b> mov cl,4 </b></p><p> rol al,cl </p><p> or al,30h </p><p&g
28、t; mov [bx],al </p><p><b> inc bx </b></p><p><b> pop ax </b></p><p> and al,0fh </p><p> or al,30h </p><p> mov [bx],al <
29、/p><p><b> inc bx </b></p><p> ;------------------------------------------------------------------------- </p><p> mov al,':' ;顯示分隔符號(hào) </p><p> mov
30、[bx],al </p><p><b> inc bx </b></p><p> ;------------------------------------------------------------------------- </p><p> mov ah,2ch ;秒設(shè)定 </p><p><b
31、> int 21h </b></p><p> mov al,dh </p><p><b> mov ah,0 </b></p><p> call bctd </p><p><b> push ax </b></p><p> and al
32、,0f0h </p><p><b> mov cl,4 </b></p><p> rol al,cl </p><p> or al,30h </p><p> mov [bx],al </p><p><b> inc bx </b></p>&
33、lt;p><b> pop ax </b></p><p> and al,0fh </p><p> or al,30h </p><p> mov [bx],al </p><p><b> inc bx </b></p><p> ;---------
34、------------------------------------------------------------- </p><p> mov al,'$' ;將字符串的結(jié)束位送至顯示緩沖區(qū)的最后一位 </p><p> mov [bx],al </p><p> ;-----------------------------------
35、------------------------------------- </p><p> push bx ;置光標(biāo)位置 ,AH=2,BH=0,DH跟DL分別為行號(hào)與列號(hào),并入棧保護(hù)BX </p><p> mov ah,2 ;0~1用于此程序快下邊的 在下面的兩個(gè)置光標(biāo)位置</p><p><b> mov bh,0 </b>
36、</p><p> mov dh,17 </p><p> mov dl,41 </p><p><b> int 10h </b></p><p><b> pop bx </b></p><p> lea dx,t_buff ;送t_buff偏移地址到DX
37、,并調(diào)用DOS顯示功能,功能號(hào)為9 </p><p><b> mov ah,9 </b></p><p> int 21h ;至此當(dāng)前事前時(shí)間的顯示功能結(jié)束!</p><p> push bx ;置光標(biāo)位置 </p><p><b> mov ah,2 </b
38、></p><p><b> mov bh,0 </b></p><p><b> mov dh,0 </b></p><p><b> mov dl,0 </b></p><p><b> int 10h </b></p>&
39、lt;p><b> pop bx </b></p><p> lea dx,mess1 </p><p><b> mov ah,9 </b></p><p> int 21h ; 顯示mess1</p><p> push bx ;置光標(biāo)位置
40、 </p><p><b> mov ah,2 </b></p><p><b> mov bh,0 </b></p><p> mov dh,17 </p><p> mov dl,21 </p><p><b> int 10h </b>&
41、lt;/p><p><b> pop bx </b></p><p> lea dx,mess2 </p><p><b> mov ah,9 </b></p><p> int 21h ; 顯示mess2</p><p> ;----------
42、------------------- </p><p> call delay1 </p><p> mov ah,1 ;調(diào)用鍵盤I/O中斷功能號(hào)1,獲取鍵值到AL </p><p><b> int 16h </b></p><p> cmp al,'c' ;是c鍵,轉(zhuǎn)到時(shí)間修改程序 <
43、/p><p> je edittime </p><p> cmp al,'C' ;是C鍵,轉(zhuǎn)到時(shí)間修改程序 </p><p> je edittime</p><p> cmp al,'m';是m鍵,轉(zhuǎn)到鬧鈴種類設(shè)定程序</p><p> je editmusic</p&g
44、t;<p> cmp al,'M' ;是M鍵,轉(zhuǎn)到鬧鈴種類設(shè)定程序</p><p> je editmusic </p><p> cmp al,1bh </p><p> jz quit ;是ESC鍵,退出程序 </p><p> jmp display </p><p>&l
45、t;b> quit: </b></p><p> mov ah,4ch ;程序終止功能號(hào) </p><p><b> int 21h </b></p><p><b> ret </b></p><p><b> 2功能函數(shù)代碼</b></p&
46、gt;<p> 二進(jìn)制轉(zhuǎn)BCD碼子程序</p><p> bctd proc near ;二進(jìn)制轉(zhuǎn)BCD碼子程序 </p><p><b> ;AX輸入?yún)?shù) </b></p><p> ;AX輸出參數(shù),存放調(diào)整過的BCD碼 </p><p> mov dx,ax </p><p
47、><b> mov ax,0 </b></p><p> mov cx,16 ;設(shè)循環(huán)次數(shù) </p><p><b> bctd1: </b></p><p> clc ;清進(jìn)位標(biāo)志C </p><p> rcl dx,1 ;通過進(jìn)位的循環(huán)右移 </p><p&g
48、t; adc al,al ;帶進(jìn)位加法 </p><p> daa ;加法的十進(jìn)制調(diào)整 </p><p> xchg al,ah ;交換高、低八位 </p><p> adc al,al </p><p><b> daa </b></p><p> xchg al,ah </p
49、><p> loop bctd1 ;循環(huán)次數(shù)保存在CX里 </p><p><b> ret </b></p><p> bctd endp </p><p> 2)清屏clear子程序</p><p> clear proc near </p><p> push
50、 ax ;入棧保護(hù)現(xiàn)場 </p><p><b> push bx </b></p><p><b> push cx </b></p><p><b> push dx </b></p><p> mov ax,0600h ;ah=06(滾動(dòng))al=00(全屏空白)
51、</p><p> mov bh,3eh ;設(shè)置背景顏色(2)和前景顏色(e) </p><p> sub cx,cx </p><p> mov dx,5f5fh </p><p><b> int 10h </b></p><p> pop dx ;出?;謴?fù)現(xiàn)場 </p>
52、<p><b> pop cx </b></p><p><b> pop bx </b></p><p><b> pop ax </b></p><p><b> ret </b></p><p> clear endp <
53、;/p><p> 3)精確延遲時(shí)間子程序delay1</p><p> delay1 PROC ;精確延遲時(shí)間子程序 </p><p> MOV DX,04ffh ;循環(huán)次數(shù) </p><p> up: XOR CX,CX </p><p><b> a: NOP </b></p>
54、;<p><b> LOOP a </b></p><p><b> DEC DX </b></p><p><b> JNZ up </b></p><p><b> RET </b></p><p> delay1 ENDP &
55、lt;/p><p> 4)設(shè)定定時(shí)時(shí)鐘edittime子程序</p><p> edittime proc ;時(shí)間修改子程序 </p><p> push ax ;入棧保護(hù)數(shù)據(jù) </p><p><b> push bx </b></p><p><b> push cx <
56、/b></p><p><b> push dx </b></p><p><b> pushf </b></p><p> mov dx,offset tn ;顯示修改時(shí)間的格式提示 </p><p> mov ah,09h </p><p><b>
57、; int 21h </b></p><p> mov dx,offset t_buff ;數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)輸入 </p><p> mov ah,0ah </p><p><b> int 21h </b></p><p> and dx,0h </p><p> lea
58、 bx,t_buff </p><p><b> inc bx </b></p><p><b> inc bx </b></p><p><b> inc bx</b></p><p> mov dh,[bx] </p><p> sub d
59、h,30h </p><p><b> inc bx </b></p><p> mov dl,[bx] </p><p> sub dl,30h </p><p> mov cl,10 </p><p> mov al,dh </p><p><b>
60、 mul cl </b></p><p><b> add al,dl</b></p><p> mov ch,al </p><p> mov temphor,al</p><p><b> inc bx </b></p><p><b>
61、 inc bx </b></p><p> mov dh,[bx] </p><p> sub dh,30h </p><p><b> inc bx </b></p><p> mov dl,[bx] </p><p> sub dl,30h </p><
62、;p> mov cl,10 </p><p> mov al,dh </p><p><b> mul cl </b></p><p> add al,dl </p><p> mov cl,al </p><p> mov tempmin,al</p><p
63、><b> inc bx </b></p><p><b> inc bx </b></p><p> mov dh,[bx] </p><p> sub dh,30h </p><p><b> inc bx </b></p><p>
64、 mov dl,[bx] </p><p> sub dl,30h </p><p> mov cl,10 </p><p> mov al,dh </p><p><b> mul cl </b></p><p> add al,dl </p><p> m
65、ov dh,al </p><p> mov tempsec,al</p><p> popf ;出?;謴?fù)數(shù)據(jù) </p><p><b> pop dx </b></p><p><b> pop cx </b></p><p><b> pop bx &
66、lt;/b></p><p><b> pop ax </b></p><p> jmp start </p><p><b> ret </b></p><p> edittime endp</p><p> 5)檢驗(yàn)定時(shí)時(shí)間是否到CHECK子程序</
67、p><p> CHECK PROC</p><p><b> push ax</b></p><p><b> push bx</b></p><p> cmp ch,temphor ;設(shè)置定點(diǎn)報(bào)時(shí)</p>&
68、lt;p><b> jne cf</b></p><p> cmp cl,tempmin</p><p><b> jne cf</b></p><p> cmp dh,tempsec</p><p> jne xiang</p><p><
69、b> cf1 </b></p><p> cmp cl,0 ;設(shè)置整點(diǎn)報(bào)時(shí)</p><p><b> jne cf</b></p><p><b> cmp dh,0</b></p><
70、p><b> jne cf</b></p><p> xiang: </p><p> CALL OPEN ;打開揚(yáng)聲器</p><p><b> PUSH DX</b></p><p><
71、b> PUSH CX </b></p><p> MOV DX,12H</p><p> MOV AX,34DEH</p><p> mov cx,music</p><p><b> DIV CX</b></p><p> OUT 42H,AL</p>
72、<p><b> MOV AL,AH</b></p><p> OUT 42H,AL</p><p><b> MOV AH,1</b></p><p><b> INT 21H</b></p><p><b> POP CX</b>
73、;</p><p><b> POP DX</b></p><p> CALL CLOSE ;關(guān)閉揚(yáng)聲器</p><p><b> CF: </b></p><p><b> pop bx</b
74、></p><p><b> POP AX</b></p><p><b> RET</b></p><p> CHECK ENDP</p><p> 6)開啟和關(guān)閉揚(yáng)聲器子程序open和close</p><p> OPEN PROC </p>
75、<p><b> PUSH AX</b></p><p><b> IN AL,61H</b></p><p><b> OR AL,03H</b></p><p> OUT 61H,AL</p><p><b> POP AX</b
76、></p><p><b> RET</b></p><p> OPEN ENDP </p><p> CLOSE PROC</p><p><b> PUSH AX</b></p><p> IN AL,61H</p><p>
77、 AND AL,0FCH</p><p> OUT 61H,AL</p><p><b> POP AX</b></p><p><b> RET</b></p><p> CLOSE ENDP</p><p> 6)設(shè)置鬧鐘音樂種類子程序editmusic&l
78、t;/p><p> Editmusic proc</p><p> push ax ;入棧保護(hù)數(shù)據(jù) </p><p><b> push bx </b></p><p><b> push cx </b></p><p><b> push dx </b
79、></p><p><b> pushf </b></p><p> mov dx,offset musicmess ;顯示修改音樂的種類提示 </p><p> mov ah,09h </p><p><b> int 21h </b></p><p> m
80、ov dx,offset t_buff ;數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)輸入 </p><p> mov ah,0ah </p><p><b> int 21h </b></p><p><b> and dx,0h</b></p><p> lea bx,t_buff</p><p
81、><b> inc bx</b></p><p><b> inc bx</b></p><p><b> inc bx</b></p><p> mov al,[bx]</p><p> cmp al,'1'</p><p&
82、gt; je m800to </p><p> cmp al,'2'</p><p> je m1600to</p><p> cmp al,'3'</p><p> je m3200to</p><p> m800to: mov music,800</p>
83、;<p><b> jmp t</b></p><p> m1600to: mov music,1600</p><p><b> jmp t</b></p><p> m3200to: mov music,3200 </p><p><
84、;b> t:</b></p><p> popf ;出?;謴?fù)數(shù)據(jù) </p><p><b> pop dx </b></p><p><b> pop cx </b></p><p><b> pop bx </b></p><p
85、><b> pop ax </b></p><p> jmp start </p><p><b> ret </b></p><p> Editmusic endp</p><p> 五、測(cè)試數(shù)據(jù)及其結(jié)果分析</p><p><b> 1)運(yùn)行畫
86、面</b></p><p><b> 2)測(cè)試結(jié)果</b></p><p><b> A)鍵入c或C </b></p><p> 會(huì)出現(xiàn)提示“Please input the new time (hh:mm:ss):”</p><p> 再輸入19:08:40。</p>
87、;<p> 回車結(jié)束后,在19:08:40時(shí),鬧鐘會(huì)鳴叫。</p><p><b> B)鍵入m或M</b></p><p> 會(huì)出現(xiàn)提示“Please choose the type of music:1(fast) 2(middle) 3(slow):”</p><p> 回車后會(huì)設(shè)定此時(shí)的鬧鈴鳴叫的頻率</p&
88、gt;<p> 六、調(diào)試過程中的問題</p><p> 本次程序設(shè)計(jì)中遇到了很多的問題,在設(shè)計(jì)每一個(gè)模塊都有遇到了一定的難度。</p><p> 首先關(guān)于,如何獲得系統(tǒng)當(dāng)前的時(shí)間,查閱了INT 21H,21H的2ch可以返回的的CH,CL,DH中分別為時(shí),分,秒但是都是二進(jìn)制的,故需要的進(jìn)行二進(jìn)制的碼制,寫代碼時(shí)發(fā)現(xiàn)通過寄存器移位的可以十分的節(jié)省寄存器的使用數(shù)目。
89、 </p><p> 其次在寫edittime的子程序是發(fā)生了一個(gè)錯(cuò)誤,很久才改正。我在使用21H的0AH向t_buffer內(nèi)存空間輸入字符串是,第一個(gè)位置是初始化時(shí)設(shè)定的t_buffer的最大長度,第二個(gè)位置是實(shí)際輸入的長度,我于是inc bx兩次(BX發(fā)的t_buffer的地址),以為能夠得到我的輸入的第一個(gè)字符,但是結(jié)果是錯(cuò)誤的,查了了很久才發(fā)現(xiàn),其實(shí)我在調(diào)用該子程序前的一個(gè)控制已經(jīng)輸入了一個(gè)字
90、符,該字符已經(jīng)存入了t_buffer,故此處應(yīng)該在inc bx。在editmusic的子程序中同樣會(huì)遇到類似問題。</p><p> 在編寫程序中由于經(jīng)常的要使用寄存器,有時(shí)沒有將其壓棧保存,導(dǎo)致寄存器的值發(fā)生了不可知的變化。所以一定要注意壓棧的使用</p><p> 在實(shí)驗(yàn)中使用masm開發(fā)環(huán)境,因?yàn)殚_始發(fā)現(xiàn)未來匯編的jne等功能的轉(zhuǎn)移范圍有限制,但是在masm中轉(zhuǎn)移的范圍很大。&l
91、t;/p><p> 本程序并沒有對(duì)一些異常輸入和其他的異常進(jìn)行處理,所以在程序的健壯性上有所欠缺。后來一直在看關(guān)于繪制鐘表的相關(guān)代碼,看懂了一半,但是還是沒能完成,希望以后有機(jī)會(huì)能夠完成</p><p> 七、專業(yè)課程設(shè)計(jì)總結(jié)</p><p> 通過本次的課程設(shè)計(jì),對(duì)匯編語言和微型計(jì)算機(jī)接口計(jì)數(shù),有了更加深刻認(rèn)識(shí),復(fù)習(xí)了關(guān)于8254和8255的相關(guān)知識(shí)。自己設(shè)計(jì)了
92、程序的全部的流程,對(duì)每個(gè)環(huán)節(jié)都要十分清楚。代碼完成后深切的感覺到,編寫代碼前的設(shè)計(jì)十分的重要。因?yàn)椋绻鹊酵瓿闪嗽S多功能后,再需要增添一個(gè)功能,或改寫一個(gè)光標(biāo)的位置,匯編語言的改寫比java等高級(jí)語言麻煩的多,十分不好改,畢竟匯編是一種低級(jí)語言,沒有面向?qū)ο蟮母拍?,很有可能大部分帶都重寫,?dǎo)致效率十分低。在程序的調(diào)試過程中熟悉了通過觀察各個(gè)寄存器內(nèi)值的變化來跟蹤程序的運(yùn)行是否有誤。</p><p> 在編寫程
93、序的時(shí)候發(fā)現(xiàn)許多的技巧比如要學(xué)會(huì)多利用左移或右移的操作,這樣會(huì)十分的節(jié)省寄存器的使用。另外當(dāng)你的寄存器不夠時(shí),可以先把幾個(gè)寄存器壓棧,進(jìn)行操作后在彈出棧,這樣可以解決寄存器不夠,或某些寄存器的值不知覺的被改變。</p><p> 總之這次的匯編實(shí)驗(yàn)比JAVA那部分要難一點(diǎn),還好最后把基本功能完成了,能夠?qū)崿F(xiàn)一個(gè)電子鬧鐘的定時(shí),整點(diǎn)鳴叫,設(shè)定鬧鐘鈴聲的種類。自己第一次編寫這么多的匯編的代碼。唯一有點(diǎn)遺憾的地方是,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 匯編語言課程設(shè)計(jì)
- 匯編語言課程設(shè)計(jì)
- 匯編語言課程設(shè)計(jì)報(bào)告
- 匯編語言課程設(shè)計(jì)報(bào)告
- 匯編語言課程設(shè)計(jì)安排
- 匯編語言課程設(shè)計(jì)報(bào)告
- 匯編語言課程設(shè)計(jì)報(bào)告a
- 匯編語言推箱子課程設(shè)計(jì)
- 打字游戲-匯編語言課程設(shè)計(jì)
- 匯編語言程序設(shè)計(jì)-課程設(shè)計(jì)
- 匯編語言程序設(shè)計(jì)課程設(shè)計(jì)
- 匯編語言動(dòng)畫設(shè)計(jì)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)電子琴 (匯編語言)
- 微機(jī)原理與匯編語言課程設(shè)計(jì)
- 匯編語言課程設(shè)計(jì)磁盤文件管理
- 匯編語言課程設(shè)計(jì)_提取系統(tǒng)時(shí)間
- 匯編語言課程設(shè)計(jì)《定時(shí)顯示系統(tǒng)》
- 匯編語言課程設(shè)計(jì)報(bào)告---打字游戲
- 匯編語言課程設(shè)計(jì)--代碼轉(zhuǎn)換程序
- 《匯編語言》課程設(shè)計(jì)---用匯編語言進(jìn)行音樂動(dòng)畫功能的實(shí)現(xiàn)
評(píng)論
0/150
提交評(píng)論