博客
关于我
8086汇编语言21键电子琴
阅读量:344 次
发布时间:2019-03-04

本文共 3048 字,大约阅读时间需要 10 分钟。

建议使用dosbox进行qwq
(编写环境:masm5.0,dosbox0.74)

说明

qwertyu对应高音区的do lai mi fa so la xi
asdfghj对应中音区
zxcvbnm对应低音区
可以在TABLE中修改对应区域的频率,或者在此基础上加上半音,搞个十二平均律的qwq

org 100hASSUME	CS:seg2,DS:seg1seg1		SEGMENT	pstart	DB	'Program start.',0DH,0AH,'$'	pend 	DB	'Program will end when input' ,27H,'ESC',27H,'.',0DH,0AH,'$'		sec	DB	?	TABLE	DW	130		DW	146		DW  164		DW	174		DW	196		DW	220		DW	246		DW	261		DW	293		DW	329		DW	349		DW	392		DW	440		DW	493		DW	523		DW	587		DW	659		DW	698		DW	784		DW	880		DW	987seg1		ENDSSTACK	SEGMENT	PARA	STACK	'STACK'	STA	DB	48	DUP(?)	TOP	EQU	LENGTH	STASTACK	ENDSseg2		SEGMENTASSUME	CS:seg2,DS:seg1,SS:STACK,ES:seg1start:	MOV	 AX,seg1		MOV	 DS,AX		MOV	 DX,OFFSET pstart		MOV	 AH,09H		INT	 21H     				MOV	DX,OFFSET pend		MOV	AH,09H		INT	21H		MOV	AX,STACK		MOV	SS,AX		MOV	AX,TOP		MOV	SP,AX		MOV	AL,90H		OUT	63H,ALwait1:  	MOV     AH,01H					INT		21H		CMP	 	AL,1BH					JE		cse		CMP	 	AL, 'a'		JE		ka		CMP	 	AL, 's'		JE		ks		CMP	 	AL, 'd'		JE		kd		CMP	 	AL, 'f'		JE		kf		CMP	 	AL, 'g'		JE		kg		CMP	 	AL, 'h'		JE		kh		CMP	 	AL, 'j'		JE		kj		JMP		wait2 kj:		JMP		keyjka:		JMP		keyaks:		JMP		keyskd:		JMP		keydkf:		JMP		keyfkg:		JMP		keygkh:		JMP		keyhcse: 		JMP		keyESC wait2:	CMP	 	AL, 'q'		JE		kq		CMP	 	AL, 'w'		JE		kw		CMP	 	AL, 'e'		JE		ke		CMP	 	AL, 'r'		JE		kr		CMP	 	AL, 't'		JE		kt		CMP	 	AL, 'y'		JE		ky		CMP	 	AL, 'u'		JE		ku		JMP 	wait3ku:		JMP		keyukt:		JMP		keytkr:		JMP		keyrke:		JMP		keyekq:		JMP		keyqkw:		JMP		keywky:		JMP		keyywait3:		CMP	 	AL, 'z'		JE		kz		CMP	 	AL, 'x'		JE		kx		CMP	 	AL, 'c'		JE		kc		CMP	 	AL, 'v'		JE		kv		CMP	 	AL, 'b'		JE		kb		CMP	 	AL, 'n'		JE		kn		CMP	 	AL, 'm'		JE		km		CMP	 	AL, 'p'JE		kp		JMP     find kp:		JMP		keyp   km:		JMP		keymkn:		JMP		keynkb:		JMP		keybkc:		JMP		keyckx:		JMP		keyxkz:		JMP		keyzkv:		JMP		keyv	keyp:		IN	AL,61H		AND	AL,0FCH		OUT	61H,AL		JMP	wait1find:		MOV	AH,0BH		INT	21H		AND	AL,1111111B		CALL	DELAY		JNZ	find		IN	AL,61H		AND	AL,0FCH		OUT	61H,AL		JMP	wait1keyz:		MOV	BX,TABLE		JMP	SOUNDFkeyx:		MOV	BX,TABLE+2		JMP	SOUNDFkeyc:		MOV	BX,TABLE+4		JMP	SOUNDFkeyv:		MOV	BX,TABLE+6		JMP	SOUNDFkeyb:		MOV	BX,TABLE+8		JMP	SOUNDFkeyn:		MOV	BX,TABLE+10		JMP	SOUNDFkeym:		MOV	BX,TABLE+12		JMP	SOUNDFkeya:		MOV	BX,TABLE+14		JMP	SOUNDFkeys:		MOV	BX,TABLE+16		JMP	SOUNDFkeyd:		MOV	BX,TABLE+18		JMP	SOUNDFkeyf:		MOV	BX,TABLE+20		JMP	SOUNDFkeyg:		MOV	BX,TABLE+22		JMP	SOUNDFkeyh:		MOV	BX,TABLE+24		JMP	SOUNDFkeyj:		MOV	BX,TABLE+26		JMP	SOUNDFkeyq:		MOV	BX,TABLE+28		JMP	SOUNDFkeyw:		MOV	BX,TABLE+30		JMP	SOUNDFkeye:		MOV	BX,TABLE+32		JMP	SOUNDFkeyr:		MOV	BX,TABLE+34		JMP	SOUNDFkeyt:		MOV	BX,TABLE+36		JMP	SOUNDFkeyy:		MOV	BX,TABLE+38		JMP	SOUNDFkeyu:		MOV	BX,TABLE+40		JMP	SOUNDFSOUNDF:		MOV	DX,12H		MOV	AX,348CH		DIV	BX		CALL	SOUND		CALL	DELAY		JMP	findkeyESC:	MOV   	AH,4CH		INT     21HSOUND	PROC	NEAR		PUSH	AX		MOV	AL,10110110B		OUT	43H,AL		POP	AX		OUT	42H,AL		MOV	AL,AH		OUT	42H,AL		IN	AL,61H		OR	AL,03H		OUT	61H,AL		RETSOUND	ENDPDELAY	PROC	NEAR		PUSH	CX		PUSH	AX		MOV	AX,0FFFHX11:		MOV	CX,100X12:		LOOP	X12		DEC	AX		JNZ	X11		POP	AX		POP	CX		RETDELAY	ENDPseg2 	ENDS	    END   	start

转载地址:http://ixir.baihongyu.com/

你可能感兴趣的文章
CodeCombat代码全记录(Python学习利器)--安息之云山峰(第四章)代码9
查看>>
skyfans之每天一个Liunx命令系列之二:uptime
查看>>
Kubernetes十三--Pod定义文件内容详解
查看>>
3、69道Spring面试题及答案
查看>>
普歌- LRF-(简单易懂)笔记本电脑USB接口案例 接口多态(向下转型)
查看>>
Java中如何构建树结构
查看>>
解决vue部署到nginx后刷新404
查看>>
解决eclipse字体背景变红或者变绿的问题
查看>>
一个面试大牛的经历
查看>>
扫雷小游戏——简单易懂
查看>>
软件架构-zookeeper快速入门
查看>>
软件架构-zookeeper场景和实现
查看>>
「初级篇」跟我一起学docker(四)--容器的基本操作
查看>>
22 岁毕业做程序员的「普通」人,50 岁时的人生轨迹是怎样的?
查看>>
scala上界与下界、协变与逆变
查看>>
java稀疏数组
查看>>
全球数字货币加快研发
查看>>
数字化助力金融科技,实现产业良性循环
查看>>
2020-11-23(彻底理解KMP)
查看>>
常用的IDC函数
查看>>