|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
-
复制代码
|
|