DATA SEGMENT
;此处输入数据段代码
ROAT1 DB '/'
ROAT2 DB '-'
ROAT3 DB '\'
ROAT4 DB '|'
ENDL DB 1
WORD1 DB '****************please input status****************$'
WORD2 DB 'A soaking, B rinse, C dehydration, P pause, E exit $'
WORD3 DB '***************************************************$'
WORD4 DB 'The Current Status Is A$'
WORD5 DB 'The Current Status Is B$'
WORD6 DB 'The Current Status Is C$'
WORD7 DB 'The Current Status Is P$'
DELAYTIME DW 01H;漂洗时延
DW 01H;脱水时延
SST DW ?
EET DW ?
LP DB 2
;A:浸泡(禁止转动),B:漂洗(顺时针转动,然后逆时针转动)
;C:脱水(高速单方向转动),P:暂停(停止转动),E:退出程序
CONTROL DB ?
DATA ENDS
STACK SEGMENT
;此处输入堆栈段代码
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
;此处输入代码段代码
LEA DX,WORD1
MOV AH,09H;显示字符串
INT 21H
;每次输出之后光标下移一格,并且列坐标复位为0
MOV AH,03H ;取当前光标位置
INT 10H ;返回参数。DH=行号,DL=列号
INC DH ;行号加1
MOV DL,0; 列号复位
MOV AH,02H;置光标位置
INT 10H ;入口参数。DH=行号,DL=列号
LEA DX,WORD2
MOV AH,09H
INT 21H
MOV AH,03H ;取当前光标位置
INT 10H ;返回参数。DH=行号,DL=列号
INC DH ;行号加1
MOV DL,0; 列号复位
MOV AH,02H;置光标位置
INT 10H ;入口参数。DH=行号,DL=列号
LEA DX,WORD3
MOV AH,09H;显示字符串
INT 21H
MOV AH,03H ;取当前光标位置
INT 10H ;返回参数。DH=行号,DL=列号
INC DH ;行号加1
MOV DL,0; 列号复位
MOV AH,02H;置光标位置
INT 10H ;入口参数。DH=行号,DL=列号
LOP:
MOV AH,01H;读取键盘状态
INT 16H
JZ LOP
CMP AL,'A';比较键盘输入与状态ASCII码
JZ CALA
CMP AL,'B'
JZ CALB
CMP AL,'C'
JZ CALC
CMP AL,'P'
JZ CALP
CMP AL,'E'
JZ CALE
MOV AH,10H;清除缓冲区,避免死循环
INT 16H
JMP LOP
CALA:
LEA DX,WORD4
MOV AH,09H;显示字符串
INT 21H
MOV AH,03H ;取当前光标位置
INT 10H ;返回参数。DH=行号,DL=列号
INC DH ;行号加1
MOV DL,0; 列号复位
MOV AH,02H;置光标位置
INT 10H ;入口参数。DH=行号,DL=列号
MOV AH,10H;清除缓冲区,避免死循环
INT 16H
CALL AAAA
JMP LOP
CALB:
LEA DX,WORD5
MOV AH,09H
INT 21H
MOV AH,03H ;取当前光标位置
INT 10H ;返回参数。DH=行号,DL=列号
INC DH ;行号加1
MOV DL,0; 列号复位
MOV AH,02H;置光标位置
INT 10H ;入口参数。DH=行号,DL=列号
MOV AH,10H;清除缓冲区,避免死循环
INT 16H
CALL BBBB
JMP LOP
CALC:
LEA DX,WORD6
MOV AH,09H
INT 21H
MOV AH,03H ;取当前光标位置
INT 10H ;返回参数。DH=行号,DL=列号
INC DH ;行号加1
MOV DL,0; 列号复位
MOV AH,02H;置光标位置
INT 10H ;入口参数。DH=行号,DL=列号
MOV AH,10H;清除缓冲区,避免死循环
INT 16H
CALL CCCC
JMP LOP
CALP:
LEA DX,WORD7
MOV AH,09H
INT 21H
MOV AH,03H ;取当前光标位置
INT 10H ;返回参数。DH=行号,DL=列号
INC DH ;行号加1
MOV DL,0; 列号复位
MOV AH,02H;置光标位置
INT 10H ;入口参数。DH=行号,DL=列号
MOV AH,10H;清除缓冲区,避免死循环
INT 16H
CALL PPPP
JMP LOP
CALE:
MOV AH,4CH;带返回码方式的终止进程
INT 21H
AAAA PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
;浸泡状态,无转动
MOV DL,'/'
MOV AH,02H;置光标位置
INT 21H
MOV AH,03H ;取当前光标位置
INT 10H ;返回参数。DH=行号,DL=列号
INC DH ;行号加1
MOV DL,0; 列号复位
MOV AH,02H;置光标位置
INT 10H ;入口参数。DH=行号,DL=列号
POP DX
POP CX
POP BX
POP AX
RET
AAAA ENDP
PPPP PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
;浸泡状态,无转动
MOV DL,'-'
MOV AH,02H;置光标位置
INT 21H
MOV AH,03H ;取当前光标位置
INT 10H ;返回参数。DH=行号,DL=列号
INC DH ;行号加1
MOV DL,0; 列号复位
MOV AH,02H;置光标位置
INT 10H ;入口参数。DH=行号,DL=列号
POP DX
POP CX
POP BX
POP AX
RET
PPPP ENDP
BBBB PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
LLLP:
;朝时钟正方向慢速转动2次,之后,反向转动2次,不断循环
;读入目标字符停止
APK1:
MOV LP,0002H
LPT1:
MOV AH,01H;漂洗时,读入中断,作为跳转
INT 16H
JNZ NZP1;有字符输入转
NPC1:
;正时钟方向旋转
MOV DL,ROAT1
MOV AH,02H;置光标位置
INT 21H
;每次光标必须恢复到最初位置,保证输出字符覆盖,产生转动!
MOV AH,03H ;取当前光标位置
INT 10H ;返回参数。DH=行号,DL=列号
MOV DL,0; 列号复位
MOV AH,02H;置光标位置
INT 10H ;入口参数。DH=行号,DL=列号
CALL DELAY1;延时
MOV DL,ROAT2
MOV AH,02H;置光标位置
INT 21H
MOV AH,03H ;取当前光标位置
INT 10H ;返回参数。DH=行号,DL=列号
MOV DL,0; 列号复位
MOV AH,02H;置光标位置
INT 10H ;入口参数。DH=行号,DL=列号
CALL DELAY1;延时
MOV DL,ROAT3
MOV AH,02H;置光标位置
INT 21H
MOV AH,03H ;取当前光标位置
INT 10H ;返回参数。DH=行号,DL=列号
MOV DL,0; 列号复位
MOV AH,02H;置光标位置
INT 10H ;入口参数。DH=行号,DL=列号
CALL DELAY1;延时
MOV DL,ROAT4
MOV AH,02H;置光标位置
INT 21H
MOV AH,03H ;取当前光标位置
INT 10H ;返回参数。DH=行号,DL=列号
MOV DL,0; 列号复位
MOV AH,02H;置光标位置
INT 10H ;入口参数。DH=行号,DL=列号
CALL DELAY1;延时
DEC LP
CMP LP,0
JZ APK2;正向两次转反向
LOOP LPT1
APK2:
MOV LP,0002H
LPT2:
MOV AH,1;漂洗时,读入中断,作为跳转
INT 16H
JNZ NZP2
NPC2:
;反时钟方向旋转
MOV DL,ROAT4
MOV AH,02H
INT 21H
;每次光标必须恢复到最初位置,保证输出字符覆盖,产生转动!
MOV AH,03H ;取当前光标位置
INT 10H ;返回参数。DH=行号,DL=列号
MOV DL,0; 列号复位
MOV AH,02H;置光标位置
INT 10H ;入口参数。DH=行号,DL=列号
CALL DELAY1;延时
MOV DL,ROAT3
MOV AH,02H;置光标位置
INT 21H
MOV AH,03H ;取当前光标位置
INT 10H ;返回参数。DH=行号,DL=列号
MOV DL,0; 列号复位
MOV AH,02H;置光标位置
INT 10H ;入口参数。DH=行号,DL=列号
CALL DELAY1;延时
MOV DL,ROAT2
MOV AH,02H;置光标位置
INT 21H
MOV AH,03H ;取当前光标位置
INT 10H ;返回参数。DH=行号,DL=列号
MOV DL,0; 列号复位
MOV AH,02H;置光标位置
INT 10H ;入口参数。DH=行号,DL=列号
CALL DELAY1;延时
MOV DL,ROAT1
MOV AH,02H;置光标位置
INT 21H
MOV AH,03H ;取当前光标位置
INT 10H ;返回参数。DH=行号,DL=列号
MOV DL,0; 列号复位
MOV AH,02H;置光标位置
INT 10H ;入口参数。DH=行号,DL=列号
CALL DELAY1;延时
DEC LP
CMP LP,0
JZ APK1;反方向两次转正向
LOOP LPT2
NZP1: