日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汇编实现乐曲演奏《两只老虎》

發布時間:2023/12/14 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编实现乐曲演奏《两只老虎》 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.原理

(1)定義音符和節拍:音符根據表格。

節拍根據12,25,50存入,根據公式計算脈沖和持續時間。

(2)通過不斷變換端口61h第一位的值,控制開關電路發出一串脈沖。

2.代碼

datas segment

;定義音頻表

freq? dw??? 2 dup(262,294,330,262)

????? dw????? 2 dup(330,349,392)

????? dw????? 2 dup(392,440,392,349,330,262)

????? dw??? ??2 dup(294,196,262)

;定義節拍表??? 一個數字為一拍(25),56加下劃線為每一個數字半個節拍(12)? 5 ——為兩個節拍(50)

beat??? dw????? 10 dup(25),50

??????? dw????? 2 dup(25),50,4 dup(12),25,25,4 dup(12),25,25

????? dw??? 25,25,50,25,25,50

datas ends

codes segment

main proc far

?? assume cs:codes,ds:datas

?? org 100h

?? start:

???????? mov ax,datas

????? ?mov ds,ax

????? ?mov cx,32d

????? ?lea si,freq

????? ?lea di,beat

?? play:

?? ???? push cx

????? ?call player

????? ?add si,2d

????? ?add di,2d

????? ?pop cx

????? ?loop play

????? ?mov al,48h

????? ?out 61h,al

????? ?

????? ?mov ah,4ch

????? ?int 21h

main endp

;播放一個字符

player? proc? near

????? ;將音符的頻率轉化為控制脈沖寬度的計數值?? 75頁 脈寬 = 2801 * 50 / freq

?? ? mov ax,2801

?? ? mov bx,50

?? ? mul bx??

?? ? mov bx,[si] ;取出在freq中的對應的音符的頻率

?? ? div bx;計算脈寬

?? ? mov dx,ax? ;存放脈寬

?? ?

?? ? push dx? ;16位的乘法,結果放在ax? dx中

?? ? ;計算節拍? 節拍決定了各音頻持續的時間

?? ??mov bx,[di]

?? ? mov ax,120? ;? 8太快

?? ? mul bx?? ;16位的乘法,結果放在ax bx中

?? ? mov bx,ax

?? ? ;位觸發模式發聲??

?? ? in al,61h

?? ? mov ah,al

?? ? and al,11111100b

?? ?

?? ? pop dx

?? silent:

?? ? xor al,2

?? ? out 61h,al

?? ? mov cx,dx

?? wait1:

?? ? loop wait1

?? ? dec bx

?? ? jnz silent

?? ?

?? ? mov al,ah

?? ? out 61h,al

?? ? ret

?? ?

player endp

?

codes ends

???? end start

總結

以上是生活随笔為你收集整理的汇编实现乐曲演奏《两只老虎》的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。