回 帖 发 新 帖 刷新版面

主题:扬声器发声的程序

下面程序是书上的一段例子,调试的时候有的时候读取不到状态寄存器的值
还有就是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

回复列表 (共1个回复)

沙发

这应该是一个bug。

用u命令把那段指令反汇编,and这条指令是存在的,只是用p或t执行的时候没有显示出来。

用dos6.22下的debug,是可以看见这条and指令的,xp下的debug却看不见,应该是一个bug。

我来回复

您尚未登录,请登录后再回复。点此登录或注册