📄 snlying实际.asm
字号:
DRAW MACRO S_X,S_Y,E_X,E_Y,COLOR
LOCAL DRAW_NEXT
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AH,0CH
MOV AL,COLOR
MOV BH,0
MOV CX,S_X
MOV DX,S_Y
DRAW_NEXT:
INT 10H
INC CX
CMP CX,E_X
JNE DRAW_NEXT
MOV CX, S_X
INC DX
CMP DX,E_Y
JNE DRAW_NEXT
POP DX
POP CX
POP BX
POP AX
ENDM
DRAWSQRE MACRO S_X,S_Y,E_X,E_Y,COLOR
LOCAL UP,DOWN,LEFT,RIGHT
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
MOV AH,0CH
MOV AL,COLOR
MOV BH,0
MOV CX,S_X
MOV DX,S_Y
UP:
INT 10H
INC CX
CMP CX,E_X
JNE UP
RIGHT:
INT 10H
INC DX
CMP DX,E_Y
JNE RIGHT
MOV CX,S_X
MOV SI,E_X
INC SI
DOWN:
INT 10H
INC CX
CMP CX,SI
JNE DOWN
MOV DX,S_Y
MOV CX,S_X
LEFT:
INT 10H
INC DX
CMP DX, E_Y
JNE LEFT
POP SI
POP DX
POP CX
POP BX
POP AX
ENDM
DATA SEGMENT
BG DB ' 1---Autoplay',0DH,0AH
DB ' ',0DH,0AH
DB ' ',0DH,0AH
DB ' 9----Shang Hai Tan!',0DH,0AH
DB ' 4----Return',0DH,0AH
DB ' 2---Handplay',0DH,0AH
DB ' ',0DH,0AH
DB ' ',0DH,0AH
DB ' ( 1-8)---Naturals',0DH,0AH
DB ' 9--Return',0DH,0AH
DB ' 3----Exit',0DH,0AH,'$'
FREQ3 DW 330,392,440,330,392,294
DW 330,392,440,523,440,392,220,262,330,294
DW 294,330,392,294,330,294,220,220
DW 220,262,294,330,294,247,220,262,196
DW 294,330,294,247,220,196,262
DW 523,523,440,523,440,523,440,392
DW 392,330,440,392,262,294,262,292,330
DW 330,330,294,330
DW 523,523,494,440
DW 330,330,294,330,523,494,440,330,392
DW 0
TIME3 DW 2 DUP(12,12,75),3 DUP(12),25,12,25,6,6,12,75
DW 12,12,75,4 DUP(12),75,12,12,37,5 DUP(12),75
DW 37,12,12,12,12,12,50
DW 12,12,12,50,12,12,12,75
DW 12,12,37,12,25,6,6,12,50,12,12,12,50,12,12,12,75
DW 12,12,37,12,12,12,12,12,75
NAT DW 262,294,330,349,392,440,494,523
START_COL DB ?
TEXT DB 16
DB 2
DB 06H
ST_LX DW 50,61,72,83,94,105,116
ST_MX DW 127,138,149,160,171,182,193
ST_HX DW 204,215,226,237,248,259,270
ST_Y DW 50
ED_LX DW 60,71,82,93,104,115,126
ED_MX DW 137,148,159,170,181,192,203
ED_HX DW 214,225,236,247,258,269,280
ED_Y DW 90
BT_X DW 57,68,90,101,112
DW 134,145,167,178,189
DW 211,222,244,254,265
BT_Y DW 50
BD_X DW 64,75,97,108,119
DW 141,152,174,185,196
DW 218,229,251,262,273
BD_Y DW 70
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
CALL INIT
LEA DX,BG
MOV AH,9
INT 21H
DRAW 84,130,89,134,0AH
DRAW 84,170,89,174,0AH
DRAW 58,100,264,101,0EH
DRAW 58,194,264,195,0EH
DRAW 57,100,58,194,0EH
DRAW 265,100,266,194,0EH
READ_KEY:
DRAW 66,105,72,111,0AH
DRAW 66,144,72,150,0AH
MOV AH,7
INT 21H
CMP AL,'1'
JZ K5
CMP AL,'2'
JZ HAND
CMP AL,'3'
JNZ READ_KEY
RET
K5:JMP K8
K6:JMP READ_KEY
HAND:DRAW 66,144,72,150,01H
DRAW 84,170,89,174,0AH
JMP READ
KA:JMP K6
READ: MOV AH,7
INT 21H
CMP AL,'9'
JZ KA
K1:
CMP AL,'1'
JB K0
CMP AL,'8'
JA K0
DRAW 84,170,89,174,04H
LEA BX,NAT
LEA SI,ST_MX
LEA DI,ED_MX
JMP PLAY
K0:JMP HAND
k4:JMP READ_KEY
K8:JMP K7
K7:JMP AUTO
K9:JMP K4
PLAY:PUSH BX
AND AX,000FH
SHL AX,1
SUB AX,2
MOV BX,AX
MOV DX,BX
CALL KEY_DOWN
POP BX
PUSH SI
PUSH DI
PUSH DX
MOV SI,AX
MOV DI,[BX][SI]
CALL SING1
POP DX
POP DI
POP SI
MOV BX,DX
CALL KEY_UP
JMP HAND
AUTO:DRAW 66,105,72,111,01H
MOV AH,7
INT 21H
CMP AL,'4'
JZ K9
CMP AL,'9'
JZ F4
JMP AUTO
F4: JMP F3
F3: DRAW 84,130,89,134,04H
LEA SI,FREQ3
LEA BP,TIME3
CALL SING2
DRAW 84,130,89,134,0AH
JMP AUTO
MAIN ENDP
SING1 PROC NEAR
PUSH DI
PUSH SI
PUSH BP
PUSH BX
REPT1:
MOV BX,30
CALL GESOUND
POP BX
POP BP
POP SI
POP DI
RET
SING1 ENDP
SING2 PROC NEAR
PUSH DI
PUSH SI
PUSH BP
PUSH BX
REPT2:MOV DI,[SI]
MOV BX,DS:[BP]
MOV AH,0BH
INT 21H
CMP AL,0FFH
JE QUIT
CMP DI,0
JE QUIT
CALL GESOUND
ADD SI,2
ADD BP,2
JMP REPT2
POP BX
POP BP
POP SI
POP DI
QUIT:
POP BX
POP BP
POP SI
POP DI
RET
SING2 ENDP
GESOUND PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
MOV AL,0B6H
OUT 43H,AL
MOV DX,12H
MOV AX,348CH
DIV DI
OUT 42H,AL
IN AL,61H
MOV AL,AH
OUT 42H,AL
IN AL,61H
MOV AH,AL
OR AL,3
OUT 61H,AL
WAIT2:
CALL WAITF
DEC BX
JNZ WAIT2
MOV AL,AH
OUT 61H,AL
POP DI
POP DX
POP CX
POP BX
POP AX
RET
GESOUND ENDP
WAITF PROC NEAR
PUSH AX
MOV CX,2801
WAITF1:
IN AL,61H
AND AL,10H
CMP AL,AH
JE WAITF1
MOV AH,AL
LOOP WAITF1
POP AX
RET
WAITF ENDP
INIT PROC NEAR
MOV AX,DATA
MOV DS,AX
MOV AH,0
MOV AL,0DH
INT 10H
MOV AH,0BH
MOV BH,0
MOV BL,10H
INT 10H
CALL SHOW_TEXT
DRAW 45,30,285,94,06H
DRAWSQRE 45,30,285,94,06H
DRAWSQRE 49,48,280,49,07H
LEA SI,ST_LX
LEA DI,ED_LX
MOV CX,21
INIT_DRAW:
DRAW [SI],ST_Y,[DI],ED_Y,0FH
DRAW [SI],90,[DI],93,07H
ADD SI,2
ADD DI,2
LOOP INIT_DRAW
LEA SI,BT_X
LEA DI,BD_X
MOV CX,15
INIT_BLOCK:
DRAW [SI],BT_Y,[DI],BD_Y,00H
ADD DI,2
ADD SI,2
LOOP INIT_BLOCK
SHOW_TEXT PROC NEAR
LEA DI,TEXT
MOV DH,[DI]
INC DI
MOV DL,[DI]
MOV START_COL,DL
MOV AH,2
MOV BH,0
INT 10H
INC DI
MOV BL,[DI]
END_TEXT:
RET
SHOW_TEXT ENDP
MOV AH,4CH
INT 21H
INIT ENDP
KEY_DOWN PROC NEAR
PUSH SI
PUSH DI
DRAW [SI+BX],66,[DI+BX],67,0FH
DRAW [SI+BX],68,[DI+BX],70,07H
POP DI
POP SI
RET
KEY_DOWN ENDP
KEY_UP PROC NEAR
PUSH SI
PUSH DI
DRAW [SI+BX],66,[DI+BX],69,07H
DRAW [SI+BX],69,[DI+BX],70,06H
POP DI
POP SI
RET
KEY_UP ENDP
CODE ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -