鱼C论坛

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

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

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

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

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

x

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

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

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

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

  12. stack segment stack
  13.     db 200 dup(0)
  14. stack ends

  15. code segment
  16.           assume ds:data,ss:stack,cs:code
  17.     start:mov ax,data
  18.           mov ds,ax

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


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


  61. datacate proc near
  62.           push cx;                                                      
  63.           dec cx
  64.           lea si,buf+2
  65.      tt1: inc SI      ;计算出最后一个年份字符的偏移
  66.           loop tt1
  67.           pop cx
  68.      
  69.       
  70.           mov dh,30h
  71.           mov bl,10
  72.           mov ax,1
  73.       l1: push ax
  74.           sub  byte ptr  [si],dh
  75.           mul  byte ptr [si]
  76.           add w,ax
  77.           pop ax
  78.           mul bl
  79.           dec si
  80.           loop l1
  81.           ret
  82. datacate endp

  83.    ;能被4整除且又能不能被100整除 是闰年 能直接被400整除也是闰年
  84.    ifyears proc near
  85.            push  bx
  86.            push  cx
  87.            push  dx
  88.            mov ax,w
  89.            mov   cx,ax
  90.            mov  dx,0
  91.            mov  bx,4
  92.            div  bx
  93.            cmp  dx,0
  94.            jnz  lab1
  95.            mov   ax,cx
  96.            mov  bx,100
  97.            div  bx
  98.            cmp dx,0
  99.            jnz  lab2
  100.            mov  ax,cx
  101.            mov bx,400
  102.            div  bx
  103.            cmp  dx,0
  104.            jz  lab2
  105.      lab1: clc
  106.            jmp lab3
  107.      lab2: stc
  108.      lab3: pop  dx
  109.            pop  cx
  110.            pop  bx
  111.            ret
  112.    ifyears endp
  113. code ends
  114.    end start
  115.       
复制代码


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-5 14:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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