; masm main.asm;
; link main;
STACK SEGMENT PARA STACK
DB 256 DUP (0)
STACK ENDS
DATA SEGMENT PUBLIC
point dw 0b800h
COLOR DB 11011000B
MASKS DB 11000000b
DB 00110000B
DB 00001100B
DB 00000011B
COUNT DW 24
COORD DB 103
DW 154
DB 103
DW 155
DB 103
DW 156
DB 103
DW 157
DB 103
DW 158
DB 103
DW 159
DB 103
DW 160
DB 103
DW 161
DB 103
DW 162
DB 103
DW 163
DB 103
DW 164
DB 103
DW 165
DB 103
DW 166
DB 102
DW 155
DB 101
DW 165
DB 101
DW 156
DB 101
DW 164
DB 100
DW 157
DB 100
DW 163
DB 99
DW 158
DB 99
DW 162
DB 98
DW 159
DB 98
DW 161
DB 97
DW 160
EIGHTY DB 80
DATA ENDS
CODE SEGMENT PUBLIC
START PROC FAR
ASSUME CS:CODE, DS:DATA , SS:STACK
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA;
MOV DS,AX
MOV Ax,4
INT 10H
mov dx,3d4h
MOV DX,3D9H
MOV AL,09H
OUT DX,AL
mov bx,point
call chgdm
MOV AX,0b8feh
MOV ES,AX
MOV CX,COUNT
MOV BX,OFFSET COORD
MAIN:MOV AL,[BX]
INC BX
MOV DX,[BX]
ADD BX,2
CALL DRAW
LOOP MAIN
move:mov cx,0dh
mov dx,3300h
mov ah,86h
int 15h
add point,010h
cmp point,0bb30h
je exit
mov bx,point
call chgdm;
jmp move
exit:mov cx,3dh
mov dx,3300h
mov ah,86h
int 15h
mov ax,2
int 10h
ret
start endp
DRAW PROC NEAR
SHR AL,1
JC ODD
MOV DI,0
JMP SHORT COMMON
ODD:MOV DI,2000H
COMMON:MUL EIGHTY
ADD DI,AX
MOV SI,DX
SHR DX,1
SHR DX,1
ADD DI,DX
AND SI,03H
MOV AL,[MASKS+SI]
MOV DH,COLOR
AND DH,AL
not al
mov ah,es:[di]
and ah,al
OR AH,DH
MOV ES:[DI],AH
RET
DRAW ENDP
chgdm proc near ;DM segment in bx
push dx
push ax
mov dx,3d4h
mov al,12
out dx,al
inc dx
mov ah,bh
out dx,al
dec dx
mov al,13
out dx,al
inc dx
mov al,bl
out dx,al
pop ax
pop dx
ret
chgdm endp
CODE ENDS
END START
|
STACK SEGMENT STACK
DB 256 DUP(0)
STACK ENDS
DATA SEGMENT
OUTB DB 0AH,0DH,"music:yue liang dai biao wo de xin",0AH,0DH,0ah,0dh
db " ^ ^ ^ ^ ",0ah,0dh
db " ^ ^ ^ ^ ",0ah,0dh
db " ^ ^ ^ ^ ",0ah,0dh
db " ^ ^ ^ ^ ",0ah,0dh
db " ^ ^ ",0ah,0dh
db " ^ ^ ",0ah,0dh
db " ^ ^ ",0ah,0dh
db " ^ ^ ",0ah,0dh
db " ^ ^ ",0ah,0dh
db " ^ ^ ",0ah,0dh
db " ^ ^ ",0ah,0dh
db " ^ ^ ",0ah,0dh
db " ^ ^ ",0ah,0dh
db " ^ ^ ",0ah,0dh
db " ^ ^ ",0ah,0dh
db " -- Du Tian Wei.",0ah,0dh
db " 2008.11.25",0ah,0dh
db 0ah,0dh,"$"
music dw 262,1,294,1,330,1,349,1,0,1,392,1,0,1,440,1,0,1,494,1,0,1,523,5
dw 0,4
dw 196,1
dw 262,3,330,1,392,3,262,1
dw 247,3,330,1,392,2,0,1,392,1
dw 440,1,494,2,523,3,440,1
dw 440,1,392,1,392,2,0,2,330,1,294,1
dw 262,3,262,1,262,2,330,1,294,1
dw 262,6,294,1,330,1
dw 294,2,262,1,220,2,294,1,330,1
dw 294,6,0,1,196,1
dw 294,2,220,1,247,1,262,1,294,1
dw 262,6,330,1,392,1
dw 247,6,220,1,247,1
dw 220,3,247,1,220,3,196,2
dw 330,6,392,2
dw 330,3,294,1,262,2,392,2
dw 247,6,220,1,247,1
dw 262,6,294,1,330,1
dw 294,6,0,1
dw 196,1
dw 262,3,330,1,392,3,262,1
dw 247,3,330,1,392,2,0,1,392,1
dw 440,1,494,2,523,3,440,1
dw 440,1,392,1,392,2,0,2,330,1,294,1
dw 262,3,262,1,262,2,330,1,294,1
dw 262,6,294,1,330,1
dw 294,3,220,1,247,2,262,1,294,1
dw 262,6,"$"
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS: DATA
START PROC FAR
push si
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
;PROGRAM START !!!
;CALL WAITT;WAIT A MOMENT
MOV AH,09 ; PRINT
MOV DX,OFFSET OUTB
INT 21H ; PRINT
;jmp exit;text test
mov si , offset music
play: mov ax,ds:[si]
cmp ax,'$'
je exit
cmp ax,0
je jtime
CALL SOUND
jtime: inc si
inc si
mov ax,ds:[si]
call waittime
call endsound ; end sound
inc si
inc si
jmp play
exit: ret
START ENDP
waittime proc near
push cx
mov cx,ax
wloop:call waitt
loop wloop
pop cx
ret
waittime endp
SOUND PROC NEAR ;
push bx
push cx
push dx
mov bx,ax
mov al,10110110b
out 43h,al
mov dx,12h
mov ax,34dch
div bx
out 42h,al
mov al,ah
out 42h,al
in al,61h
or AL,03H
OUT 61H,AL
pop dx
pop cx
pop bx
RET
SOUND ENDP
endsound proc near
push ax
in al,61h
and al,11111100b
out 61h,al
pop ax
ret
endsound endp
WAITT PROC NEAR
push cx
push dx
mov ah,86h
mov cx,3 ;cx:dx
mov dx,0e78dh
int 15h
pop dx
pop cx
ret
WAITT ENDP
CODE ENDS
END START
|