设计程序,使用8086的汇编语句,让微机演奏一段小星星的乐曲
时间: 2023-10-09 15:08:51 浏览: 42
下面是使用8086汇编语言编写的小星星乐曲演奏程序:
```
; 小星星乐曲演奏程序
.model small
.stack 100h
.data
freq dw 0 ; 存储频率
duration dw 0 ; 存储持续时间
.code
mov ax, @data ; 初始化数据段寄存器
mov ds, ax
mov dx, 3c2h ; 关闭光标显示
mov al, 0ah
out dx, al
inc dx
in al, dx
and al, 0fch
out dx, al
mov cx, 5 ; 循环演奏5次
play_loop:
mov si, offset song ; 小星星乐曲数据存放在song数组中
mov di, offset song_end
mov bp, 0 ; 初始化数组指针
note_loop:
mov ax, [si+bp] ; 获取频率和持续时间
mov freq, ax
mov ax, [si+bp+2]
mov duration, ax
call play_note ; 播放音符
add bp, 4 ; 移动数组指针到下一个音符
cmp si+bp, di ; 判断是否演奏完毕
jne note_loop
loop play_loop ; 继续循环演奏
mov ah, 4ch ; 返回操作系统
int 21h
; 播放音符
play_note:
mov bx, 1193180 / freq ; 计算计数器初值
mov al, 10110110b ; 设置控制字节
out 43h, al
mov ax, bx
out 42h, al
mov al, ah
out 42h, al
mov cx, duration ; 等待持续时间
delay:
push cx
mov cx, 0ffffh
inner:
loop inner
pop cx
loop delay
mov al, 0 ; 关闭扬声器
out 61h, al
ret
; 小星星乐曲数据
song dw 659, 250
dw 659, 250
dw 880, 250
dw 880, 250
dw 987, 250
dw 987, 250
dw 880, 500
dw 0, 250
dw 783, 250
dw 783, 250
dw 659, 250
dw 659, 250
dw 587, 250
dw 587, 250
dw 523, 500
song_end:
end
```
程序使用了8253定时器来产生音调,并通过扬声器输出。小星星乐曲的频率和持续时间存储在一个数组中,通过循环读取数组中的数据来演奏乐曲。