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

📄 exp94.asm

📁 汇编语言 参考书 包含作业与答案 从入门到精通 通俗易懂
💻 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      ?
COUNT           DW      ?

START:          PUSH    CS
                POP     DS

                INC     COUNT
                CMP     COUNT,18*4
                JB      RETURN
                MOV     COUNT,0

                CALL    BEEP1

RETURN:         CLI
                POP     ES
                POP     DS
                POP     BP
                POP     DI
                POP     SI
                POP     DX
                POP     CX
                POP     BX
                POP     AX
                IRET
NEW_INT1C       ENDP
BEEP1           PROC    NEAR
                PUSH    DS

                MOV     AX,0
                MOV     DS,AX

                MOV     CX,4
                IN      AL,61H
                OR      AL,3            ;SET PB0 & PB1
                OUT     61H,AL
MAIN1:          MOV     BX,1000
                CALL    BEEP
                MOV     BX,1200
                CALL    BEEP
                MOV     BX,1400
                CALL    BEEP
                LOOP    MAIN1

                IN      AL,61H
                XOR     AL,3            ;CLEAR PB0 & PB1
                OUT     61H,AL
                POP     DS

                RET
BEEP1           ENDP
BEEP            PROC
                MOV     AX,34DCH
                MOV     DX,12H          ;1193180
                DIV     BX      ;BX=1000,1200,1400

                OUT     42H,AL          ;TIMER2
                MOV     AL,AH
                OUT     42H,AL          ;WRITE 1 WORD

                CALL    WAITS
                RET
BEEP            ENDP

WAITS           PROC    NEAR
                MOV     DX,6
                MOV     BX,0
                ADD     DX,DS:[46CH]    ;DS=0
                ADC     BX,DS:[46EH]
WAIT1:
                MOV     BP,DS:[46CH]
                MOV     AX,DS:[46EH]
                SUB     BP,DX
                SBB     AX,BX
                JC      WAIT1
                RET
WAITS           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 + -