;***********************************************
NAME BOOK_PAGE272
TITLE TEXT_5_16
;***********************************************
DATA SEGMENT
WEEK DB 'MON','TUE','WED','THU','FRI','SAT','SUN'
STR1 DB 'Please Input a number in 1 to 7:$'
STR2 DB 'Press any key to continue...$'
STR3 DB 'The number you enter is not in 1 to 7 !$'
DAY DB ?
DATA ENDS
;***********************************************
STACK1 SEGMENT PARA STACK
DB 10H DUP(0)
STACK1 ENDS
;***********************************************
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START:PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
;***********************************************
;以下是在屏幕上输出字符串STR1的提示信息:
;please Input a number in 1 to 7:
;***********************************************
MOV DX,OFFSET STR1
MOV AH,09H;输出字符串STR1
INT 21H
;***********************************************
;以下是暂停接收用户输入的一个数字(1<=数字<=7)
;***********************************************
MOV AH,01H;暂停接收一个数字
INT 21H
;***********************************************
;以下是处理输入数字的合法性
;***********************************************
SUB AL,30H;将ASCII码转换为数字
CMP AL,1 ;和1比较结果不保存只影响标志位
JB LQ ;若AL<1,则跳转到LQ
CMP AL,7 ;和7比较结果不保存只影响标志位
JA LQ ;若AL>7,则跳转到LQ
MOV DAY,AL;若输入数字合法则赋给变量DAY并则跳转到LKP
MOV CX,47
JMP LKP
;***********************************************
;以下是输入数字不合法之后在屏幕上显示字符串STR3的
;提示信息:The number you enter is not in 1 to 9 !
;***********************************************
LQ: MOV CX,47
LKP2: MOV DL,20H;输出空格达到换行的目的
MOV AH,02H
INT 21H
LOOP LKP2
MOV DX,OFFSET STR3;
MOV AH,09H;输出字符串STR3
INT 21H
MOV AH,01H;暂停接收一个数字
INT 21H
JMP EXIT
;***********************************************
;以下是输出空格达到换行的目的空格个数由CX中的值确定
;***********************************************
LKP: MOV DL,20H;输出空格达到换行的目的
MOV AH,02H
INT 21H
LOOP LKP
;***********************************************
;以下是将DAY的值转化为相对于WEEK中的偏移量并存入BL中
;***********************************************
FUN: XOR BX,BX ;将BX清零
MOV BL,DAY;BL<-DAY
DEC BL ;BL<-(BL-1)相当于BL=(DAY-1)
MOV AL,BL ;将BL中的值(DAY-1)保存到AL中相当于AL=DAY-1
SAL BL,1 ;将BL左移1位相当于BL=2*(DAY-1)
ADD BL,AL ;将BL中的值2*(DAY-1)与AL中的值(DAY-1)相加
;相当于BL=2*(DAY-1)
MOV CX,3 ;将CX中赋值为3为下面的LOOP循环作准备
;***********************************************
;以下是输出WEEK+BX中的字符如:若BL=3则输出WED
;***********************************************
LOP: MOV DL,WEEK[BX]
MOV AH,02H;输出DL中的内容
INT 21H
INC BX
LOOP LOP
MOV CX,77 ;
LKP1: MOV DL,20H;输出空格达到换行的目的
MOV AH,02H
INT 21H
LOOP LKP1
;***********************************************
;以下是在屏幕上显示字符串STR2的提示信息:
;Press any key to continue...
;***********************************************
MOV DX,OFFSET STR2 ;
MOV AH,09H;输出字符串STR3
INT 21H
MOV AH,01H;暂停接收一个数字
INT 21H
;***********************************************
;以下是退出程序返回dos
;***********************************************
EXIT: MOV AH,4CH;退出程序返回dos
INT 21H
CODE ENDS
END START