📄 exp93.asm
字号:
CODE SEGMENT PARA
ASSUME CS:CODE,DS:CODE
NEW_INT1C PROC FAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH BP
PUSH DS
PUSH ES
STI
JMP START
OLD_INT1C DD ?
NNN DW 2000
DELAY_COUNT DW 3000
COUNT DW ?
START: PUSH CS
POP DS
INC COUNT
CMP COUNT,18
JB RETURN
MOV COUNT,0
CALL BEEP
RETURN: CLI
POP ES
POP DS
POP BP
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
IRET
NEW_INT1C ENDP
BEEP PROC NEAR
MOV DX,NNN
IN AL,61H
AND AL,11111110B
AGAIN: OR AL,00000001B
OUT 61H,AL
MOV CX,DELAY_COUNT
WAIT1: NOP
LOOP WAIT1
AND AL,11111100B
OUT 61H,AL
MOV CX,DELAY_COUNT
WAIT2: NOP
LOOP WAIT2
DEC DX
JNZ AGAIN
RET
BEEP ENDP
H_LEN EQU $-NEW_INT1C
MAIN PROC FAR
MOV AX,CS
MOV DS,AX
MOV COUNT,0
MOV AH,35H
MOV AL,1CH ;GET INT 1Ch ADDR
INT 21H
MOV WORD PTR OLD_INT1C,BX
MOV WORD PTR OLD_INT1C+2,ES
MOV AH,25H
MOV AL,1CH
MOV DX,OFFSET NEW_INT1C ;DS=CS
INT 21H
MOV DX,(H_LEN+15)/16+10H
MOV AX,3100H
INT 21H
MAIN ENDP
CODE ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -