计算机钢琴程序 汇编,计算机钢琴的程序编写

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

DATA SEGMENT

DAT DB 0, 45, 75, 100, 125, 157, 190, 222, 252

HEIGHT DB 0, 40, 70, 100, 130, 160, 190, 220, 250

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV AH,0 ; 图形方式:每屏幕字符数80×25, 16色

MOV AL,12H

INT 10H

MOV AH,6 ; 清屏

MOV AL,0

MOV CH,0

MOV CL,0

MOV DH,18H

MOV DL,4FH

INT 10H

MOV SI,451

MOV DX,480

REDRAW:MOV DI,16

ADD DI,48

MOV CX,16

SUB DX,1

CMP DX,SI

JB LL

MOV BL,0

PAINT: MOV AL,9

MOV AH,0CH

MOV BH,0

INT 10H

INC CX

CMP CX,DI

JBE PAINT

ADD DI,80

ADD CX,32

INC BL

CMP BL,7

JBE PAINT

JMP REDRAW

LL:

MOV AL,80H ;对8255进行初始化工作,A口、B口均为输出状态工作与方式0

OUT 63H,AL

MOV AL,0B7H ;对计数器8253进行初始化工作,选2号计数器,且先读写低8位后高8位,工作与模式3

OUT 43H,AL

PP: MOV AH,01H

INT 16H

JZ PP

SUB AL,30H

CMP AL,09H ;AL中的参数将传递到SOUND子程序去

JAE OVER1

CALL SOUND

JMP PP

OVER1:JMP OVER

SOUND PROC NEAR

PUSH AX

PUSH BX

PUSH CX

PUSH DX

PUSH SI

MOV AH,0

MOV SI,AX ; 保护AL于SI中,以待后用,作为参数传递

MOV BX,OFFSET DAT

XLAT

MOV DI,AX

MOV DX,12H

MOV AX,34DCH

DIV DI

OUT 42H,AL

MOV AL,AH

OUT 42H,AL

IN AL,61H

OR AL,3

OUT 61H,AL ;此时喇叭将在计数器输出的频率工作发声,且CPU得以解放可执行下面的绘图工作

CALL PIANO

MOV AL,0

OUT 61H,AL

MOV AL,0H

MOV AH,0CH

INT 21H

POP SI

POP DX

POP CX

POP BX

POP AX

RET

SOUND ENDP

PIANO PROC NEAR

PUSH AX

PUSH BX

PUSH CX

PUSH DX

PUSH DI

MOV AX,SI

MOV BH,AL ;BH中表示按得是什么键,

MOV BL,0

PUSH BX

MOV BX,OFFSET HEIGHT

XLAT

POP BX ;BH中表示按得是什么键,

MOV AH,0

PUSH AX ;AX中的为键柱的高度

MOV DX,450

MOV CX,10

DEC BH

MOV AL,BH

MOV BL,80

MUL BL

ADD CX,AX ;CX中为键柱的起始横坐标

;;;;;;;;;;

POP AX ;AX中的为键柱的高度

INC BH ;BH中表示按得是什么键,

;;;;;;;;;;

MOV SI,CX

ADD SI,32 ;SI中为横坐标的边界

MOV DI,DX

SUB DI,AX ;DI中为纵坐标的边界

OK: PUSH SI

SUB SI,32

MOV CX,SI

POP SI

SB: MOV AL,0EH

MOV AH,0CH

MOV BH,0

INT 10H

INC CX

CMP CX,SI

JBE SB

DEC DX

CMP DX,DI

JAE OK

PUSH BX

PUSH CX

MOV BX,5000

DELAY:MOV CX,0FfFH

DL10MS:LOOP DL10MS

DEC BX

JNZ DELAY

POP CX

POP BX

MOV DX,DI

MOV DI,450

GO: PUSH SI

SUB SI,32

MOV CX,SI

POP SI

CA: MOV AL,0H

MOV AH,0CH

MOV BH,0

INT 10H

INC CX

CMP CX,SI

JBE CA

INC DX

CMP DX,DI

JBE GO

POP DI

POP DX

POP CX

POP BX

POP AX

RET

PIANO ENDP

OVER: MOV AH,4CH

INT 21H

CODE ENDS

END START

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值