ASSUME CS:code
start:
MOV AH,1
INT 21h
MOV AH,0
MOV CX,AX
begain:MOV DL,7
MOV AH,2
INT 21h
LOOP begain
MOV AH,4ch
INT 21h
code ENDS
END start
你试试,可能由于相隔的时间太短,分不清到底是响了几声
还要做一个延时的程序段!! 但这是最基础的,很简单。
下面有纤凳个复杂的,你看看,是从网上copy的:
data SEGMENT
ts DB 'please input:$'
again DB 0ah,0dh,'again?(y/n)$'
data ENDS
code SEGMENT
ASSUME CS:code,DS:data
enter1 PROC 子程序,实现睁御的功能是回车换行
PUSH AX
PUSH DX
MOV AH,02h
MOV DL,0dh
INT 21h
MOV DL,0ah
INT 21h
POP DX
POP AX
RET
enter1 ENDP
start:
MOV AX,data 加载数据段
MOV DS,AX
a0003:LEA DX,ts
MOV AH,09h 调用09号功能显示输出字符串
INT 21h
MOV AH,01h 调用01号功能接收字符
INT 21h
CMP AL,'1' 接收的字符与1的ASCll比较,小于则转移
JB a0001
CMP AL,'9' 接收的字符与9的ASCll比较,大于则转移
JA a0001
SUB AL,30h 将ASCll码转换为数字
XOR AH,AH 将AX高八位清零,此时AX中的数字为接收的数字
MOV CX,AX 将AX的值赋给CX以控制循环
a0002:MOV AH,02 响铃程序段
MOV DL,07
INT 21H
LOOP a0002 循环指令
a0001:LEA DX,again 提示是否再次运行本程序
MOV AH,09h
INT 21h
MOV AH,01h 接收字符
INT 21h
CALL enter1
CMP AL,'y' 将接收的字符与y比较,相同则转移
JE a0003
CMP AL,'Y' 将接收的字符与Y比较,相同则转移
JE a0003
MOV AH,4ch
INT 21h
code ENDS
END start
对于第一个程序,我说了,可能会因为电脑的运行时间太短,你分不清到底响了几声,你还要自己写一个延时的程序,就像2楼那样悉竖岩的。
那它确实是可以响n声,只是你判断不出来而已~
ts DB 'please input:$' --在这里,加上0ah,0dh,,即可省去回车换粗谈行的子程序ts DB 0ah,0dh,'please input:$' --这样即可
----
这个程序,没有延时部分,几个声音,都连一起岩乎碰了,发成一个音了。
……
a0002:MOV AH,02 响铃程序段
顷陆 <<<--延时程序,应该加在这里
MOV DL,07
INT 21H
LOOP a0002 循环指令
……
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)