文章标题 汇编 判断闰年

;判断是否是闰年
;如果某一年能被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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值