📄 shuiziluyinji.txt
字号:
PRINTF MACRO XX ;DOS调用并输出字符串
LEA DX,XX
MOV AH,9
INT 21H
ENDM
DATA SEGMENT
BUF DB 60000 DUP(?)
STR1 DB 'ENTER ANY KEY TO BEGIN RECORD!',0AH,0DH,'$'
STR2 DB 'ENTER ANY KEY TO PLAY,ENTER,SPACE TO EXIT!',0AH,0DH,'$'
STR3 DB 'RECORDING ...',0AH,0DH,'$'
STR4 DB 'PLAYING ...',0AH,0DH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
PRINTF STR1 ;output string-1显示字符串1
MOV AH,1 ;DOS-1,input a char
INT 21H
CALL RE_CORD ;star reconding开始录音
LOP2: PRINTF STR2 ;output string-2 显示字符串2
MOV AH,7 ;DOS-7,get a char and not display it接受一个字符但是不显示
INT 21H
CMP AL,20H ;the char is 'space'? 判断是否是空格
JZ EXIT ;yes,return to DOS 如果是则返回Dos
CALL PLAY ;调用Play
JMP LOP2
EXIT: MOV AH,4CH ;返回DOS
INT 21H
DELAY:PUSH AX
PUSH DX
MOV DX,0C403H ;初始化定时器模式
MOV AL,10H
OUT DX,AL
MOV DX,0C400H ;初始化定时器初值
MOV AL,200
OUT DX,AL
MOV DX,0C40BH
MOV AL,90H
OUT DX,AL
MOV DX,0C408H
LOP3: IN AL,DX ; 等待中断并用查询方式读入
AND AL,1
JZ LOP3
POP DX
POP AX
RET
RE_CORD:PRINTF STR3 ;录音
LEA DI,BUF
MOV CX,60000
LOP4: MOV DX,0C41AH ;启动采样
OUT DX,AL
CALL DELAY
IN AL,DX ;读进采样数
MOV [DI],AL
INC DI
LOOP LOP4
RET
PLAY: PRINTF STR4 ;放音
LEA SI,BUF
MOV CX,60000
MOV DX,0C410H
LOP5: MOV AL,[SI] ;把数据放到0832端口并放出来
OUT DX,AL
INC SI
CALL DELAY
LOOP LOP5
RET
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -