STACK1 SEGMENT STACK
DW 64 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV AX,OFFSET IRQ7 ; 修改8259 中斷7 中斷矢量
MOV SI,003CH
MOV [SI],AX
MOV AX,CS
MOV SI,003EH
MOV [SI],AX
IN AL,21H ;修改IMR,使IRQ7 中斷允許
AND AL,7FH
OUT 21H,AL
MOV AL,90H ;8253 初始化
OUT 43H,AL
A1: MOV AL,05H ;賦8253 2 號計數器初值
OUT 42H,AL
HLT ;停機,等待中斷
STI
JMP A1
;IRQ7 中斷服務程序
IRQ7: MOV AX,014DH ;顯示“M”
INT 10H
MOV AX,0120H ;顯示空格
INT 10H
MOV AL,20H ;普通EOI 命令
OUT 20H,AL
IRET ;中斷返回
CODE ENDS
END START
系統的OPCLK(1.1625MHz)作為音樂節拍,由表格查出每個音符對應的時間常數送給計數器2(工作在方式3:方波頻率發生器),以確定音調,驅動揚聲器產生音樂。
STACK1 SEGMENT STACK
DW 64 DUP(?)
STACK1 ENDS
DATA SEGMENT
TABLE DB 33H,33H,3DH,33H,26H,26H, 26H, 26H, 2DH, 2DH, 26H, 2DH, 33H
DB 33H,33H,33H,33H, 33H, 4DH, 45H, 3DH, 3DH, 3DH, 45H, 4DH, 45H
DB 45H,45H,45H,45H,45H, 45H, 45H, 33H, 33H, 3DH, 33H, 26H, 26H
DB 26H,28H,2DH,2DH,26H, 26H, 33H, 33H, 33H, 33H, 45H, 3DH, 39H
DB 39H,39H,52H,4DH,4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 2DH, 2DH
DB 26H,26H,26H,26H,26H, 26H, 28H, 28H, 2DH, 28H, 26H, 26H, 26H
DB 26H,2DH,28H,26H,2DH, 2DH, 33H, 3DH, 4DH, 45H, 45H, 45H, 45H
DB 45H,45H,45H,45H,33H, 33H, 3DH, 33H, 26H, 26H, 26H, 28H, 2DH
DB 2DH,26H,2DH,33H,33H, 33H, 33H, 33H, 33H, 45H, 3DH, 39H, 39H
DB 39H,52H,4DH,4DH,4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 00H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET TABLE
MOV AL,[BX]
MOV AH,00H
A1: MOV DL,25H
MUL DL
PUSH AX
MOV AL,0B7H
OUT 43H,AL
POP AX
OUT 42H,AL
MOV AL,AH
OUT 42H,AL
INC BX
MOV AH,00H
MOV AL,[BX]
TEST AL,0FFH
JZ A3
MOV CX,77FFH
A2: PUSH AX
POP AX
LOOP A2
JMP A1
A3: MOV BX,OFFSET TABLE
MOV AL,[BX]
MOV AH,00H
JMP A1
CODE ENDS
END START