关于C语言背景音乐音乐播放的问题
各位仁兄帮我看下这个测试程序,每次运行时,输入数据回车后总会出现CPU遇到无效指令。程序的主要作用是播放在后台播放音乐,前台可以输入字符。但如果把main的do循环中的putchar(getchar())改成putchar()就不会出现上述情况,不知为什么.
#include<dos.h>
#include<stdio.h>
void install(void interrupt (*)(),int inum);
void interrupt new_timer(void);
void MySound(unsigned short);
void NoSound(void);
void main()
{
int i=9;
install(new_timer,0x1c);
do{
putchar(getchar());
}while(i--);
}
void install(void interrupt (*faddr)(void),int inum)
{
disable();
setvect(inum,faddr);
enable();
}
void interrupt new_timer(void)
{
void interrupt (*old_timer)()=getvect(0x1c);
static short frep[]={147,131,220,131,0},*f=frep;
static char i=0;
if(*f!=0)
{
if(i==5)
{
MySound(*f++);
i=0;
}
else i++;
}
else{
install(old_timer,0x1c);
NoSound();
}
}
void MySound(unsigned short frep)
{
union
{
unsigned short division;
char c[2];
}x;
x.division=119328UL/frep;
outportb(0x43,0xb6);
outportb(0x42,x.c[0]);
outportb(0x42,x.c[1]);
outportb(0x61,inportb(0x61)|3);
}
void NoSound(void)
{
outportb(0x61,inportb(0x61)&0xfc);
}