📄 1.asm
字号:
MOV AL,14
INT 10H
INC DX
CMP DX,0AFH ;绘图到行末尾结束
JNZ L1_WEL
MOV DX,1EH
INC CX
CMP CX,0E0H ;绘图到列末尾结束
JNZ L1_WEL
MOV DX,1EH ;起始点设置
MOV CX,60H
L2_WEL: MOV AH,0CH ;设置绘图颜色
MOV AL,6
INT 10H
INC DX
CMP DX,0AFH ;到行末尾结束
JNZ L2_WEL
L3_WEL: MOV AH,0CH ;设置绘图颜色
MOV AL,6
INT 10H
INC CX
CMP CX,0E0H ;到列末尾结束
JNZ L3_WEL
MOV DX,1EH ;起始点设置
MOV CX,60H
L4_WEL: MOV AH,0CH
MOV AL,6 ;设置绘图颜色
INT 10H
INC CX
CMP CX,0E0H ;到列末尾结束
JNZ L4_WEL
L5_WEL: MOV AH,0CH
MOV AL,6 ;设置绘图颜色
INT 10H
INC DX
CMP DX,0AFH ;到行末尾结束
JNZ L5_WEL
MOV DX,58H ;打点
MOV CX,0C0H
MOV AH,0CH
MOV AL,6
INT 10H
MOV DX,58H ;打点
MOV CX,0D0H
MOV AH,0CH
MOV AL,6
INT 10H
MOV DX,58H ;打点
MOV CX,0C8H
MOV AH,0CH
MOV AL,6
INT 10H
MOV DX,1EH ;起始点设置
MOV CX,46H
L6_WEL: MOV AH,0CH ;设置绘图颜色(左对联)
MOV AL,4
INT 10H
INC DX
CMP DX,0AFH ;到行末尾结束
JNZ L6_WEL
MOV DX,1EH
INC CX
CMP CX,5BH ;到行末尾结束
JNZ L6_WEL
MOV DX,1EH
MOV CX,0E5H
L7_WEL: MOV AH,0CH ;设置绘图颜色(右对联)
MOV AL,4
INT 10H
INC DX
CMP DX,0AFH ;到行末尾结束
JNZ L7_WEL
MOV DX,1EH
INC CX
CMP CX,0FAH ;到行末尾结束
JNZ L7_WEL
LEA DI,M
LEA SI,N
L8_WEL: MOV DX,[DI] ;汉字打点
MOV CX,[SI]
MOV AH,0CH
MOV AL,0
INT 10H
INC DI
INC SI
CMP [DI],0H
JNZ L8_WEL
MOV DX,0AEH
MOV CX,61H
L9_WEL: MOV AH,0CH ;设置绘图颜色
MOV AL,15
INT 10H
INC CX
CMP CX,0E0H ;绘图到列末尾结束
JNZ L9_WEL
PUSH CX
MOV CX,0FFH
DELAY_WEL1:PUSH CX ;开门延时
MOV CX,0FFFFH
DELAY_WEL2:NOP
LOOP DELAY_WEL2
POP CX
LOOP DELAY_WEL1
POP CX
MOV CX,61H
DEC DX
CMP DX,1EH ;绘图到行末尾结束
JNZ L9_WEL
LEA DX,WELCOME ;显示文字提示信息
MOV AH,9
INT 21H
RET
WELCOME_PIC ENDP
;-------------------------------------;WELCOME_SOUND子程序
WELCOME_SOUND PROC NEAR
LEA SI,FREQ ;建立频率表指针
LEA BP,TIME ;建立节拍表指针
MUSIC1_WEL: MOV DI,[SI] ;取频率
CMP DI,0 ;频率是否为0
JE DONE_WELS ;是,转结束
MOV BX,DS:[BP] ;不是,取对应的持续时间
MOV AL,0B6H ;初始化定时器通道2的工作方式
OUT 43H,AL
MOV DX,12H ;求计数器初值
MOV AX,3280H
DIV DI
OUT 42H,AL ;送计数器初值
MOV AL,AH
OUT 42H,AL
IN AL,61H ;读PB口状态
MOV AH,AL
OR AL,03H ;使PB0和PB1置1
OUT 61H,AL
DELAY1_WEL: MOV CX,0FFFFH ;延时
DELAY2_WEL: LOOP DELAY2_WEL
DEC BX
JNZ DELAY1_WEL
MOV AL,AH ;恢复PB口的状态
OUT 61H,AL
ADD SI,2 ;指向下一个音符的频率
ADD BP,2 ;指向下一个音符的节拍
JMP MUSIC1_WEL
DONE_WELS: RET
WELCOME_SOUND ENDP
;--------------------------------------; WARNING_PIC子程序
WARNING_PIC PROC NEAR
MOV AH,00H ;设置屏幕显示方式
MOV AL,0DH
INT 10H
MOV AH,0BH ;设置调色板
MOV BH,0
MOV BL,1
INT 10H
MOV DX,1EH ;起始点设置
MOV CX,60H
L1_WAR: MOV AH,0CH ;设置绘图颜色
MOV AL,14
INT 10H
INC DX
CMP DX,0AFH ;绘图到行末尾结束
JNZ L1_WAR
MOV DX,1EH
INC CX
CMP CX,0E0H ;绘图到列末尾结束
JNZ L1_WAR
MOV DX,1EH ;起始点设置
MOV CX,60H
L2_WAR: MOV AH,0CH ;设置绘图颜色
MOV AL,6
INT 10H
INC DX
CMP DX,0AFH ;到行末尾结束
JNZ L2_WAR
L3_WAR: MOV AH,0CH ;设置绘图颜色
MOV AL,6
INT 10H
INC CX
CMP CX,0E0H ;到列末尾结束
JNZ L3_WAR
MOV DX,1EH ;起始点设置
MOV CX,60H
L4_WAR: MOV AH,0CH
MOV AL,6 ;设置绘图颜色
INT 10H
INC CX
CMP CX,0E0H ;到列末尾结束
JNZ L4_WAR
L5_WAR: MOV AH,0CH
MOV AL,6 ;设置绘图颜色
INT 10H
INC DX
CMP DX,0AFH ;到行末尾结束
JNZ L5_WAR
MOV DX,58H ;打点
MOV CX,0C0H
MOV AH,0CH
MOV AL,6
INT 10H
MOV DX,58H ;打点
MOV CX,0D0H
MOV AH,0CH
MOV AL,6
INT 10H
MOV DX,58H ;打点
MOV CX,0C8H
MOV AH,0CH
MOV AL,6
INT 10H
MOV DX,1EH ;起始点设置
MOV CX,46H
L6_WAR: MOV AH,0CH ;设置绘图颜色(左对联)
MOV AL,4
INT 10H
INC DX
CMP DX,0AFH ;到行末尾结束
JNZ L6_WAR
MOV DX,1EH
INC CX
CMP CX,5BH ;到行末尾结束
JNZ L6_WAR
MOV DX,1EH
MOV CX,0E5H
L7_WAR: MOV AH,0CH ;设置绘图颜色(右对联)
MOV AL,4
INT 10H
INC DX
CMP DX,0AFH ;到行末尾结束
JNZ L7_WAR
MOV DX,1EH
INC CX
CMP CX,0FAH ;到行末尾结束
JNZ L7_WAR
LEA DI,M
LEA SI,N
L8_WAR: MOV DX,[DI] ;汉字打点
MOV CX,[SI]
MOV AH,0CH
MOV AL,0
INT 10H
INC DI
INC SI
CMP [DI],0H
JNZ L8_WAR
LEA DI,M1
LEA SI,N1
L9_WAR: MOV DX,[DI] ;警报符号打点
MOV CX,[SI]
MOV AH,0CH
MOV AL,0
INT 10H
INC DI
INC SI
CMP [DI],0H
JNZ L9_WAR
LEA DX,WARING
MOV AH,9
INT 21H
RET
WARNING_PIC ENDP
;--------------------------------------; WARNING_SOUND子程序
WARNING_SOUND PROC NEAR
LEA SI,F ;建立频率表指针
LEA BP,T ;建立节拍表指针
MUSIC1_WAR: MOV DI,[SI] ;取频率
CMP DI,0 ;频率是否为0
JE DONE_WARS ;是,转结束
MOV BX,DS:[BP] ;不是,取对应的持续时间
MOV AL,0B6H ;初始化定时器通道2的工作方式
OUT 43H,AL
MOV DX,12H ;求计数器初值
MOV AX,3280H
DIV DI
OUT 42H,AL ;送计数器初值
MOV AL,AH
OUT 42H,AL
IN AL,61H ;读PB口状态
MOV AH,AL
OR AL,03H ;使PB0和PB1置1
OUT 61H,AL
DELAY1_WAR: MOV CX,0FFFFH ;延时
DELAY2_WAR: LOOP DELAY2_WAR
DEC BX
JNZ DELAY1_WAR
MOV AL,AH ;恢复PB口的状态
OUT 61H,AL
ADD SI,2 ;指向下一个音符的频率
ADD BP,2 ;指向下一个音符的节拍
JMP MUSIC1_WAR
DONE_WARS:RET
WARNING_SOUND ENDP
;--------------------------------;SHENGYIN
SHENGYIN PROC NEAR
LEA SI,F_D ;建立频率表指针
LEA BP,T_D ;建立节拍表指针
MUSIC1_D: MOV DI,[SI] ;取频率
CMP DI,0 ;频率是否为0
JE DONE_D ;是,转结束
MOV BX,DS:[BP] ;不是,取对应的持续时间
MOV AL,0B6H ;初始化定时器通道2的工作方式
OUT 43H,AL
MOV DX,12H ;求计数器初值
MOV AX,3280H
DIV DI
OUT 42H,AL ;送计数器初值
MOV AL,AH
OUT 42H,AL
IN AL,61H ;读PB口状态
MOV AH,AL
OR AL,03H ;使PB0和PB1置1
OUT 61H,AL
DELAY1_D: MOV CX,0FFFFH ;延时
DELAY2_D: LOOP DELAY2_D
DEC BX
JNZ DELAY1_D
MOV AL,AH ;恢复PB口的状态
OUT 61H,AL
ADD SI,2 ;指向下一个音符的频率
ADD BP,2 ;指向下一个音符的节拍
JMP MUSIC1_D
DONE_D:RET
SHENGYIN ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -