;判断是否是闰年
;如果某一年能被
4整除但不能被
100整除,或者该年能被
400整除,则该年为闰年。
.MODEL SMALL
.Data
mass1 DB 0dh,0ah,
'input 0 to quit',0dh,0ah,
'$';输入结束提示
mass2 DB
'thank you!!!',0dh,0ah,
'$';程序结束提示
mass DB
'input the year(1~65535):',
'$';输入年份提示
year DW ?;保存输入的年份
string1 DB
' is a bissextile.(YES)', 0dh,0ah,
'$';是闰年的信息
string2 DB
' is not a bisssetilt.(NO)' , 0dh,0ah,
'$';不是闰年的信息
.code
MAIN PROC FAR
MOV AX ,
@Data
MOV DS ,AX
;--------------------------------
again:
mov dx , offset mass1;提示输入停止
mov ah ,
9
int 21h
mov dx , offset mass;输入提示
mov ah ,
9
int 21h
;-----------
call input;调用输入子程序
mov year , bx
cmp bx ,
0
jz exitMain
mov dx ,
0
mov bx ,
400
mov ax , year
div bx ;除以bx,余数在dx中
;call TextP
cmp dx ,
0;判断能否被
400整除,可以的话就是闰年
jz Y
mov dx ,
0
mov bx ,
100
mov ax , year
div bx;除以
100
cmp dx ,
0;判断能否被
100整除,不能就是闰年
jz N;如果能说明不是闰年
mov dx ,
0
mov bx ,
4
mov ax , year;将年份放进ax中
div bx
cmp dx ,
0;判断能否被
4整除,能就是闰年
jz Y
N:
mov ax , year;输出年份
call output
mov dx , offset string2;不是闰年的提示
jmp ans
Y:
mov ax , year;输出年份
call output
mov dx ,offset string1;是闰年的提示
ans:
mov ah ,
9
int 21h
jmp again
;-------------------------------
exitMain:
mov dx , offset mass2
mov ah ,
9
int 21h
mov ax,
4C00H
int 21h
Main endp
;========================================================
;输入子程序----------------------------------------------
;========================================================
input proc near
;-----键盘输入十进制数放在bx中
mov bx ,
0
newchar:
mov ah,
1 ;键盘输入
int 21h
sub al, 30h
jl exit ; <
0退出
cmp al,
9
jg
exit ; >
9退出
cbw
xchg ax, bx
mov cx,
10;乘以
10
mul cx
xchg ax, bx
add bx, ax
jmp newchar
exit:
ret
input endp
;========================================================
;输出子程序---(输出ax的十进制数)-------------------------------
;========================================================
output proc near
mov bx ,
10;每次除以
10,将
10放进bx中
mov cx ,
0;计数,相当于有几位数
next:
mov dx ,
0
div bx
add dl ,
'0'
push dx;余数在dx中,将其放进栈中
inc cx;计数加一,相当于有多少位数
cmp ax ,
0;与
0比较如果还不为
0就继续执行操作
jnz
next
mov ah ,
2
lo1:
pop dx;
//输出
int 21h
loop lo1
mov dl ,
' '
mov ah ,
2
int 21h
ret
output endp
end