判断是否是闰年
<P>我运行的结果是YES!<BR> NO!<BR>请大家帮忙看下哪儿错了<BR>stack segment stack<BR>dw 256 dup(?)<BR>stack ends</P><P>data1 segment<BR>year dw 2000 <BR>yes db "yes!",13,10,'$'<BR>no db "no!",13,10,'$'<BR>data1 ends</P>
<P>code1 segment<BR>assume cs:code1,ds:data1<BR>start:<BR>mov ax,data1<BR>mov ds,ax</P>
<P>mov ah,0ah<BR>int 21h<BR>mov year,dx</P>
<P>mov dx,offset year<BR>mov ah,9<BR>int 21h</P>
<P>mov dx,0<BR>mov ax,year<BR>mov bx,400<BR>div bx<BR>cmp bx,0<BR>je _yes</P>
<P>mov dx,0<BR>mov ax,year<BR>mov bx,100<BR>div bx<BR>cmp bx,0<BR>je _no</P>
<P>mov dx,0<BR>mov ax,year<BR>mov bx,4<BR>div bx<BR>cmp bx,0<BR>je _yes</P>
<P>_no: mov dx,offset no<BR>jmp show<BR>_yes:mov dx,offset yes</P>
<P>show:mov ah,9<BR>int 21h<BR>mov ax,4c00h<BR>int 21h<BR>code1 ends<BR>end start</P>
<P>stack segment stack<BR> db 200 dup(0)<BR>stack ends</P>
<P>code segment<BR> assume ds:data,ss:stack,cs:code<BR> start:mov ax,data<BR> mov ds,ax<BR> <BR> lea dx,infon ;在屏幕上显示提示信息<BR> mov ah,9<BR> int 21h</P>
<P> lea dx,buf ;从键盘输入年份字符串<BR> mov ah,10<BR> int 21h<BR> <BR> mov cl, [buf+1]<BR> lea di,buf+2<BR> call datacate<BR> call ifyears<BR> jc a1<BR> <BR> lea dx,n<BR> mov ah,9<BR> int 21h<BR> jmp exit<BR> a1: lea dx,y<BR> mov ah,9<BR> int 21h<BR> exit: mov ah,4ch<BR> int 21h<BR> <BR> </P>
<P> datacate proc near;<BR> push cx; <BR> dec cx<BR> lea si,buf+2<BR> tt1: inc si<BR> loop tt1<BR> ;lea si,cx[di]<BR> pop cx<BR> <BR> <BR> mov dh,30h<BR> mov bl,10<BR> mov ax,1<BR> l1: push ax<BR> sub byte ptr [si],dh<BR> mul byte ptr [si]<BR> add w,ax<BR> pop ax<BR> mul bl<BR> dec si<BR> loop l1<BR> ret<BR> datacate endp</P>
<P><BR> ifyears proc near<BR> push bx<BR> push cx<BR> push dx<BR> mov ax,w<BR> mov cx,ax<BR> mov dx,0<BR> mov bx,4<BR> div bx<BR> cmp dx,0<BR> jnz lab1<BR> mov ax,cx<BR> mov bx,100<BR> div bx<BR> cmp dx,0<BR> jnz lab2<BR> mov ax,cx<BR> mov bx,400<BR> div bx<BR> cmp dx,0<BR> jz lab2<BR> lab1: clc<BR> jmp lab3<BR> lab2: stc<BR> lab3: pop dx<BR> pop cx<BR> pop bx<BR> ret<BR> ifyears endp<BR>code ends<BR> end start<BR> <BR></P> <P>谢谢,各位[em05]</P>
错了
错了,我用了 不行理由如下:一年实际的时间为365天5小时48分46秒,如果简单的每4年一个闰年,则每年时间误差会累积11分14秒。这个差数虽然不大,但累积下去,128年就差一天,400年就差三天多。
而且这种简单的四年一闰的方法叫儒略历,从“耶稣降生”的那年算起的。这种历法用到十五世纪时,已与实际时间差出了十天多。
所以,1582年3月1日,格里高利颁发了改历命令,内容是:
一、1582年10月4日后的一天是10月15日,而不是10月5日,但星期序号仍然连续计算,10月4日是星期四,第二天10月15日是星期五。这样,就把从公元325年以来积累的老账一笔勾销了。
二、为避免以后再发生春分飘离的现象,改闰年方法为: 凡公元年数能被4整除的是闰年,但当公元年数后边是带两个“0”的“世纪年”时,必须能被400整除的年才是闰年。
格里高利历的历年平均长度为365日5时49分12秒,比回归年长26秒。虽然照此计算,过3000年左右仍存在1天的误差,但这样的精确度已经相当了不起了。
由于格里高利历的内容比较简洁,便于记忆,而且精度较高,与天时符合较好,因此它逐步为各国政府所采用。我国是在辛亥革命后根据临时政府通电,从1912年1月1日正式使用格里高利历的。
页:
[1]
