让你的计算机变成钢琴。

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

code segment

assume cs:code

D1=131

D2=147

D3=165

D4=175

D5=196

D6=220

D7=247

Z1=262

Z2=294

Z3=330

Z4=349

Z5=392

Z6=440

Z7=494

G1=523

G2=587

G3=659

G4=714

G5=784

G6=880

G7=988

oldint8 dd ?

oldint9 dd ?

time dw 0

ascii DB 10H,11H,12H,13H,14H,15H,16H

DB 1EH,1FH,20H,21H,22H,23H,24H

DB 2CH,2DH,2EH,2FH,30H,31H,32H

music dw d1,d2,d3,d4,d5,d6,d7

dw z1,z2,z3,z4,z5,z6,z7

dw g1,g2,g3,g4,g5,g6,g7

newint8: dec cs:word ptr time

jz closev

new8_0: jmp cs:oldint8

closev: push ax

in al,61h

and al,0fdh

out 61h,al

pop ax

jmp new8_0

voice: mov cx,ax

mov dx,12h

mov ax,34dch

div cx

push ax

mov al,0b6h

out 43h,al

pop ax

out 42h,al

xchg al,ah

out 42h,al

in al,61h

or al,03h

out 61h,al

ret

newint9: in al,60h

push ax

in al,61h

or al,80h

out 61h,al

and al,7fh

out 61h,al

mov al,20h

out 20h,al

sti

pop ax

push ax

cmp al,80h

jb new90

mov cs:word ptr time,04h

jmp quit

new90: push cs

pop es

mov di,offset ASCII

mov cx,22d

cld

repnz scasb

jcxz quit

sub di,offset ascii

dec di

shl di,1

mov ax,es:[di+music]

mov cs:word ptr time,0h

call voice

quit: pop ax

cmp al,01h

jnz meun

lds dx,cs:oldint8

mov ax,2508h

int 21h

lds dx,cs:oldint9

mov ax,2509h

int 21h

mov ax,4c00h

int 21h

meun: sti

jmp meun

start:mov ax,cs

mov ds,ax

mov ax,3508h

int 21h

mov cs:Word ptr oldint8,bx

mov cs:word ptr oldint8+2,es

mov ax,3509h

int 21h

mov cs:Word ptr oldint9,bx

mov cs:word ptr oldint9+2,es

mov ax,2508h

mov dx,offset newint8

int 21h

mov ax,2509h

mov dx,offset newint9

int 21h

jmp meun

code ends

end start

编译运行一下 ,你会发现的计算机也能用来弹奏乐曲。:)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有  導航