您的位置:首页 > 其它

文章标题 汇编 判断闰年

2017-07-11 20:42 477 查看
;判断是否是闰年
;如果某一年能被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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: