2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p>  匯編語言課程設(shè)計(jì)報告</p><p>  課程名稱: 匯編語言課程設(shè)計(jì) </p><p>  設(shè)計(jì)題目: 顯示系統(tǒng)時間 </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ì)時間: 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é)會用匯編語言編寫一個較完整的實(shí)用程序, 培養(yǎng)自己的動手操作能力。</p><p>  5&

6、#160;. 學(xué)習(xí)程序設(shè)計(jì)的基本思路和方法,編程、調(diào)試、撰寫報告等。</p><p>  二、程序內(nèi)容: 第一部分:定義顯示界面。 第二部分:調(diào)用系統(tǒng)時間,并將調(diào)用的用二進(jìn)制表示的時間數(shù)轉(zhuǎn)換成ASCII碼,并將時間數(shù)存入顯存區(qū)。(顯存的起始地址:B8000H) 第三部分:將存在系統(tǒng)內(nèi)存區(qū)的時間用字符串的形式顯示出來。</p><p>  第四部分:定時響鈴功能,

7、指定時間和倒計(jì)時。響鈴為一首自寫音樂。</p><p>  注意:1、如果用圖形方式顯示更好,</p><p>  2、注意設(shè)置顯示時候的背景顏色</p><p>  3、可以增加鍵盤設(shè)置的功能,設(shè)置顯示顏色,顯示位置</p><p>  4、鬧鈴如果不關(guān)閉,可以設(shè)置為間隔1分鐘再響三、程序設(shè)計(jì)原理 首先在數(shù)據(jù)段開辟一顯示緩沖區(qū),用

8、來存儲系統(tǒng)時間。調(diào)用BIOS中斷,返回系統(tǒng)時間,并將來返回的二進(jìn)制時間轉(zhuǎn)換成ASCII碼,方便時間顯示時的調(diào)用。分別將來小時數(shù)、分鐘數(shù)、秒數(shù)存入顯示緩沖區(qū)。通過寫顯存將時間顯示出來。由于獲取了的系統(tǒng)時間不會自動刷新,所以我們要設(shè)計(jì)成刷新的方式來不斷獲取系統(tǒng)的時間,這樣就形成了會跳動的電子鐘了。定時功能主要指定一個報警時間作為比較,到了需要響鈴時間調(diào)用一個音樂程序表示時間到。</p><p><b>  

9、四、程序流程圖</b></p><p>  圖一 主程序流程圖 圖二 中斷處理程序流程圖 </p><p><b>  五、程序代碼</b></p><p>  eraserScreen macro ab ;;清除過時顯示的時間</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é)生個人信息</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è)備輸入一個字符,在此是用戶輸入所選菜單 </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 (相等的時候跳轉(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,即重新輸入一個字符(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è)置鬧鐘鬧鈴時間</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>  ;-----------;輸入需鬧鈴時間</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>  ;-------- ;以下為輸入有效值的判斷,時針在00-23有效,分針在00-59有效</p><p>  .if cx==2 ;輸入時高位 </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 ;輸入時低位 </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)時間 </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)時間,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)時間,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 ;顯示時間</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] ;比較時針</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ì)時</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、盤控制時間顯示位置 </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>  ; ---------------------------------------------------------- 顯示時間子程序 </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ì)時子程序</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 ;給定時器2送控制字</p><p>  OUT 43H,AL ;2號控制寄存器</p><p><b>  MOV AL,BL</b></p><p>  OUT 42H,AL ;給定時器送計(jì)數(shù)值低字節(jié)</p><p><b>  MOV AL,BH</b&

134、gt;</p><p>  OUT 42H,AL ;給定時器送計(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>  ; ----------------------------------------------------------延時子程序</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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論