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

技术汇编语言如何实现发出各种声音这篇文章主要介绍“汇编语言如何实现发出各种声音”,在日常操作中,相信很多人在汇编语言如何实现发出各种声音问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”汇编语

本文主要介绍“如何用汇编语言发出各种声音”。在日常操作中,相信很多人对于如何用汇编语言发出各种声音都有疑问。边肖查阅了各种资料,整理出简单易用的操作方法,希望能帮你解答“如何用汇编语言发出各种声音”的疑惑!接下来,请和边肖一起学习!

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

(0)

相关推荐

  • css如何缓慢改变元素高度

    技术css如何缓慢改变元素高度本篇内容介绍了“css如何缓慢改变元素高度”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    攻略 2021年12月10日
  • Visual Studio 2005 SP1如何安装

    技术Visual Studio 2005 SP1如何安装小编给大家分享一下Visual Studio 2005 SP1如何安装,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获

    攻略 2021年11月25日
  • 古诗竹里馆,《竹里馆》全诗内容是什么

    技术古诗竹里馆,《竹里馆》全诗内容是什么唐  王维 《竹里馆》 独坐幽篁里古诗竹里馆,弹琴复长啸。
    深林人不知,明月来相照。 译文 :
    独自闲坐幽静竹林,时而弹琴时而长啸。
    密林之中何人知晓我在这里?只有一轮明月静

    生活 2021年10月22日
  • Python语法举例分析

    技术Python语法举例分析这篇文章主要介绍“Python语法举例分析”,在日常操作中,相信很多人在Python语法举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python语法举

    攻略 2021年11月20日
  • 抖音刷粉互粉,抖音怎么上热门?

    技术抖音刷粉互粉,抖音怎么上热门?抖音怎么上热门?
    抖音是头条系的产品,后背依托的头条强大的推荐机制。根据算法,机器任何+人工双重审核:上传视频初期,平台会给你一个初始流量,如果初始流量之后,根据点赞率,评论率,转发率,

    测评 2021年10月19日
  • run的现在分词,run的过去式和过去分词是什么

    技术run的现在分词,run的过去式和过去分词是什么过去式是英语语法的一种,表示过去某个时间里发生的动作或状态run的现在分词。 run为不规则动词,过去式为“ran” 过去分词是 分词的一种,通常一般加ed。 run为

    生活 2021年10月20日