主题:扬声器发声的程序
下面程序是书上的一段例子,调试的时候有的时候读取不到状态寄存器的值
还有就是AND AL,11111100B这个指令在列表清单里有,但是一读取状态积存器的指令
执行完了以后,就没有这条指令了,很迷惑
CODE SEGMENT
ASSUME CS:CODE
MAIN PROC FAR
START:
MOV BX,6000;延迟时间
MOV CX,1000;变化次数
CALL SOUND
MOV AX,4CH
INT 21H
MAIN ENDP
;*********************
;SOUND--make a sound accroding to frequence and delay
;ON ENTRY: sound frequence(BX)
; sound delay (CX)
;由脉冲门的打开延迟一会在关闭这样重复几次来产生脉冲电流,这个
;脉冲电流被放大后,送到扬声器就发出声音了。
;*********************
SOUND PROC NEAR
PUSH AX
PUSH DX
MOV DX,CX
IN AL,61H ;获取扬声器端口状态寄存器
AND AL,11111100B ;设置脉冲门和震荡器为0
TRIG: XOR AL,2 ;脉冲门交替开关
OUT 61H,AL ;把状态送到端口
MOV CX,BX ;等待时间
DELAY:
LOOP DELAY ;延迟循环
DEC DX ;循环开关N次
JNE TRIG
POP DX
POP AX
RET
SOUND ENDP
CODE ENDS
END START
还有就是AND AL,11111100B这个指令在列表清单里有,但是一读取状态积存器的指令
执行完了以后,就没有这条指令了,很迷惑
CODE SEGMENT
ASSUME CS:CODE
MAIN PROC FAR
START:
MOV BX,6000;延迟时间
MOV CX,1000;变化次数
CALL SOUND
MOV AX,4CH
INT 21H
MAIN ENDP
;*********************
;SOUND--make a sound accroding to frequence and delay
;ON ENTRY: sound frequence(BX)
; sound delay (CX)
;由脉冲门的打开延迟一会在关闭这样重复几次来产生脉冲电流,这个
;脉冲电流被放大后,送到扬声器就发出声音了。
;*********************
SOUND PROC NEAR
PUSH AX
PUSH DX
MOV DX,CX
IN AL,61H ;获取扬声器端口状态寄存器
AND AL,11111100B ;设置脉冲门和震荡器为0
TRIG: XOR AL,2 ;脉冲门交替开关
OUT 61H,AL ;把状态送到端口
MOV CX,BX ;等待时间
DELAY:
LOOP DELAY ;延迟循环
DEC DX ;循环开关N次
JNE TRIG
POP DX
POP AX
RET
SOUND ENDP
CODE ENDS
END START