mengfanzhen1 发表于 2007-7-2 13:04

判断是否是闰年

<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>

魔城侠客 发表于 2007-7-2 18:26

你保证你这个程序能运行否?<BR>首先在yes和no那里应该是单引号<BR>代码段也没有装载<BR>在运行oah时,要另外开辟空间<BR>你是想程序自己输出一个年份判断,还是程序中就已经定义了一个年份??

mengfanzhen1 发表于 2007-7-2 20:16

是输入一个年份然后再判断是不是闰年

mengfanzhen1 发表于 2007-7-2 20:17

也能够运行<BR>

justholdon 发表于 2007-7-2 21:28

<P>下边的我在这个论坛里找到的大侠写的!你看看吧!最好是编译一下,就明白了!<BR>data segment    ;定义数据段<BR>    infon db 0dh,0ah,'Please input a year: $'<BR>    Y db 0dh,0ah,'This is a leap year! $'<BR>    N db 0dh,0ah,'This is not a leap year! $'<BR>    w dw 0<BR>    buf db 8<BR>        db ?<BR>        db 8 dup(?)<BR>data ends</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>

mengfanzhen1 发表于 2007-7-4 07:13

<P>谢谢,各位[em05]</P>

jieking00 发表于 2008-2-28 14:13

错了

错了,我用了 不行
理由如下:一年实际的时间为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]

编程论坛