设计程序,使用8086的汇编语句,让微机演奏一段小星星的乐曲
时间: 2023-10-09 09:08:51 浏览: 53
以下是使用8086汇编语言编写的微机演奏《小星星》的程序:
```
; 小星星乐曲的频率(单位:Hz)
C1 E1 E1 C1 E1 E1 G1 G1 ; 音符
262 330 330 262 330 330 392 392 ; 频率
MOV AX, 0B800h ; 显示缓存区的起始地址
MOV ES, AX
MOV BX, 0 ; 缓存区的偏移量
MOV CX, 8 ; 音符数量
MOV DX, 500 ; 音符时长(单位:毫秒)
; 循环演奏每个音符
LEA SI, [C1] ; SI 指向第一个音符
PLAY:
; 演奏音符
CALL BEEP
; 显示当前音符
MOV AL, [SI] ; 取得当前音符
MOV AH, 0Ch ; 文本属性为红色
MOV [ES:BX], AX ; 存入显示缓存区
; 计算下一个音符的偏移量
ADD BX, 2 ; 偏移量 +2
CMP BX, 4000 ; 缓存区大小
JAE EXIT ; 结束演奏
JMP NEXT ; 继续演奏
; 延迟一段时间
DELAY:
MOV CX, DX ; CX = 延迟时长
L1:
LOOP L1 ; 循环延迟
RET
; 发出一声蜂鸣
BEEP:
MOV BX, 61h ; 计数器端口
MOV AL, 0B6h ; 控制字节1
OUT BX, AL ; 发送控制字节1
MOV AL, [SI+1] ; 取得频率的低字节
OUT 43h, AL ; 发送频率的低字节
MOV AL, [SI] ; 取得频率的高字节
OUT 43h, AL ; 发送频率的高字节
IN AL, 61h ; 读取计数器端口
OR AL, 03h ; 设置计数器开关
OUT 61h, AL ; 发送计数器开关
CALL DELAY ; 延迟一段时间
IN AL, 61h ; 读取计数器端口
AND AL, 0FCh ; 清除计数器开关
OUT 61h, AL ; 发送计数器开关
RET
; 指向下一个音符
NEXT:
ADD SI, 2 ; 指向下一个音符
CMP SI, G1+2 ; 是否到达最后一个音符
JB PLAY ; 继续演奏
JMP EXIT ; 结束演奏
; 结束演奏
EXIT:
RET
```
上述程序使用了计数器端口和控制字节向扬声器发出蜂鸣信号,实现了微机演奏《小星星》的效果。
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)