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

📄 dazi1.asm

📁 音乐选择器
💻 ASM
字号:
STACKS    SEGMENT PARA STACK 'STACK' 
DB  256  DUP(0) 
TOP      LABEL WORD 
STACKS    ENDS 
DATA     SEGMENT  PARA PUBLIC 'DATA' 
BUFFER   DB 16H DUP(0) 
BUFPT1   DW 0 
BUFPT2   DW 0 
KBFLAG   DB  0 
PROMPT   DB '   *PLEASE PRACTISE TYPING*',0DH,0AH,'$' 
SCANTAB  DB 0,0,'1234567890-=',8,0 
DB 'QWERTYUIOP[]',0DH,0 
DB 'ASDFGHJKL;',0,0,0,0 
DB 'ZXCVBNM,./',0,0,0 
DB ' ',0,0,0,0,0,0,0,0,0,0,0,0,0 
DB '789-456+1230.' 
EVEN 
OLDCS9   DW ? 
OLDIP9   DW ? 
STR1     DB 'ABCD EFGH IJKL MNOP QRST UVWX YZ.' 
DB 0DH,0AH,'$' 
STR2     DB 'THERE ARE SOME NEWSPAPERS ON THE TABLE.' 
DB 0DH,0AH,'$' 
STR3     DB 'THERE ARE SOME CLOUDS IN THE SKY.' 
DB 0DH,0AH,'$' 
STR4     DB 'SHE ALWAYS EATS HER LUNCH AT NOON.' 
DB 0DH,0AH,'$' 
STR5     DB 'I DO NOT LIKE AUTUMN AND WINTER.' 
CRLF     DB 0DH,0AH,'$' 
COLON    DB ':','$' 
EVEN 
SADDR    DW STR1,STR2,STR3,STR4,STR5 
COUNT    DW 0 
SEC      DW 0 
MIN      DW 0 
HOURS    DW 0 
SAVE_LC  DW 2 DUP(?) 
DATA     ENDS 
CODE     SEGMENT 
ASSUME   CS:CODE,DS:DATA,ES:DATA,SS:STACKS 
MAIN     PROC FAR 
START: 
MOV AX,STACKS 
MOV SS,AX 
MOV SP,OFFSET TOP 
PUSH DS 
SUB AX,AX 
PUSH AX 
MOV AX,DATA 
MOV DS,AX 
MOV ES,AX 
; MOV AH,0 
; MOV AL,4 
; INT 21H 
; MOV AH,0BH 
;  MOV BH,0 
;  MOV BL,4 
;  INT 11H 
MOV AH,35H 
MOV AL,09H 
INT 21H 
MOV OLDCS9,ES 
MOV OLDIP9,BX 
PUSH DS 
MOV DX,SEG KBINT 
MOV DS,DX 
MOV DX,OFFSET KBINT 
MOV AL,09H 
MOV AH,25H 
INT 21H 
POP DS 
MOV AH,35H 
MOV AL,1CH 
INT 21H 
MOV SAVE_LC,BX 
MOV SAVE_LC+2,ES 
PUSH DS 
MOV DX,SEG CLINT 
MOV DS,DX 
MOV DX,OFFSET CLINT 
MOV AL,1CH 
MOV AH,25H 
INT 21H 
POP DS 
IN  AL,21H 
AND AL,11111100B 
OUT 21H,AL 
FIRST:   MOV AH,0 
MOV AL,3 
INT 10H 
MOV DX,OFFSET PROMPT 
MOV AH,9 
INT 21H 
MOV SI,0 
NEXT:    MOV DX,SADDR[SI] 
MOV AH,09H 
INT 21H 
MOV COUNT,0 
MOV SEC,0 
MOV MIN,0 
MOV HOURS,0 
STI 
FOREVER: 
CALL KBGET 
TEST KBFLAG,80H 
JNZ  ENDINT 
PUSH AX 
CALL DISPCHAR 
POP  AX 
CMP AL,0DH 
JNZ FOREVER 
MOV AL,0AH 
CALL DISPCHAR 
CALL DISPTIME 
LEA DX,CRLF 
MOV AH,09H 
INT 21H 
ADD SI,2 
CMP SI,5*2 
JNE NEXT 
JMP FIRST 
ENDINT:  CLI 
PUSH DS 
MOV DX,SAVE_LC 
MOV AX,SAVE_LC+2 
MOV DS,AX 
MOV AL,1CH 
MOV AH,25H 
INT 21H 
POP DS 
PUSH DS 
MOV DX,OLDIP9 
MOV AX,OLDCS9 
MOV DS,AX 
MOV AL,09H 
MOV AH,25H 
INT 21H 
POP DS 
STI 
RET 
MAIN     ENDP 
CLINT    PROC NEAR 
PUSH DS 
MOV BX,DATA 
MOV DS,BX 
LEA BX,COUNT 
INC WORD PTR[BX] 
CMP WORD PTR[BX],18 
JNE RETURN 
CALL INCT 
ADJ: 
CMP HOURS,12 
JLE RETURN 
SUB HOURS,12 
RETURN: 
POP DS 
STI 
IRET 
CLINT    ENDP 
INCT     PROC NEAR 
MOV WORD PTR[BX],0 
ADD BX,2 
INC WORD PTR[BX] 
CMP WORD PTR[BX],60 
JNE EXIT 
CALL INCT 
EXIT:    RET 
INCT     ENDP 
DISPTIME PROC NEAR 
MOV AX,MIN 
CALL BINDEC 
MOV BX,0 
MOV AL,':' 
MOV AH,0EH 
INT 10H 
MOV AX,SEC 
CALL BINDEC 
MOV BX,0 
MOV AL,':' 
MOV AH,0EH 
INT 10H 
MOV BX,COUNT 
MOV AL,55D 
MUL BL 
CALL BINDEC 
RET 
DISPTIME      ENDP 
BINDEC   PROC NEAR 
MOV CX,100D 
CALL DECDIV 
MOV CX,10D 
CALL DECDIV 
MOV CX,1 
CALL DECDIV 
RET 
BINDEC   ENDP 
DECDIV   PROC NEAR 
MOV DX,0 
DIV CX 
MOV BX,0 
ADD AL,30H 
MOV AH,0EH 
INT 10H 
MOV AX,DX 
RET 
DECDIV   ENDP 
KBGET    PROC NEAR 
PUSH BX 
CLI 
MOV BX,BUFPT1 
CMP BX,BUFPT2 
JNZ KBGET2 
CMP KBFLAG,0 
JNZ KBGET3 
STI 
POP BX 
JMP KBGET 
KBGET2: 
MOV AL,[BUFFER+BX] 
INC BX 
CMP BX,16H 
JC KBGET3 
MOV BX,0 
KBGET3: 
MOV BUFPT1,BX 
POP BX 
RET 
KBGET    ENDP 
KBINT    PROC NEAR 
PUSH BX 
PUSH AX 
IN AL,60H 
PUSH AX 
IN AL,61H 
OR AL,80H 
OUT 61H,AL 
AND AL,7FH 
OUT 61H,AL 
POP AX 
TEST AL,80H 
JNZ  KBINT2 
MOV BX,OFFSET SCANTAB 
XLAT SCANTAB 
CMP AL,0 
JNZ KBINT4 
MOV KBFLAG,80H 
JMP KBINT2 
KBINT4: 
MOV BX,BUFPT2 
MOV [BUFFER+BX],AL 
INC BX 
CMP BX,16H 
JC KBINT3 
MOV BX,0 
KBINT3: 
CMP BX,BUFPT1 
JZ KBINT2 
MOV BUFPT2,BX 
KBINT2:  CLI 
MOV AL,20H 
OUT 20H,AL 
POP AX 
POP BX 
STI 
IRET 
KBINT    ENDP 
DISPCHAR PROC NEAR 
PUSH BX 
MOV BX,0 
MOV AH,0EH 
INT 10H 
POP BX 
RET 
DISPCHAR ENDP 
CODE     ENDS 
END   START 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -