📄 rain.asm
字号:
STACK SEGMENT STACK
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
POW DB ' WASHMACHINE IS READY... POWER: PRESS P',0DH,0AH,'$'
GAI DB ' CLOSE: PRESS C',0DH,0AH,'$'
MO DB ' SELECT THE STYLE: BIAOZHUN-B QINGROU-Q JINPAO-J',0DH,0AH,'$'
SHUI DB ' SELECT THE WATER: PRESS 1 OR 2 OR 3',0DH,0AH,'$'
CUN DB 0,0,0,0,0,0
XIN DB 0DH,' *',0AH,0DH,'$'
PAO DB ' JIN PAO.....',0DH,0AH,'$'
XI DB ' XI......',0AH,0DH,'$'
ROU DB ' QING ROU......',0DH,0AH,'$'
OVER DB ' CLOTHES HAVE BEEN WASHED',0DH,0AH,'$'
TUO DB ' tuoshuizhong...',0DH,0AH,'$'
WEI DB ' JI GAI WEI GUAN',0DH,0AH,'$'
OLD_OFF DW 0
OLD_SEG DW 0
BB DW ?
QQ DB 'JIN SHUI',0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV AX,DATA ;主程序
MOV DS,AX
LEA SI,CUN
A1: MOV DX,OFFSET POW ;开电源
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
CMP AL,'P'
JNZ A1
MOV DX,OFFSET GAI ;关盖子(以后就是洗衣服,其实开关盖子对洗衣服没有影响)
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
MOV [SI],AL
MOHI: MOV DX,OFFSET MO ;选择模式
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
MOV [SI+1],AL
JIN: MOV DX,OFFSET SHUI ; 选择水量
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
CMP AL,'1'
JZ X3
CMP AL,'2'
JZ X2
CMP AL,'3'
JZ X1
JMP JIN
X1: MOV DX,OFFSET XIN ;用一个*表示小水量
MOV AH,09H
INT 21H
X2: MOV DX,OFFSET XIN ;用两个*表示中水量
MOV AH,09H
INT 21H
X3: MOV DX,OFFSET XIN ;用三个*表示大水量
MOV AH,09H
INT 21H
MOV AL,BYTE PTR[SI+1] ;判断所选的模式
CMP AL,'B'
JZ BIAO
CMP AL,'Q'
JZ QING
CMP AL,'J'
JZ JINP
JMP MOHI
JINP: MOV DX,OFFSET QQ
MOV AH,09H
INT 21H
MOV DX,OFFSET PAO ;浸泡 (浸泡模式除了多个浸泡外,其他的和标准模式是一样的)
MOV AH,09H
INT 21H
MOV BX,5
MOV CX,18
CALL TIME_DELAY
JMP HEHE
BIAO: MOV DX,OFFSET QQ ;标准模式下的洗衣服和脱水
MOV AH,09H
INT 21H
HEHE: MOV DX,OFFSET XI
MOV AH,09H
INT 21H
CALL MAIN
MOV CX,18
MOV BX,5
CALL TIME_DELAY
CMP BYTE PTR[SI],'C' ;脱水时保证关盖子(判断)
JNZ TT
UI: MOV DX,OFFSET TUO
MOV AH,09H
INT 21H
CALL MAIN
MOV CX,18
MOV BX,5
CALL TIME_DELAY
JMP EXIT
TT: MOV DX,OFFSET WEI
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
CMP AL,'C'
JZ UI
JNZ TT
QING: MOV DX,OFFSET QQ ;轻柔模式下的洗衣和脱水
MOV AH,09H
INT 21H
MOV DX,OFFSET ROU
MOV AH,09H
INT 21H
MOV DX,OFFSET XI
INT 21H
CALL MAIN
MOV CX,18
MOV BX,9
CALL TIME_DELAY
CMP BYTE PTR[SI],'C' ;脱水时保证关盖子(判断)
JNZ T3
YI: MOV DX,OFFSET TUO
MOV AH,09H
INT 21H
CALL MAIN
MOV CX,18
MOV BX,5
CALL TIME_DELAY
JMP EXIT
T3: MOV DX,OFFSET WEI
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
CMP AL,'C'
JZ YI
JNZ T3
EXIT: MOV DX,OFFSET OVER ;主程序结束
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
TIME_DELAY PROC ;延时子程序
PUSH DS
PUSH ES
PUSH BX
MOV AX,351CH
INT 21H
MOV OLD_OFF,BX
MOV BX,ES
MOV OLD_SEG,BX
POP BX
POP ES
MOV AX,251CH
MOV DX,SEG NEW_1CH
PUSH DS
MOV DS,DX
MOV DX,OFFSET NEW_1CH
INT 21H
POP DS
AGAI: CMP BX,00H
JNZ AGAI
MOV AX,251CH
MOV DX,OLD_SEG
PUSH DX
MOV DX,OLD_OFF
POP DS
INT 21H
POP DS
RET
TIME_DELAY ENDP
NEW_1CH PROC ;设置中断子程序
DEC CX
JNZ L2
MOV CX,18
MOV DX,BX
AND DX,0FH
OR DX,30H
MOV AH,02H
INT 21H
DEC BX
L2: IRET
NEW_1CH ENDP
MAIN PROC ;模拟电机转动子程序
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV BB,02H
L: MOV DL,'\'
MOV AH,02H
INT 21H
MOV CX,18
MOV BX,1
CALL AA
CALL TIME
MOV DL,'-'
MOV AH,02H
INT 21H
MOV CX,18
MOV BX,1
CALL AA
CALL TIME
MOV DL,'/'
MOV AH,02H
INT 21H
MOV CX,18
MOV BX,1
CALL AA
CALL TIME
DEC BB
CMP BB,0
JNZ L
POP DX
POP CX
POP BX
POP AX
MAIN ENDP
AA PROC NEAR ;光标控制子程序
PUSH CX
MOV BH,0
MOV AH,03H
INT 10H
MOV DL,0
MOV AH,02H
INT 10H
POP CX
RET
AA ENDP
TIME PROC ;另一延时子程序
PUSH DS
PUSH ES
PUSH BX
MOV AX,351CH
INT 21H
MOV OLD_OFF,BX
MOV BX,ES
MOV OLD_SEG,BX
POP BX
POP ES
MOV AX,251CH
MOV DX,SEG NEW1CH
PUSH DS
MOV DS,DX
MOV DX,OFFSET NEW1CH
INT 21H
POP DS
AGAIN: CMP BX,00H
JNZ AGAIN
MOV AX,251CH
MOV DX,OLD_SEG
PUSH DX
MOV DX,OLD_OFF
POP DS
INT 21H
POP DS
RET
TIME ENDP
NEW1CH PROC ;另一光标控制子程序
DEC CX
JNZ L1
MOV CX,18
MOV DX,BX
AND DX,0FH
OR DX,30H
DEC BX
L1: IRET
NEW1CH ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -