📄 rjexp12.asm
字号:
DATA SEGMENT
MESS DB '按任意键退出',0DH,0AH,'$'
TABLE DW 524,588,660,698,784,880,988,1048,1176,1320,0
TABLE1 DB 31H,31H,32H,31H,34H,33H,3BH
DB 31H,31H,32H,31H,35H,34H,3BH
DB 31H,31H,38H,36H,34H,33H,32H,3BH
DB 36H,36H,36H,34H,35H,34H,3BH,0AAH
DATA ENDS
STACK SEGMENT
STA DB 256 DUP(?)
TOP EQU LENGTH STA
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV AX,TOP
MOV SP,AX
MOV AH,09H
LEA DX,MESS
INT 21H
KK: LEA SI,TABLE1
SING: MOV AH,06H
MOV DL,0FFH
INT 21H ;接收键入字符
JNZ FINISH ;有键按下则退出程序
MOV AL,[SI]
CMP AL,3BH
JNE DDD
CALL DELAY
JMP QQ
DDD: CMP AL,0AAH
JE KK
SUB AL,31H
SHL AL,01 ;转化为相表偏移量(表中每项占两字节)
MOV BL,AL
MOV AX,0000H
MOV DX,12H ;常数120000H作为被除数
MOV BH,00
DIV WORD PTR [TABLE+BX]
MOV BX,AX ;求得频率值→BX
MOV AL,10110110B
OUT 43H,AL ;设置计数器2计数初值低位
MOV AX,BX
OUT 42H,AL ;设置计数器2计数初值低位
MOV AL,AH
OUT 42H,AL ;设置计数初值高位
IN AL,61H
OR AL,03H
OUT 61H,AL ;打开与门
CALL DELAY
IN AL,61H
AND AL,0FCH
OUT 61H,AL ;关闭
QQ: INC SI
JMP SING ;循环
FINISH:MOV AX,4C00H
INT 21H ;结束
DELAY PROC NEAR ; 延时子程序
PUSH CX
PUSH AX
MOV AX,06H
X1: MOV CX,0FFFFH
X2: DEC CX
JNZ X2
DEC AX
JNZ X1
POP AX
POP CX
RET
DELAY ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -