📄 zh.asm
字号:
DATA SEGMENT
ioport equ 0c000h-280h
;8255A
ioport1 equ ioport+288h
ioport2 equ ioport+28bh
;8253
ioport3 equ ioport+280h
ioport4 equ ioport+283h
;ADC0809
ioport5 equ ioport+298h
;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
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 + -