家用电风扇程序,求指导
DATA SEGMENTCLOCK0 EQU 290H
CLKCK1 EQU 291H
CLOCK2 EQU 292H
CLOCKC EQU 293H
PA55 EQU 280H
PB55 EQU 281H
PC55 EQU 282H
P55C EQU 283H
INTNUM DB 0DH
MAMES DB 0DH,0AH,0DH,0AH,0DH,0AH,0DH
DB "****************WELCOME !!!******",0DH,0AH,'$'
MAMU DB "1.SET UP SPEED",0DH,0AH
DB "2.WORKING WITH FLXED STEP",0DH,0AH
DB "3.CONTINUAL WORKING",0DH,0AH
DB "4.EXIT",0DH,0AH
MENU1 DB 0DH,0AH,0DH,0AH
DB "F6.WORKING SPEED IS 3.75R/S",0DH,0AH
DB "F7.WORKING SPEED IS 6.25R/S",0DH,0AH
DB "F8.WORKING SPEED IS 18.75R/S",0DH,0AH
DB "ESC IS EXIT",0DH,0AH
DB "***********PLEASE INPUT:$"
MENU2 DB 0DH,0AH,0DH,0AH
DB "1.CLOCKWISE",0DH,0AH
DB "2.ANTI_CLOCKWISE",0DH,0AH
DB "**************PLEASE INPUT:$"
MENU3 DB 0DH,0AH,0DH,0AH
DB "PLEASE INPUT THE NUMBER OF STEP:$"
MENU4 DB 0DH,0AH,0DH,0AH
DB "CONTINUAL WORKING !",0DH,0AH
DB "ESC IS EXIT",0DH,0AH,'$'
EROMS DB 0DH,0AH
DB "THE CHOICE IS WORING!PLEASE INPUT AGAIN",'$'
F0 DB 0DH,0AH
DB "WORKING SPEED IS:$"
F6 DB "3.75R/S",0DH,0AH,'$'
F7 DB "6.25R/S",0DH,0AH,'$'
F8 DB "18.75R/S",0DH,0AH,'$'
SPEDM DW F6,F7,F8
CLCMS DB 0DH,0AH
DB "DIRECTION IS CLOCKWISE",0DH,0AH,'$'
ANTMS DB 0DH,0AH
DB "DIRECTION IS ANTI_CLOCKWISE",0DH,0AH,'$'
QUITMS DB "ENTER IS EXIT",0DH,0AH,'$'
INTSEG DW ?
INTOFF DW ?
MCHDC DW STSED,STDIR,ROTFX,CTROT
SPEDN DW 625,375,125
SPEED DW 46875
FLAG1 DB 0
FLAG0 DB ?
BUFFER DB 4
DB ?
DB 4 DUP (?)
CW10 DW 10
INTIMR DB ?
TURN DB 11001100B
DATA ENDS
STACK SEGMENT PARA STACK'STACK'
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN:MOV AX,DATA
MOV DS,AX
MOV AH,35H
MOV AL,0DH
INT 21H
MOV INTSEG,ES
MOV INTOFF,BX
PUSH DS
MOV AX,CS
MOV DS,AX
MOV DX,OFFSET INTPROC
MOV AH,25H
MOV AL,0DH
INT 21H
POP DS
IN AL,21H
MOV INTIMR,AL
AND AL,11011111B
OUT 21H,AL
MOV DX,CLOCKC
MOV AL,00110110B
OUT DX,AL
MOV DX,P55C
MOV AL,10000000B
OUT DX,AL
STI
OMANU: MOV DX,OFFSET MAMES ;欢迎界面
MOV AH,09H
INT 21H
MOV DX,OFFSET MAMU ;STEP选择
INT 21H
MOV AH,01H ;DOS功能调用,键盘输入并回显
INT 21H
CMP AL,'1' ;AL<1
JB ERROR
CMP AL,'5' ;AL>5
JA ERROR
JE EXIT
AND AL,0FH
DEC AL
MOV AH,00H
SHL AX,1
MOV BX,OFFSET MCHDC
ADD BX,AX ; CALL [BX]
JMP OMANU
ERROR: MOV DX,OFFSET EROMS
MOV AH,09H
INT 21H
JMP OMANU
EXIT: MOV AL,INTIMR
OUT 21H,AL
PUSH DS
MOV DX,INTOFF
MOV AX,INTSEG
MOV DS,AX
MOV AH,25H
MOV AL,00H
INT 21H
POP DS
MOV AH,4CH
INT 21H
STSED PROC NEAR
PUSH AX
PUSH DX
PUSH BX
OMENU1: MOV DX,OFFSET MENU1 ;风速选择
MOV AH,09H ;显示字符串
INT 21H
MOV AH,00H
INT 16H ;错误类型码
CMP AL,1BH
JZ EXIT ;相等
CMP AH,59
JB ERROR1 ;AH<59
CMP AH,66
JA ERROR1 ;AH>66
SUB AH,59
MOV BH,0
MOV BL,AH
SHL BL,1
MOV AX,SPEDN[BX]
MOV SPEED,AX
MOV DX,OFFSET F0
MOV AH,09H
INT 21H
MOV DX,SPEDM[BX]
INT 21H
JMP EXIT
ERROR1: MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH
INT 21H
MOV DX,OFFSET EROMS
MOV AH,09H
INT 21H
JMP OMENU1
EXIT1: POP BX
POP DX
POP AX
RET
STSED ENDP
STDIR PROC NEAR ;子程序STDIR
PUSH DX
PUSH AX
OMENU2: MOV DX,OFFSET MENU2
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
CMP AL,1BH ;1BH-27-ESC
JE EXIT2
CMP AL,'1'
JE CLFLG ;AL=1,CLOCKWISE
CMP AL,'2'
JE ANTFLG
MOV DX,OFFSET EROMS
MOV AH,09H
INT 21H
JMP OMENU2
CLFLG: MOV FLAG1,0
MOV DX,OFFSET CLCMS
MOV AH,09H
INT 21H
JMP EXIT2
ANTFLG: MOV FLAG1,1
MOV DX,OFFSET ANTMS
MOV AH,02H
INT 21H
JMP EXIT2
EXIT2: POP AX
POP DX
RET
STDIR ENDP
ROTFX PROC NEAR
PUSH DX
PUSH CX
PUSH BX
PUSH AX
PUSH SI
OMENU3: MOV DX,OFFSET MENU3
MOV AH,09H
INT 21H
MOV DX,OFFSET BUFFER
MOV AH,0AH
INT 21H
MOV CL,BUFFER[1]
CMP CL,3
JA ERROR3
LEA SI,BUFFER
ADD SI,2
MOV CH,00H
MOV AX,00H
NEXT: MUL CW10
MOV BL,[SI]
AND BX,000FH
ADD AX,BX
INC SI
LOOP NEXT
MOV CX,AX
MOV FLAG0,0
MOV DX,CLOCK0
MOV AX,SPEED
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,PA55 ; MOV AL,OFFH
OUT DX,AL
STI
AGAIN1: CMP CX,00H
JE EXIT3
MOV AH,06H
MOV DL,0FFH
INT 21H
CMP AL,1BH
JE EXIT3
CMP FLAG0,0
JE AGAIN1
DEC CX
MOV FLAG0,0
JMP AGAIN1
ERROR3: MOV DX,OFFSET EROMS
MOV AH,09H
INT 21H
JMP OMENU3
EXIT3: CLI
MOV DX,PA55
MOV AL,00H
OUT DX,AL
POP SI
POP AX
POP BX
POP CX
POP DX
RET
ROTFX ENDP
CTROT PROC NEAR ;子程序CTROT
PUSH DX
PUSH AX
MOV DX,OFFSET MENU4
MOV AH,09H
INT 21H
MOV DX,CLOCK0
MOV AX,SPEED
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,PA55 ; MOV AL,OFFH
OUT DX,AL
STI
AGAIN2: MOV AH,06H ; MOV DL,OFFH
INT 21H
CMP AL,1BH
JNE AGAIN2
CLI
MOV DX,PA55
MOV AL,00H
OUT DX,AL
POP AX
POP DX
RET
CTROT ENDP
INTPROC PROC ;子程序INTPROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DS
MOV AX,DATA
MOV DS,AX
STI
MOV DX,PC55
MOV AL,TURN
OUT DX,AL
CMP FLAG1,0
JE TNCLC
ROL AL,1
JMP EXITI
TNCLC: ROR AL,1
EXITI: MOV TURN,AL
MOV FLAG0,1
CLI
MOV AL,20H ;OUT 2OH,AL
POP DS
POP DX
POP CX
POP BX
POP AX
IRET
INTPROC ENDP
CODE ENDS
END MAIN