shuiziluyinji.txt

来自「用汇编语言写的实现数字录音机功能 有要的话拿去吧」· 文本 代码 · 共 82 行

TXT
82
字号
         






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 + =
减小字号Ctrl + -
显示快捷键?