本文主要介绍“如何用汇编语言发出各种声音”。在日常操作中,相信很多人对于如何用汇编语言发出各种声音都有疑问。边肖查阅了各种资料,整理出简单易用的操作方法,希望能帮你解答“如何用汇编语言发出各种声音”的疑惑!接下来,请和边肖一起学习!
9.戒指设计
9.1设计要求:
掌握如何使用铃铛。设计程序从键盘接收输入字符。如果数字是n,它会响n次。如果输入的不是数字,就不会响。
9.2设计思路:
判断输入值在0和9之间,n的值给BP,振铃延迟次数CX设置为输出n次振铃。
9.3程序清单:
数据分类
pkeyDB0AH,0DH,'请输入: ',' $ '
ERRDB0AH,0DH,' eero!',0AH,0DH,'请重新输入: ',' $ '
数据结束
CODESEGMENT
ASSUMECS:CODE,DS:DATA
状态:最大值,数据
MOVDS,AX
移动,斧头
pkey
MOVAH,09H
INT21HDOS函数调用,输出字符串
INPUT:MOVAH,01H
INT21H
CMPAL,“9”
JAeero
CMPAL,“0”
JBeero
SUBAL,30H输入0~9,那么AL就是环数。
啊,啊
MOVBP,AX;BP是环数n
xiang:nbs
p; MOV CX,4 ;CX为响铃延时时间
MOV AH,02H
MOV DL,07H
INT 21H ;DOS功能调用,响铃
LP: LOOP LP ;响铃延时
DEC BP
JNZ xiang ;响铃N次
JMP STATE
eero: LEA DX,ERR
MOV AH,9
INT 21H ;输出错误字符串
JMP INPUT
CODE ENDS
END STATE
9.4程序运行结果及分析:
设置CX次数为延时次数,BP次数为响铃次数,调用响铃功能通过延时实现响铃,起初会把延时次数和响铃次数混淆导致错误。
图9 响铃设计结果
10.需要外接扬声器的发声程序
10.1机枪声音
PROGRAM SEGMENT MAIN PROC FAR ASSUME CS:PROGRAM ORG 100H STRAT:MOV CX,20D NEW_SHOT:PUSH CX CALL SHOOT MOV CX,4000H SILENT:LOOP SILENT POP CX LOOP NEW_SHOT INT 20H MAIN ENDP SHOOT PROC NEAR MOV DX,140H MOV BX,20H IN AL,61H AND AL,11111100B SOUND:XOR AL,2 OUT 61H,AL ADD DX,9248H MOV CL,3 ROR DX,CL MOV CX,DX AND CX,1FFH OR CX,10 WAIT: LOOP WAIT DEC BX JNZ SOUND AND AL,11111100B OUT 61H,AL RET SHOOT ENDP PROGRAM ENDS END STRAT
10.2音乐播放
;定义数据段 data segment infor1 db 0Dh, 0AH, "welocom you to come here listeng! $" mus_freg dw 330,294,262,294,3 dup (330) ;频率表 dw 3 dup (294),330,392,392 dw 330,294,262,294,4 dup (330) dw 294,294,330,294,262,-1 mus_time dw 6 dup (25),50 ;节拍表 dw 2 dup (25,25,50) dw 12 dup (25),100 data ends ;栈段定义 stack segment stack db 200 dup(?) stack ends ;--------字符串输出宏---------- SHOWBM MACRO b LEA DX,b MOV AH,9 INT 21H ENDM ;----------音乐地址宏----------- ADDRESS MACRO A,B LEA SI,A LEA BP,DS:B ENDM ;代码段定义 code segment assume ds:data, ss:stack, cs:code start: mov ax, data mov ds, ax mov ax, stack mov ss, ax mov sp, 200 address mus_freg, mus_time call music exit: mov ah, 4cH int 21h ;------------发声------------- gensound proc near push ax push bx push cx push dx push di mov al, 0b6H out 43h, al mov dx, 12 mov ax, 348ch div di out 42h, al mov al, ah out 42h, al in al, 61h mov ah, al or al, 3 out 61h, al wait1: mov cx, 3314 call waitf delay1: dec bx jnz wait1 mov al, ah out 61h, al pop di pop dx pop cx pop bx pop ax ret gensound endp ;-------------------------- waitf proc near push ax waitf1: in al,61h and al,10h cmp al,ah je waitf1 mov ah,al loop waitf1 pop ax ret waitf endp ;--------------发声调用函数---------------- music proc near xor ax, ax freg: mov di, [si] cmp di, 0FFFFH je end_mus mov bx, ds:[bp] call gensound add si, 2 add bp, 2 jmp freg end_mus: ret music endp code ends end start
到此,关于“汇编语言如何实现发出各种声音”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/123885.html