还是声音程序(为什么不检查外设是否空闲)
STACK SEGMENT
DW 256DUP(?)
STACK ENDS
DATA SEGMENT
FREQ DW 131,147,165,175,196,220,247,262,249,330,349,392,440,494,523,0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV AL,0B6H
OUT 43H,AL
MOV SI,OFFSET FREQ
SOUND: MOV DI,[SI]
ADD SI,2
CMP DI,0
JZ ENDO
MOV DX,12H
MOV AX,34DCH
DIV DI
OUT 42H,AL
MOV AL,AH
OUT 42H,AL
IN AL,61H
OR AL,3
OUT 61H,AL
MOV BX,8000
DELAY1: MOV CX,9999
WAIT1: LOOP WAIT1
DEC BX
JNZ DELAY1
IN AL,61H
AND AL,0FCH
OUT 61H,AL
MOV BX,8000
DELAY2: MOV CX,9999
WAIT2: LOOP WAIT2
DEC BX
JNZ DELAY2
JMP SOUND
ENDO: MOV AH,4CH
INT 21H
CODE ENDS
END START
首先为什么要分WAIT1和WAIT1,如果是发音程序那程序为什么不检查外设是否空闲?
这3条为什么重复用到输出42H,这3条是什么意思?42H又是什么?以后如果我遇到诸如0FCH和42H,41H之类的如何知道他们的作用?
OUT 42H,AL
MOV AL,AH
OUT 42H,AL