请从键盘任意输入一个0-59内的数,每隔一秒自加一,当加到59后跳到0从新开始自加!!小弟新手.....刚刚开始学习汇编语言,请各位前辈帮帮忙。
请编程语句简单些,要不小弟实在看不懂,多谢了
我写了,核腊橡你参考一下吧
;请从键盘任意输入一个0-59内的数,每隔一秒自加一,当加到59后跳到0从新开始自加
DATAS SEGMENT
;此处输入数据段代码
MESS0 DB 'Error char!','$' ;异常信息
MESS1 DB 'Input overflow!','$'
MESS2 DB 'Must be 0~59!','$'
SEPRA DB 0DH,0AH,'$' ;分隔符
TIME DB 0
MADDR DW OFFSET MESS0,OFFSET MESS1,OFFSET MESS2 ;异常信息地址
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
DW 64 DUP (?)
TOP LABEL WORD
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC FAR
;异常处理
L0:
MOV AH,9
LEA DX,SEPRA
INT 21H
ADD SI,SI
MOV DX,MADDR[SI]
INT 21H
LEA DX,SEPRA
INT 21H
INT 21H
XOR BX,BX
JMP SHORT L1 ;重新输入
START:
MOV AX,DATAS
MOV DS,AX
MOV AX,STACKS
MOV SS,AX
LEA SP,TOP
;此处输入代码段代码
MOV BH,10 ;进制数
MOV DI,60 ;模数
XOR BL,BL
L1:
MOV AH,1
INT 21H
CMP AL,' '
JE EX
IT ;输入空格符,则程序结束
CMP AL,0DH
JE L2 ;输入回车符,则数字输入结束
MOV SI,0
CMP AL,'0'
JB L0
CMP AL,'9'
JA L0
MOV SI,1
AND AL,0FH
XCHG AL,BL
MUL BH
JC L0 ;乘法溢出,数字大于255
ADD BL,AL
JC L0 ;加法溢出,数字大于255
JMP SHORT L1
L2:
MOV SI,2
CMP BL,59
JA L0 ;输入数字大于59
L3:
;取系统改旁时间
MOV AH,2CH
L4: INT 21H
CMP TIME,DH
JE L4
MOV TIME,DH ;如果系统时间更改了,就进行输出
;输出数局兄字
MOV AL,BL
CBW ;AL扩展为AX
CALL SHOWCHAR
;输出分隔符
LEA DX,SEPRA
MOV AH,9
INT 21H
;数字自加1
INC BL
;数字对60取模
MOV AL,BL
CBW
CWD
DIV DI ;(DI)=60
MOV BL,DL
;延时1秒
;CALL DELAY
;判断是否有键盘输入,如果有,则程序结束
MOV AH,6
MOV DL,0FFH
INT 21H
JZ L3
EXIT:
MOV AH,4CH
INT 21H
MAIN ENDP
;传入参数:AL,一个无符号整数;BH,作为全局变量始终为10
;返回参数:无
;功能:显示AX对应的十进制数
SHOWCHAR PROC NEAR
PUSH DX
PUSH CX
XOR CX,CX ;记录十进制位数
L6:
XOR AH,AH
DIV BH
MOV DL,AH
XOR DH,DH
ADD DX,30H
PUSH DX
INC CX
CMP AL,0
JNE L6
MOV AH,2
L7:
POP DX
INT 21H
LOOP L7
POP CX
POP DX
RET
SHOWCHAR ENDP
CODES ENDS
END START