📄 ++
字号:
;********************************************************
; 通用微机发声程序及动画显示
; 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 + -