?? cx.txt
字號:
外甥讓我幫他做個用匯編實現的鋼琴發聲程序,可惜偶匯編早已忘的干干凈凈,所以只能來求
各位了!!!: 我的qq是153534454,如果大家對題目不清楚的話加我qq,謝謝!
現在給出代碼,下面代碼是完整的,但是是實現8個鍵的程序,現在要求改為實現有9個鍵的程序,
發聲音階:1,2,3,4,5,6,7,1+,2+,(其中1+,2+表示升一個音階)
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
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -