?? keshe.asm
字號:
SHOW MACRO B
LEA DX,B
MOV AH,9
INT 21H
ENDM
;**********************音樂地址宏
ADDRESS MACRO A,B
LEA SI,A
LEA BP,DS:B
ENDM
WIN MACRO OPR1,OPR2,OPR3,OPR4,OPR5,OPR6 ;建立窗口 宏定義
MOV AH,06H
MOV AL,OPR1
MOV BH,OPR2
MOV CH,OPR3
MOV CL,OPR4
MOV DH,OPR5
MOV DL,OPR6
INT 10H
ENDM
DATAREA SEGMENT
THIRTY DB 50
MSG0 DB '1 string operate '
MSG1 DB '2 listen the music '
MSG2 DB '3 exit '
MSG3 DB 'convert decimal onkeybd to hex on screen '
MSG4 DB 'count the number '
MSG5 DB '3music '
MSG6 DB 'input 4 Active convert decimal to hex '
MSG7 DB 'input 5 Active count the number '
MSG8 DB 'convert decimal onkeybd to hex on screen '
MSGA DB 'count the number '
MSGB DB 'please input counts '
MSG9 DB 'please input a count '
MSGC DB 'Do you really exit $ '
;ERRMSG DB 'error! '
MESSAGE1 DB 'Welcome to the system!',13,10,13,10
DB 'The function of the program will scoring how many numbers you enter.',13,10,13,10
DB 'Please enter a string:',13,10,'$'
CR DB 13,10,'$'
;RESULT1 DB 'The string is:',13,10,'$'
RESULT2 DB 'The quantity of numbers is:',13,10,'$'
STRING DB 100
DB 0
DB 80 DUP(0) ;定義緩沖區(qū)
AGAIN DB 'Do you want to try again?(Y or N)',13,10,'$'
; ERROR DB 'ERROR!',13,10,'Please enter the right letters.',13,10,'$' ;錯誤提示
INFO1 DB 0DH,0AH,'WELCOME YOU TO COME HERE!$'
INFO2 DB 0DH,0AH,'this is a music program!$'
INFO3 DB 0DH,0AH,'please select!$'
INFO4 DB 0DH,0AH,'INPUT ERROR!$'
INFO5 DB 0DH,0AH,'PLEASE INPUT AGAIN!$'
MUSLIST DB 0DH,0AH,'A MUSIC1'
DB 0DH,0AH,'B MUSIC2'
DB 0DH,0AH,'C MUSIC3'
DB 0DH,0AH,'Q EXIT'
DB 0DH,0AH,'$'
;音樂一*********************************************************
MUS_FREG1 DW 330,294,262,294,3 DUP (330)
DW 3 DUP (294),330,392,392
DW 330,294,262,294,4 DUP (330)
DW 294,294,330,294,262,-1
MUS_TIME1 DW 6 DUP (25),50
DW 2 DUP (25,25,50)
DW 12 DUP (25),100
;*********************************************************音樂二
MUS_FREG2 DW 330,392,330,294,330,392,330,294,330
DW 330,392,330,294,262,294,330,392,294
DW 262,262,220,196,196,220,262,294,332,262,-1
MUS_TIME2 DW 3 DUP(50),25,25,50,25,25,100
DW 2 DUP(50,50,25,25),100
DW 3 DUP(50,25,25),100
;********************************************************音樂三
MUS_FREG3 DW 262,262,294,262,349
DW 330,262,262,294,262
DW 392,349,262,262,523
DW 440,349,262,262,466
DW 466,440,262,392,349,-1
MUS_TIME3 DW 50,50,100,100,100
DW 100,100,50,50,100,100
DW 100,100,100,50,50,100
DW 100,100,100,100,100,50
DW 50,100,100,100,100,100
DATAREA ENDS
;===============================================================
PROGNAM SEGMENT
MAIN PROC FAR
ASSUME CS:PROGNAM,DS:DATAREA
START:
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATAREA
MOV DS,AX
;========================================================
BEGIN100 PROC NEAR
BEGIN0: MOV BX,OFFSET MSG0
CALL DISPLAY1
MOV DL,0DH
CALL DISPCHAR
MOV DL,0AH
CALL DISPCHAR
BEGIN1: MOV BX,OFFSET MSG1
CALL DISPLAY1
MOV DL,0DH
CALL DISPCHAR
MOV DL,0AH
CALL DISPCHAR
BEGIN2: MOV BX,OFFSET MSG2
CALL DISPLAY1
MOV DL,0DH
CALL DISPCHAR
MOV DL,0AH
CALL DISPCHAR
BEGIN100 ENDP
;-----------------------------------------------------------
BEGIN PROC NEAR
MOV AH,1
INT 21H
CMP AL,'1'
JE NEXT
CMP AL,'2'
JE MUSIC1
CMP AL,'3'
JE D
D: CALL CLEARSCREEN
CALL EXIT3
BEGIN ENDP
MUSIC1: CALL MUSIC2
CALL GENSOUND
CALL WAITF
CALL MUSIC
NEXT: CALL CLEARSCREEN
MOV BX,OFFSET MSG3
CALL DISPLAY1
MOV DL,0DH
CALL DISPCHAR
MOV DL,0AH
CALL DISPCHAR
MOV BX,OFFSET MSG4
CALL DISPLAY1
MOV DL,0DH
CALL DISPCHAR
MOV DL,0AH
CALL DISPCHAR
MOV BX,OFFSET MSG6
CALL DISPLAY1
MOV DL,0DH
CALL DISPCHAR
MOV DL,0AH
CALL DISPCHAR
MOV BX,OFFSET MSG7
CALL DISPLAY1
MOV DL,0DH
CALL DISPCHAR
MOV DL,0AH
CALL DISPCHAR
CALL D_HXCHG
D_HXCHG PROC NEAR
MOV AH,7
INT 21H
CALL CLEARSCREEN
CMP AL,'4'
JE A
CMP AL,'5'
JE B
A: CALL CLEARSCREEN
MOV BX,OFFSET MSG8
CALL DISPLAY1
CALL CRLF
MOV BX,OFFSET MSG9
CALL DISPLAY1
CALL CRLF
CALL DECIBIN
CALL BINIHEX
CALL EXIT3
B:
CALL CRLF
MOV BX,OFFSET MSGA
CALL DISPLAY1
CALL CRLF
MOV BX,OFFSET MSGB
CALL DISPLAY1
CALL CRLF
CALL HEAD
CALL HEAD1
CALL EXIT3
D_HXCHG ENDP
MAIN ENDP
;=================子程序======================================
HEAD PROC NEAR
LEA DX,MESSAGE1 ;輸出提示語
MOV AH,09H
INT 21H
LEA DX,STRING
MOV AH,0AH
INT 21H ;字符串輸入
LEA DX,CR
MOV AH,09H
INT 21H ;回車換行
LEA SI,STRING+2 ;把字符串首地址存入SI
;MOV CL,STRING+1 ;把字符個數(shù)存入CX
;MOV CH,0
MOV BL,30H ;置BL為字符0
HEAD ENDP
HEAD1 PROC NEAR
MOV CX,10
LOOP1: ;LOOP1用于判斷字符是否為數(shù)字
MOV DL,[SI]
CMP DL,'0'
JB LOOP2
CMP DL,'9'
JA LOOP2 ;ASCII碼小于0和大于9的BL+1,其他情況不加
INC BL
LOOP2: ;LOOP2實現(xiàn)指針向下一位移動
MOV DL,[SI]
MOV AH,02H
INT 21H
INC SI ;SI自加,判斷下一個字符
DEC CX ;CX自減,最終將是0
JNE LOOP1 ;CX非零時,跳回NEXT1
LEA DX,CR
MOV AH,09H
INT 21H
LEA DX,CR
MOV AH,09H
INT 21H
LEA DX,RESULT2
MOV AH,09H
INT 21H
MOV DL,BL
MOV AH,02H
INT 21H
LEA DX,CR
MOV AH,09H
INT 21H
HEAD1 ENDP
;--------------------------------------------------
DISPLAY1 PROC NEAR
MOV CX,50
DISP1: MOV DL,[BX]
CALL DISPCHAR
INC BX
LOOP DISP1
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -