还是声音程序(为什么不检查外设是否空闲)

dongjiutiao 2009-12-19 07:01:04
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
...全文
147 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongjiutiao 2009-12-20
  • 打赏
  • 举报
回复
还有我也没看到检查外设的过程啊
dongjiutiao 2009-12-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 nanlingcg 的回复:]
首先为什么要分WAIT1和WAIT1,如果是发音程序那程序为什么不检查外设是否空闲?
是不是WAIT1和WAIT2.
自身循环9999次,用作延时.
用的是蜂鸣器,就是机子有问题它高叫的那个.它基本都闲置,再加
IN AL,61H
OR AL,3                 ;最后两位控制让不让蜂鸣器发声
OUT 61H,AL

IN AL,61H
AND AL,0FCH
OUT 61H,AL
来掌管它了吗?

这3条为什么重复用到输出42H,这3条是什么意思?42H又是什么?以后如果我遇到诸如0FCH和42H,41H之类的如何知道他们的作用?
OUT 42H,AL
MOV AL,AH
OUT 42H,AL

42H端口:8253/54定时器记数器2号(控制蜂鸣器发声的)的控制端口,8253/54定时器数据线8位,16位记数值传进去要分两次,先低后高.
[/Quote]

42H端口以后我再看到这类东西怎么知道他们是做什么的?
nanlingcg 2009-12-19
  • 打赏
  • 举报
回复
首先为什么要分WAIT1和WAIT1,如果是发音程序那程序为什么不检查外设是否空闲?
是不是WAIT1和WAIT2.
自身循环9999次,用作延时.
用的是蜂鸣器,就是机子有问题它高叫的那个.它基本都闲置,再加
IN AL,61H
OR AL,3 ;最后两位控制让不让蜂鸣器发声
OUT 61H,AL

IN AL,61H
AND AL,0FCH
OUT 61H,AL
来掌管它了吗?

这3条为什么重复用到输出42H,这3条是什么意思?42H又是什么?以后如果我遇到诸如0FCH和42H,41H之类的如何知道他们的作用?
OUT 42H,AL
MOV AL,AH
OUT 42H,AL

42H端口:8253/54定时器记数器2号(控制蜂鸣器发声的)的控制端口,8253/54定时器数据线8位,16位记数值传进去要分两次,先低后高.

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧