庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>程序设计>汇编语言>相关源码>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

汇编的的各类源码--sound

 作者:本站收集   日期:2005-8-1 15:39:02
字号选择〖 〗/ 双击滚屏 单击停止   
; sound.asm
; 
; This is a small sound example for the IBM PC
; It will play 12 notes of the octave starting at middle C.
;-----------------------------------------------------------------------------
; How to generate sound on the IBM PC :
;
; The 8255 (port 61H) bit 0 controls the 8253 timer
;                     bit 1 controls the speaker
;
; The output channel 2 from the 8253 timer will be ANDed with the 
; speaker control bit in order to turn on/off the speaker.
;
; Timer channel 2 internal count register (port 42h) is loaded in
; two successive OUT operations with the lower byte being loaded first.
; For this to work properly, timer command register has to be loaded first
; with B6H.
;
; Since the input clock to the timer chip is 1.19318 MHz, the counter value
; to generate the frequency X can be calculated by 1193180 / X.
;-----------------------------------------------------------------------------
; CX is used as a note counter with the frequency effectively being
; incremented by a half tone and the corresponding count being loaded
; into the count register on each iteration.
;
; No stack segment is needed for this small program, so don't panic
; when you receive the 'No stack segment' warning.
;
; Arne Asplem 880731 (MASM 4.0)



dseg    segment                         ; data segment
notes   dw      262,277,294,311,330,349,370,392,415,440,466,494
dseg    ends

cseg    segment

sound   proc far
        assume  cs:cseg, ds:dseg, ss:nothing

start:  
        mov     ax, dseg
        mov     ds, ax                  ; set up data segment (DS) reg.
        xor     si, si
        mov     bx, 12                  ; note count

; set up timer command register and counter register

        mov     al, 0b6h                ; set 8253 command register
        out     43h, al                 ; for channel 2, mode 3

nloop:
        mov     ax, 34dch               ; low part of clock freq.
        mov     dx, 12h                 ; hight part of clock freq.
        div     [notes + si]            ; get note from data segment
        out     42h, al                 ; 8253 command register (low byte)
        mov     al, ah
        out     42h, al                 ; 8253 command regsieter (high byte)

; turn on low bits in 8255 output port

        in      al, 61h                 ; read current value of 8255 port
        or      al, 3                   ; clear low bits
        out     61h, al                 ; send new value to port

; loop while note is sounding

        mov     cx, 6d60h       

rpta:
        loop    rpta                    ; 1/10 sec delay

; turn off speaker, check note count, set up next note

        xor     al, 3                   
        out     61h, al                 ; turn off speaker
        mov     cx, 0af0h
        
rptb:
        loop    rptb                    ; 1/100 sec delay
        inc     si                      ; increment note pointer
        inc     si
        dec     bx                      ; decrement note counter
        
        jnz     nloop                   ; loop until bx = 0

        mov     ax, 4c00h               ; terminate program
        int     21h

sound   endp
cseg    ends
        end     start
        

上一篇:汇编的的各类源码--showmem    下一篇:汇编的的各类源码--getsect  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 本站收集
信息来源: 网络 录入时间: 2005-8-1 15:39:02
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿