文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

汇编语言如何实现发出各种声音

2023-06-21 21:37

关注

这篇文章主要介绍“汇编语言如何实现发出各种声音”,在日常操作中,相信很多人在汇编语言如何实现发出各种声音问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”汇编语言如何实现发出各种声音”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

响铃设计

1设计要求:

要求掌握响铃的使用方法。设计程序,从键盘接收输入字符,如是数字N,则响铃N次,如输入为非数字,则不响铃。

2设计思路:

判断输入为0~9之间,将N值给BP,设置响铃延时次数CX输出N次响铃。

汇编语言如何实现发出各种声音

3程序清单:

DATA    SEGMENT        pkey   DB  0AH,0DH,'please input the N:','$'        ERR   DB  0AH,0DH,'eero!',0AH,0DH,'please input the N again:','$'DATA    ENDS  CODE    SEGMENT        ASSUME  CS:CODE,DS:DATASTATE:  MOV AX,DATA        MOV DS,AX        MOV ES,AX                 LEA DX,pkey        MOV AH,09H        INT 21H                 ;DOS功能调用,输出字符串INPUT:  MOV AH,01H        INT 21H        CMP AL,'9'        JA  eero        CMP AL,'0'        JB  eero        SUB AL,30H              ;输入为0~9,则AL为响铃次数        SUB AH,AH        MOV BP,AX               ;BP为响铃次数N        xiang:   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 INPUTCODE   ENDSEND  STATE

4程序运行结果及分析:

设置CX次数为延时次数,BP次数为响铃次数,调用响铃功能通过延时实现响铃,起初会把延时次数和响铃次数混淆导致错误。

汇编语言如何实现发出各种声音

图9 响铃设计结果

需要外接扬声器的发声程序

1机枪声音

PROGRAM SEGMENT      MAIN PROC FAR        ASSUME CS:PROGRAM                ORG 100HSTRAT:MOV CX,20DNEW_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

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),100data 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:BENDM;代码段定义code segment     assume ds:data, ss:stack, cs:codestart:     mov ax, data     mov ds, ax     mov ax, stack     mov ss, ax     mov sp, 200        address mus_freg, mus_time     call musicexit:          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, alwait1:     mov cx, 3314     call waitfdelay1:     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 axwaitf1:      in al,61h      and al,10h      cmp al,ah      je waitf1      mov ah,al      loop waitf1      pop ax      retwaitf endp;--------------发声调用函数----------------music proc near      xor ax, axfreg:      mov di, [si]      cmp di, 0FFFFH      je end_mus      mov bx, ds:[bp]      call gensound      add si, 2      add bp, 2      jmp fregend_mus:      retmusic endpcode ends     end start

到此,关于“汇编语言如何实现发出各种声音”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯