2 heyuhy heyuhy 于 2016.01.13 12:40 提问

汇编语言键盘钢琴程序 5C
 DATA SEGMENT 

KEYS DB 'QWERTYU','ASDFGHJ','ZXCVBNM'
FREQ DB 131,147,165,175,196,220,247
WELC DB 'Welcome to "Piano of Keyboard"',0DH,0AH,0DH,0AH,'$'
EXPL DB 'Explanation:', 0DH,0AH,'Key:QWERTYU-Low Notes 1 2 3 4 5 6 7 ', 0DH,0AH,'Key:ASDFGHJ-Middle Notes 1 2 3 4 5 6 7 ',0DH,0AH,'Key:ZXCVBNM-High Notes 1 2 3 4 5 6 7 ', 0DH,0AH, 'Please Note Your Caps Lock Truned On', 0DH,0AH
ESCQ DB 0DH,0AH,'Please play:',0DH,0AH,'(You can Type "ESC" to exit)', 0DH,0AH,0DH,0AH,'$'
LAST DB 0DH,0AH,'Welcome again!','$'
REMI DB 'Reminder:Please play the Key:"QWERTYU-ASDFGHJ-ZXCVBNM"', 0DH,0AH,'$'

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE DS:DATA

START: MOV AX,DATA

   MOV    DS,AX           ;初始化数据区
   LEA     DX,WELC 

   MOV    AH,9                                      
   INT      21H             ;显示提示语句  

INPUT: MOV AH,7

   INT      21H             ;不回显输入键盘的KEY         
   CMP     AL,1BH          ;判断输入KEY是否为“ESC” 

   JZ       EXIT            ;若输入KEY为“ESC”则跳转到退出EXIT 
   LEA     DI,KEYS         
   MOV    CX,21           

FIND: CMP AL,[DI]

   JZ       SING            ;找到KEY相对应的偏移地址DI则跳转至SING         
   INC      DI  

   LOOP    FIND            ;根据输入KEY的ASCII码找到相对应的偏移地址          

   LEA      DX,REMI         
   MOV     AH,9 

   INT       21H            ;输入的KEY不正确,显示提醒请输入正确的KEY           
   JMP      INPUT          ;不是正确的输入KEY,则跳转至INPUT   

SING: CALL FIFRE ;进入计算KEY所对应频率值的子程序

CALL SOUND ;进入根据频率值发出音调的子程序
JMP INPUT ;发声完毕后跳转至INPUT

EXIT: LEA DX,LAST

MOV AH,9

   INT       21H            ;显示退出时的字幕             
   MOV      AX,4C00H 

   INT       21H            ;返回DOS          

FIFRE PROC ;计算KEY所对应频率值的子程序

MOV DL,1 ;标记频率基准值的倍数值

LEA BX,KEYS

   SUB       DI,BX         ;计算偏移地址相对与首地址的值          
   CMP       DI,6 
   JNA       SOU           ;属于低音直接跳转至SOU         
   SUB       DI,7           ;属于中音,将偏移地址减7          
   ADD      DL,1           ;标记倍数值加倍为2          
   CMP      DI,6 

   JNA       SOU           ;属于中音,跳转至SOU 

   SUB       DI,7           ;属于高音,将偏移地址再减7 
   ADD      DL,2           ;标记倍数值再加倍为4          

SOU: MOV AX,DI ;将被换码给AL

LEA BX,FREQ

XLAT

   MUL     DL             ;频率基准值乘以倍数得到KEY所对应的频率值          
   MOV     BX,AX          
   RET 

FIFRE ENDP

SOUND PROC ;根据频率值发出音调的子程序

MOV AL,0B6H

   OUT      43H,AL        ;向8253的43H写入控制字
   MOV     DX,12H          
   MOV     AX,348CH     

   DIV      BX             ;计算计数初值N          
   OUT     42H,AL               
   MOV     AL,AH 

   OUT     42H,AL          ;向通道2端口42H写入计数初值N   

   IN       AL,61H          
   OR       AL,3        

   OUT     61H,AL          ;打开扬声器    

   CALL    DELAY          ;进入延时子程序
   IN      AL,61H          
   AND    AL,0FCH 

   OUT     61H,AL          ;关闭扬声器
   RET 

SOUND ENDP

DELAY PROC ;延时时间子程序

PUSH BX

PUSH CX

MOV BX,4000

DY1: MOV CX,0FFFH

DY0: LOOP DY0

DEC BX

JNZ DY1 ;利用LOOP循环和跳转指令进行双循环

POP CX
POP BX

RET

DELAY ENDP

CODE ENDS

END START
在DOSBOX里运行时无论按哪个键它都没办法弹图片说明
一直重复显示着那句话!!
求助呀!

1个回答

devmiao
devmiao   Ds   Rxr 2016.01.20 04:06
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
电脑钢琴系统汇编设计实现报告
利用汇编语言设计一个模拟钢琴演奏程序。在显示器上显示出钢琴的键盘,以计算机键盘的相应键模拟钢琴键盘进行乐曲的演奏。在PC机键盘上按键,屏幕上对应的钢琴键出现跳动,并发出相应音符的声音
汇编实现键盘钢琴
基于上一篇文章,汇编实现背景音乐的播放的理论知识,然后改编了一个小小的键盘钢琴的实现。如果对于实现的原理不太明白,就去看上一篇博客。 下面是实现的程序: ;汇编实现键盘钢琴 data segment DIDAS EQU 1 ;延时(时钟嘀嗒次数) frequency dw 441,495,556,589,661,
汇编--计算机钢琴实现
计算机钢琴 一 钢琴功能   程序运行时,是PC成为一架可弹奏的“钢琴”,当按下数字键1~8,一次发出1,2,3,4,5,6,7,i八个音调。按ctrl+c退出程序。 二 实验原理   1 PC机扬声器电路如下图            通过给8253定时器装入不同的计数值,可使其输入不同频率的波形。与门打开后,经过放大器的放大作用,便可驱动扬声器发出不同
电脑钢琴系统 《汇编语言程序设计》
利用汇编语言设计一个模拟钢琴演奏程序。在显示器上显示出钢琴的键盘,以计算机键盘的相应键模拟钢琴键盘进行乐曲的演奏。在PC机键盘上按键,屏幕上对应的钢琴键出现跳动,并发出相应音符的声音
键盘钢琴汇编语言程序设计
数据结构 键盘钢琴 键盘钢琴汇编语言程序设计
汇编语言实现钢琴发声
可以实现两个功能:1.用键盘模拟钢琴发声,2.用蜂鸣器播放两只老虎的音乐。
基于汇编语言的电子琴设计(1)
[调试环境:TASM 5.0+ winxp] 一、基本要求:    利用PC键盘和CRT显示器设计一个电子琴,首先在CRT显示器上模拟出琴键的画面,然后要求在不同的情况下按下键盘上“1~7”中任意数字键,可弹奏出与之相应的音调,且在模拟键盘上标示出对应的那个键来。 设计应完成以下功能:(1)按“1~7”中的任一数字键,则发出对应的中音.(2)若同时按下“高音键”和“1~7”
java编写程序实现键盘钢琴,运用键盘事件、鼠标事件
java编写程序实现键盘钢琴,运用键盘事件、鼠标事件
汇编键盘钢琴发声实验1-8个音符
汇编键盘钢琴发声实验1-8对1-7,i音符汇编键盘钢琴发声实验1-8对1-7,i音符
键盘小钢琴[C语言][自制]
大一上最喜欢的一个作品 。刚开始只是一个能自动发出小星星音乐的小程序XD 效果图: 代码如下: /*This is a small piano.这是一个小钢琴哦~*/ #include #include //非缓冲输入 #include #include #pragma warning(disable:4996) //to use getche() in VS needs i