鱼C论坛

 找回密码
 立即注册
查看: 1668|回复: 0

[技术交流] 【汇编例题】判断某一年是否为润年

[复制链接]
发表于 2014-6-10 16:12:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
data segment    ;定义数据段
    infon db 0dh,0ah,'Please input a year: 

  ;提示信息
    Y db 0dh,0ah,'This is a leap year! 

        ;是闰年
    N db 0dh,0ah,'This is not a leap year! 

        ;不是闰年
    w dw 0        ;存放非ascii码数据的 闰年
    buf db 8    ;存放输入的闰年数据是ascii码
      
data ends

stack segment stack
    db 200 dup(0)
stack ends

code segment
          assume ds:data,ss:stack,cs:code
    start:mov ax,data
          mov ds,ax

            ;功能09H
          ;功能描述:输出一个字符串到标准输出设备上。如果输出操作被重定向,那么,
          ;将无法判断磁盘已满
          ;入口参数:AH=09H
          ;DS:DX=待输出字符的地址
          ;说明:待显示的字符串以’$’作为其结束标志
          ;出口参数:无
          lea dx,infon  ;取infon的偏移地址
          mov ah,9
          int 21h


          ;功能10
          ;功能描述:从标准输入设备上读入一个字节字符串,遇到“回车键”结束输入
          ;(输入的字符在标准的输出设备上有回显)。如果该输入操作被重定向,那么,
          ;将无法判断文件是否已到文件尾
          ;入口参数:AH=0AH
          ;DS:DX=存放输入字符的起始地址
          ;接受输入字符串缓冲区的定义说明:
          ;1、第一个字节为缓冲区的最大容量,可认为是入口参数;
          ;2、第二个字节为实际输入的字符数(不包括回车键),可看作出口参数;
          ;3、从第三个字节开始存放实际输入的字符串;
          ;4、字符串以回车键结束,回车符是接受的最后一个字符;
          ;5、若输入的字符数超过缓冲区的最大容量,则多出的部分被丢弃,系统并
          ;发出响铃,直到输入“回车”键才结束输入。 
          lea dx,buf    ;从键盘输入年份字符串
          mov ah,10
          int 21h
          
          mov cl, [buf+1] ;字符的个数
          call datacate
          call ifyears
          jc a1
          
          lea dx,n
          mov ah,9
          int 21h
          jmp exit
    a1:   lea dx,y
          mov ah,9
          int 21h
    exit: mov ah,4ch
          int 21h
       
 

 datacate proc near
          push cx;                                                       
          dec cx
          lea si,buf+2
     tt1: inc SI      ;计算出最后一个年份字符的偏移
          loop tt1
          pop cx
     
      
          mov dh,30h
          mov bl,10
          mov ax,1
      l1: push ax
          sub  byte ptr  [si],dh
          mul  byte ptr [si]
          add w,ax
          pop ax
          mul bl
          dec si
          loop l1
          ret
 datacate endp

   ;能被4整除且又能不能被100整除 是闰年 能直接被400整除也是闰年
   ifyears proc near
           push  bx
           push  cx
           push  dx
           mov ax,w
           mov   cx,ax
           mov  dx,0
           mov  bx,4
           div  bx
           cmp  dx,0
           jnz  lab1
           mov   ax,cx
           mov  bx,100
           div  bx
           cmp dx,0
           jnz  lab2
           mov  ax,cx
           mov bx,400
           div  bx
           cmp  dx,0
           jz  lab2
     lab1: clc
           jmp lab3
     lab2: stc
     lab3: pop  dx
           pop  cx
           pop  bx
           ret
   ifyears endp
code ends
   end start
      

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 04:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表