书上程序题的错误 求指导
时间:2010-11-26
来源:互联网
在《接口实验指导》一书中有个例子 :
一、实验要求:显示输入提示信息并响铃一次,然后接收键盘输入的月/日/年信息,并显示。若输入月份日期不对,则显示错误提示并要求重新输入。
二、实验目的:掌握响铃符方法,掌握年、月、日输入方法。
CRLF MACRO
MOV AH,02H
MOV DL,0DH
INT 21H
MOV AH,02H
MOV DL,0AH
INT 21H
ENDM
DATA SEGMENT
MESS DB '按顺序输入月,日,年,每输完一样按回车(MM/DD/YY)',0DH,0AH,'$'
MESS1 DB '月份错误,重新输入',0DH,0AH,'$'
MESS2 DB '日期错误,重新输入',0DH,0AH,'$'
ERROR DB '输入错误,重新输入',0DH,0AH,'$'
MARK DB ?
REG DW ?
DATA ENDS
STACK SEGMENT
STA DW 32 DUP(?)
TOP DW ?
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV SP,TOP ;初始化
HEAD: MOV MARK,0 ;清错误标志
MOV AH,09H
MOV DX,OFFSET MESS
INT 21H ;显示提示信息
MOV AH,02H
MOV DL,07H
INT 21H ;响铃1次
CALL GETNUM
CMP MARK,01H
JE HEAD
PUSH DX
CALL GETNUM
CMP MARK,01H
JNE K1
POP DX
JMP HEAD
K1: PUSH DX
CALL GETNUM ;接收键入的月值,日值及年值
CMP MARK,01H
JNE K2
POP DX
POP DX
JMP HEAD
K2: MOV AX,DX
CALL DISP ;显示年值
NOP
MOV AH,02H
MOV DL,'-' ;显示`-`
INT 21H
POP DX
POP AX
PUSH DX
MOV REG,AX
AND AX,00FFH
CMP AX,0012H
JBE W1
MOV AH,09H
LEA DX,MESS1
INT 21H
JMP START
W1: MOV AX,REG
CALL DISPP
MOV AH,02H
MOV DL,'-'
INT 21H
POP AX
MOV REG,AX
AND AX,00FFH
CMP AX,31H
JBE W2
MOV AH,09H
LEA DX,MESS2
INT 21H
JMP START
W2: MOV AX,REG
CALL DISPP ;显示日值
MOV AX,4C00H
INT 21H ;返回DOS
DISPP PROC NEAR
MOV BL,AL
MOV DL,BL
MOV CL,04
ROL DL,CL
AND DL,0FH
CALL DISPL
MOV DL,BL
AND DL,0FH
CALL DISPL
RET
DISPP ENDP
DISPL PROC NEAR
ADD DL,30H
CMP DL,3AH
JB DDD
ADD DL,27H
DDD: MOV AH,02H
INT 21H
RET
DISPL ENDP
DISP PROC NEAR
PUSH BX
PUSH CX
PUSH DX
PUSH AX
MOV AL,AH
CALL DISPP
POP AX
CALL DISPP
POP DX
POP CX
POP BX
RET ;显示子程序
DISP ENDP
GETNUM PROC NEAR
PUSH CX
XOR DX,DX
GGG: MOV AH,01H
INT 21H
CMP AL,0DH
JZ PPP
CMP AL,20H
JZ PPP
SUB AL,30H
CMP AL,0
JB KKK
CMP AL,0AH
JB GETS
JMP KKK
GETS: MOV CL,04
SHL DX,CL
XOR AH,AH
ADD DX,AX
JMP GGG
KKK: PUSH AX
PUSH DX
MOV AH,09H
MOV DX,OFFSET ERROR
INT 21H
MOV MARK,01H
POP DX
POP AX
PPP: PUSH DX
MOV AH,02H
MOV DX,07H
INT 21H
CRLF
POP DX
POP CX
RET
GETNUM ENDP
CODE ENDS
END START
调试运行的时候发现有许多错误,该程序无法识别日期的大小月问题,就是说 如果二月输入三十一号也是可以的,总结一下主要原因就是无法判断是否为闰年,小弟才疏学浅,弄了好久没有成功,求高人指点最好直接给出代码,谢谢!
一、实验要求:显示输入提示信息并响铃一次,然后接收键盘输入的月/日/年信息,并显示。若输入月份日期不对,则显示错误提示并要求重新输入。
二、实验目的:掌握响铃符方法,掌握年、月、日输入方法。
CRLF MACRO
MOV AH,02H
MOV DL,0DH
INT 21H
MOV AH,02H
MOV DL,0AH
INT 21H
ENDM
DATA SEGMENT
MESS DB '按顺序输入月,日,年,每输完一样按回车(MM/DD/YY)',0DH,0AH,'$'
MESS1 DB '月份错误,重新输入',0DH,0AH,'$'
MESS2 DB '日期错误,重新输入',0DH,0AH,'$'
ERROR DB '输入错误,重新输入',0DH,0AH,'$'
MARK DB ?
REG DW ?
DATA ENDS
STACK SEGMENT
STA DW 32 DUP(?)
TOP DW ?
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV SP,TOP ;初始化
HEAD: MOV MARK,0 ;清错误标志
MOV AH,09H
MOV DX,OFFSET MESS
INT 21H ;显示提示信息
MOV AH,02H
MOV DL,07H
INT 21H ;响铃1次
CALL GETNUM
CMP MARK,01H
JE HEAD
PUSH DX
CALL GETNUM
CMP MARK,01H
JNE K1
POP DX
JMP HEAD
K1: PUSH DX
CALL GETNUM ;接收键入的月值,日值及年值
CMP MARK,01H
JNE K2
POP DX
POP DX
JMP HEAD
K2: MOV AX,DX
CALL DISP ;显示年值
NOP
MOV AH,02H
MOV DL,'-' ;显示`-`
INT 21H
POP DX
POP AX
PUSH DX
MOV REG,AX
AND AX,00FFH
CMP AX,0012H
JBE W1
MOV AH,09H
LEA DX,MESS1
INT 21H
JMP START
W1: MOV AX,REG
CALL DISPP
MOV AH,02H
MOV DL,'-'
INT 21H
POP AX
MOV REG,AX
AND AX,00FFH
CMP AX,31H
JBE W2
MOV AH,09H
LEA DX,MESS2
INT 21H
JMP START
W2: MOV AX,REG
CALL DISPP ;显示日值
MOV AX,4C00H
INT 21H ;返回DOS
DISPP PROC NEAR
MOV BL,AL
MOV DL,BL
MOV CL,04
ROL DL,CL
AND DL,0FH
CALL DISPL
MOV DL,BL
AND DL,0FH
CALL DISPL
RET
DISPP ENDP
DISPL PROC NEAR
ADD DL,30H
CMP DL,3AH
JB DDD
ADD DL,27H
DDD: MOV AH,02H
INT 21H
RET
DISPL ENDP
DISP PROC NEAR
PUSH BX
PUSH CX
PUSH DX
PUSH AX
MOV AL,AH
CALL DISPP
POP AX
CALL DISPP
POP DX
POP CX
POP BX
RET ;显示子程序
DISP ENDP
GETNUM PROC NEAR
PUSH CX
XOR DX,DX
GGG: MOV AH,01H
INT 21H
CMP AL,0DH
JZ PPP
CMP AL,20H
JZ PPP
SUB AL,30H
CMP AL,0
JB KKK
CMP AL,0AH
JB GETS
JMP KKK
GETS: MOV CL,04
SHL DX,CL
XOR AH,AH
ADD DX,AX
JMP GGG
KKK: PUSH AX
PUSH DX
MOV AH,09H
MOV DX,OFFSET ERROR
INT 21H
MOV MARK,01H
POP DX
POP AX
PPP: PUSH DX
MOV AH,02H
MOV DX,07H
INT 21H
CRLF
POP DX
POP CX
RET
GETNUM ENDP
CODE ENDS
END START
调试运行的时候发现有许多错误,该程序无法识别日期的大小月问题,就是说 如果二月输入三十一号也是可以的,总结一下主要原因就是无法判断是否为闰年,小弟才疏学浅,弄了好久没有成功,求高人指点最好直接给出代码,谢谢!
作者: fcgb3sover 发布时间: 2010-11-26
先做一个不判断闰年的试一下
作者: asmlearn 发布时间: 2010-11-27
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28