?? 課程設計5.asm
字號:
;********************************************************
; 通用微機發聲程序及動畫顯示
; Power BY WJZ
;
; 編譯環境 : 未來匯編1.0 編譯內核: TASM 4.1
; COPYRIGHT (C) 2005
;
; 本程序為2004學年度,廣東工業大學2002屆工業工程2班
; 伍健柱的微機課程設計作業,引用須保留版權信息
;********************************************************
DATA SEGMENT
PALETTE DB 764 DUP(?) ;調色板緩沖
palette_top db ?
palette_parameter1 db 3 dup(?) ;產生漸變色的三個參數
palette_parameter2 db 3 dup(?)
palette_parameter3 db 3 dup(?)
red_increment dw ? ;生成漸變色的臨時參數,分別為紅,綠,藍的增量
green_increment dw ?
blue_increment dw ?
ROCK_DIRECT DB 0 ;動畫滾屏的方向
COLOR DB 63,63,0,0,63,10 ;漸變色的色調值
DB 63,0,0,63,63,0
DB 38,63,0,63,63,63
DB 0,49,61,63,63,63
DB 0,0,63,0,63,63
DB 63,27,0,63,63,63
DB 63,0,56,63,0,0
DB 63,53,0,30,63,0
COLOR_POINT DW 0 ; 漸變色的色調值指針
mus1 dw 196,196,330,294,262,196 ; 第一支樂曲的音調值
dw 3 dup(196),330,294,262,220
dw 220,220,349,330,294,247
dw 247,392,392,349,294,330
dw 196,196,330,294,262,196
dw 196,196,330,294,262,220
dw 220,220,349,330,294,392,392,392
dw 392,440,392,349,294,262,20
dw 3 dup(330)
dw 3 dup(330)
dw 330,392,262,294,330
dw 5 dup(349),330,330
dw 3 dup(330),294,294,262,294,392
dw 3 dup(330)
dw 3 dup(330)
dw 330,392,262,294,330
dw 5 dup(349),330,330
dw 2 dup(330),392,392,349,294,262,-1
mus1time dw 5 dup(25),75,12,13,4 dup(25),75,5 dup(25),75,25
dw 4 dup(25),75,5 dup(25),75,5 dup(25),75,25
dw 12 dup(25),75,25,2 dup(25,25,50),4 dup(25),100
dw 2 dup(25),38,12,3 dup(25),12,13,5 dup(25),75
dw 2 dup(25,25,50),4 dup(25),100
dw 2 dup(25),38,12,3 dup(25),12,13,4 dup(25),75,0
mus2 dw 196,196 ; 第2支樂曲的音調值
dw 220,196,262
dw 247,196,196
dw 220,196,294
dw 262,196,196
dw 392,330,262
dw 247,220,349,349
dw 330,262,294
dw 262,-1
mus2time dw 25,25
dw 50,50,50
dw 100,25,25
dw 50,50,50
dw 100,25,25
dw 50,50,50
dw 50,50,25,25
dw 50,50,50
dw 100,0
mus3 dw 659,698 ; 第3支樂曲的音調值
dw 783,783,879,783
dw 657,587
dw 523,659,587,523
dw 440,440
dw 392,523,587
dw 659,783,879,659
dw 587
dw 0,659,698
dw 783,783,879,783
dw 659,587
dw 523,659,587,523
dw 440,440
dw 392,523,659
dw 587,523,440
dw 523
dw 0,659,783
dw 879,1024
dw 879,698,783,879
dw 783,659
dw 783,659,783
dw 879,1046
dw 1046,879,783,659
dw 587,-1
mus3time dw 50,50
dw 75,25,50,50
dw 150,50
dw 75,25,50,50
dw 150,50
dw 100,50,50
dw 50,50,50,50
dw 250
dw 50,50,50
dw 75,25,50,50
dw 150,50
dw 75,25,50,50
dw 150,50
dw 100,75,25
dw 100,50,50
dw 250
dw 50,50,50
dw 150,50
dw 50,50,50,50
dw 150,50
dw 100,50,50
dw 150,50
dw 50,50,50,50
dw 250,0
mus4 dw 392,587,523,392,349,330,392,392 ; 第4支樂曲的音調值
dw 494,330,392,587,523,440
dw 392,349,220,262,262,294,262
dw 294,330,392,392,349,329
dw 330,330,493,523
dw 440,392,349,349,349,330
dw 349,523,440,494,494,330
dw 392,587,523,392,349,330
dw 392,392,494,329
dw 392,587,523,440,392,349
dw 440,262,262,294,523
dw 494,440,392,392,349,330
dw 587,587,440,440
dw 330,392,349,0
dw 0,440,392,440,392,440,494
dw 294,262,-1
mus4time dw 25,25,50,50,25,75
dw 25,50,50,25
dw 25,25,50,50,25,50
dw 25,25,50,50,25
dw 25,25,50,50,25,75
dw 25,25,25,50
dw 25,25,50,50,25,25
dw 25,25,25,50,50,25
dw 25,25,50,50,25,75
dw 25,50,50,25
dw 25,25,50,50,25,50
dw 25,25,50,50,25
dw 25,25,50,50,25,75
dw 25,50,50,25
dw 25,25,100,50
dw 25,50,25,25,25,25,25
dw 50,175
dw 0
mus5 dw 0,0,523,587 ; 第5支樂曲的音調值
dw 659,659,659,587,523,659
dw 587,587,659,587
dw 523,523,523,440,523
dw 493,493,493,523,493
dw 440,493,523,523,493,440
dw 392,392,523,659,523,587
dw 659,659,587,523,587
dw 0,523,587
dw 659,659,659,587,523,659
dw 587,587,659,587
dw 523,523,523,440,523
dw 493,493,523,493
dw 440,493,523,523,493,440
dw 392,523,659,523,523,587
dw 659,587,587,659
dw 587,523,493,587
dw 523,523,-1
mus5time dw 50,50,50,50
dw 50,50,25,25,25,50
dw 25,50,25,25
dw 50,50,50,25,50
dw 25,100,25,25
dw 50,25,50,25,25,25
dw 25,25,25,75,25,25
dw 50,50,25,50,75
dw 50,50,50
dw 50,50,25,25,25,50
dw 25,50,25,25
dw 50,50,25,25,25,50
dw 25,50,25,25
dw 50,50,50,25,50
dw 25,100,25,25
dw 50,25,50,25,25,25
dw 50,25,50,25,25,25
dw 50,25,50,50
dw 50,50,25,50
dw 25,100,0
text1 db 'Choose Your Fucking Songs',0dh,0ah
db '按1,2,3,4,5選擇你要評分的Fucking Song',0dh,0ah
db '1.圣誕歌',0dh,0ah
db '2.祝你生日快樂',0dh,0ah
db '3.萬水千山總是情',0dh,0ah
db '4.奇洛李維斯回信',0dh,0ah
db '5.勇氣百分百(隱者亂太郎主題曲)',0dh,0ah
db'按esc退出',0ah,0dh,'$'
TEXT2 db '按0,1鍵給音樂打分',0dh,0ah ,0dh,0ah
db '0.Fucking Bad',0dh,0ah
db '1.This Song is Fucking Good',0dh,0ah ,0dh,0ah
db'共評分10次,任何時候按esc退出',0ah,0dh,'$'
TEXT3 DB '你是第'
N_MAN LABEL BYTE
DB 0H,0H
DB '位對此Music評分的Fucking Man,謝謝。還有'
LEFT_MAN LABEL BYTE
DB 10H
DB '次評分機會',0ah,0dh, 0ah,0dh ,'$'
SCORE:
DB '這支Music 的總得分為:'
GENERAL_SCORE LABEL BYTE
DB 0h,0H
db 0ah,0dh,0ah,0dh,'按Y鍵繼續對其他Music評分,按N鍵結束程序','$'
DATA ENDS
STACK SEGMENT
ST1 DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
INIT:
MOV AX,STACK
MOV SS,AX
MOV AX,DATA
MOV DS,AX
sds: CALL SETPOS ;復位坐標,setpos為復位坐標子程序
repeat:call cls ;清屏
MOV DX,OFFSET TEXT1
CALL DISPLAYTEXT
mov ah,1
int 21h
cmp al,'1'
je no1
cmp al,'2'
je no2
cmp al,'3'
je no3
cmp al,'4'
je no4
cmp al,'5'
je no5
cmp al,1bh
je endmu
jmp sds
no1: call cls
lea si,mus1
lea bp,mus1time
CALL INIT_GRA ;初始化屏幕模式,進入320*200,同屏256色,最大發色數26萬模式,即ah=13h
jmp go
no2: call cls
lea si,mus2
lea bp,mus2time
CALL INIT_GRA ;同上
jmp go
no3: call cls
lea si,mus3
lea bp,mus3time
CALL INIT_GRA ;同上
jmp go
no4: call cls
lea si,mus4
lea bp,mus4time
CALL INIT_GRA ;同上
jmp go
no5: call cls
lea si,mus5
lea bp,mus5time
CALL INIT_GRA ;同上
jmp go
go:
CALL JIEPAI ; 音調每改變一次,就調用一次名為jiepai的子程序。改變滾屏動畫的方向以及色調
mov di,[si]
cmp di,-1
je GRADE
mov bx,ds:[bp]
call sound ;發出聲調
add si,2
add bp,2
mov ah,0bh
int 21h
cmp al,0ffh
je TEMP_QUIT
jmp go
TEMP_QUIT:
call exit_gra
JMP QUIT
endmu: mov ax,4c00h
int 21h
GRADE:
CALL EXIT_GRA
MOV AL,0
MOV N_MAN,AL
MOV AL,10
MOV LEFT_MAN,AL
CALL CLS
CALL SETPOS
MOV AX,0
MOV AH,9
MOV DX,OFFSET TEXT2
INT 21H
MOV CX,10
MOV BX,0
G_LOOP:
MOV AH,7
INT 21H
CMP AL,'0'
JE TO_NEXT
CMP AL,'1'
JE INCREASE
CMP AL,1BH
JE TEMP_END
JMP SHORT G_LOOP
INCREASE:
MOV DL,1
MOV AX,BX
ADD AL,DL
AAA
MOV BX,AX
TO_NEXT:
MOV DL,[N_MAN+1]
MOV AX,1
ADD AL,DL
AAA
OR AX,3030H
MOV N_MAN,AH
MOV [N_MAN+1],AL
MOV AL,LEFT_MAN
MOV DL,1
SUB AL,DL
DAS
OR AX,30H
MOV LEFT_MAN,AL
MOV DX,OFFSET TEXT3
MOV AX,900H
INT 21H
LOOP G_LOOP
OR BX,3030H
MOV GENERAL_SCORE,BH
MOV GENERAL_SCORE+1,BL
MOV AX,0
MOV AH,9
MOV DX,OFFSET SCORE
INT 21H
P_LOOP: MOV AH,7
INT 21H
CMP AL,'y'
JE TEMP_REPEAT
CMP AL,'Y'
JE TEMP_REPEAT
CMP AL,'N'
JE TEMP_END
CMP AL,'n'
JE TEMP_END
JMP P_LOOP
TEMP_REPEAT:
CALL SETPOS
CALL CLS
JMP REPEAT
TEMP_END:
JMP ENDMU
TO_MENU: JMP SDS
QUIT: call exit_gra
mov ah, 0ch
int 21h
in al, 61h
mov al,0
out 61h, al
jmp sds
sound proc near
mov ax,0
cmp di,ax
je wait1
mov al, 0b6h
out 43h,al
mov dx,12h
mov ax,348ch
div di
out 42h,al
mov al,ah
out 42h,al
in al,61h
mov ah,al
or al,3
out 61h,al
push ax ;由于程序原來用監視61h端口的方法進行延時,每次調用的時候延時值為10ms,現在采用的是顯卡的垂直回掃周期加61h端口來延時(在winNT,2000,XP都可以用)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -