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

📄 complex.asm

📁 录音子程序 mov dx,offset news_2 显示放音提示
💻 ASM
字号:
DATA SEGMENT

        ioport equ 0c000h-280h              ;实验箱驱动默认中断地址为C000H,此处设置偏移量
        ;8255A
        ioport1 equ ioport+288h
        ioport2 equ ioport+28bh
        ;8253
        ioport3 equ ioport+280h
        ioport4 equ ioport+283h
        ;ADC0809
        ioport5 equ ioport+29ah
        ;DAC0832
        ioport6 equ ioport+290h

ORG 1000H
REC DB 13,10,"Press any key to record.",13,10,'$'
PLY DB 13,10,"Press any key to play, SPACE to play again, else to exit.",13,10,'$'
DAT DB 60000 DUP(?)

DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START PROC FAR
STT:PUSH DS
    SUB AX,AX
    PUSH AX
;==============================
    MOV AX,DATA
    MOV DS,AX

    LEA DX,REC    ;打印录音提示
    MOV AH,09H
    INT 21H

    MOV AL,0
CHK:MOV AH,0BH    ;检测键盘按键
    INT 21H
    CMP AL,0FFH
    JE NEXT
    JMP CHK

NEXT:CALL MYRECORD    ;调用录音子程序

    LEA DX,PLY    ;打印放音提示
    MOV AH,09H
    INT 21H

    MOV AL,0
CHK1:MOV AH,0BH    ;检测键盘按键
    INT 21H
    CMP AL,0FFH
    JE NEXT1
    JMP CHK1

NEXT1:CALL PLAY    ;调用放音子程序

    MOV AL,0
CHK2:MOV AH,0BH    ;检测键盘按键
    INT 21H
    CMP AL,0FFH
    JE NEXT2
    JMP CHK2

NEXT2:MOV AH,07H    ;检测空格键
    INT 21H
    CMP AL,20H
    JE NEXT1
    MOV AH,4CH
    INT 21H
    
;==============================
    RET
START ENDP

DELAY PROC NEAR
;延时子程序
    PUSH DX
    PUSH AX

    MOV DX,ioport4
    MOV AL,00010000B
    OUT DX,AL

    MOV DX,ioport3
    MOV AL,200
    OUT DX,AL

    MOV DX,ioport2
    MOV AL,10010000B
    OUT DX,AL
    MOV DX,ioport1
    MOV AL,0

CHKPA0:IN AL,DX
    AND AL,1
    CMP AL,1
    JNE CHKPA0

    POP AX
    POP DX
    RET
DELAY ENDP

MYRECORD PROC NEAR
;录音子程序
    PUSH DI
    PUSH CX
    PUSH DX
    PUSH AX

    MOV DI,OFFSET DAT
    MOV CX,60000

AD: MOV DX,ioport5
    OUT DX,AL
    CALL DELAY
    IN AL,DX
    MOV [DI],AL
    INC DI
    LOOP AD

    POP AX
    POP DX
    POP CX
    POP DI
    RET
MYRECORD ENDP

PLAY PROC NEAR
;放音子程序
    PUSH SI
    PUSH CX
    PUSH DX
    PUSH AX

    MOV SI,OFFSET DAT
    MOV CX,60000
    MOV DX,ioport6

DA: MOV AL,[SI]
    OUT DX,AL
    INC SI
    CALL DELAY
    LOOP DA

    POP AX
    POP DX
    POP CX
    POP SI
    RET
PLAY ENDP

CODE ENDS
END STT

⌨️ 快捷键说明

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