文章标题 汇编 判断闰年
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