⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snlying实际.asm

📁 硬件课程设计
💻 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 + -