📄 lamp.txt
字号:
PC55 EQU 21AH
P55CTL EQU 21BH
DATA SEGMENT
MESS1 DB '左循环---按1', 0DH, 0AH
DB '右循环---按2' , 0DH, 0AH
DB '间隔闪烁--按3' , 0DH, 0AH
DB '退 出---按4 ' , 0DH, 0AH, '$'
MESS2 DB '按下键无效,继续选择' , 0DH, 0AH, '$'
MESS3 DB '按任意键退回主菜单' , 0DH, 0AH, '$'
DATA ENDS
STACK SEGMENT
STA DB 20 DUP( ?)
TOP EQU LENGTH STA
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK, ES:DATA
START: MOV AX, DATA ;初始化
MOV DS, AX
MOV AX, STACK
MOV SS, AX
MOV AX, TOP
MOV SP, AX
MOV DX, P55CTL
MOV AL, 80H
OUT DX, AL
BG: LEA DX, MESS1 ;显示信息1
MOV AH, 09H
INT 21H
MOV AH, 08H ;等待有键按下
INT 2 1H
PUSH AX
LEA DX, MESS3
MOV AX, 09H
INT 21H
POP AX
MOV AH, AL
CMP AL, ' 1 '
JZ ZXH ;散转进入各种循环
MOV AL, AH
CMP AL, '2'
JZ YXH
MOV AL, AH
CMP AL, '3'
JZ JGS
MOV AL, AH
CMP AL, '4'
JNZ WX
JMP QIT
WX: LEA DX, MESS2 ;无效按键信息提示
MOV AH, 09H
INT 21H
JMP BG
ZXH: MOV DX, 21AH ;左循环
MOV AL, 0FEH
BB: OUT DX, AL
MOV CX, OFFFFH ;修改OFFFFH可改变左循环时间
L1: CALL DELAY
LOOP L1
ROL AL, 1 ;若要改变循环状态, 可将ROL AL, 1
PUSH AX ; 改为MOV CL, XX
PUSH DX ; ROL AL, CL
MOV DL, OFFH ; (XX为1-7中任一值)
MOV AH, 06H
INT 21H
JNZ BG
POP DX
POP AX
JMP BB
YXH: MOV DX, 21AH ;右循环
MOV AL, OFEH
EE: OUT DX, AL
MOV CX, 0FFFFH ;修改0FFFFH可改变右循环时间
L2: CALL DELAY
LOOP L2
ROR AL, 1 ;可改变右循环状态,同前面的左循环
PUSH AX
PUSH DX
MOV DL, 0FFH
MOV AH, 06H
INT 21H
JNZ BG
POP DX
POP AX
JMP EE
JGS: MOV DX, 21AH ;间隔闪烁
MOV AL, 55H ;将55H改为00-0FFH中任一值可改变闪烁状态
HH: OUT DX, AL
MOV CX, 0FFFFH ;修改0FFFFH, 可改变间隔时间
L3: CALL DELAY
LOOP L3
NOT AL
PUSH AX
PUSH DX
MOV DL, 0FFH
MOV AH, 06H
INT 21H
JNZ BG1
POP DX
POP AX
JMP HH
BG1: JMP BG
QIT: MOV AX, 4C00H
INT 21H
DELAY PTOC NEAR
PUSHF
MOV BL, 0 0
AGAI N: INC BL ;将BL改为BX, 00改为0000H-0FFFFH中任一值,
CMP BL, 0FFH ;可改变子程序中的延长时间
JNZ AGAIN
POPF
RET
DELAY ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -