匯編語言課程設(shè)計(jì)----電子鬧鐘_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論