⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 闰年.txt

📁 判断闰年 根据输入的具体年份(在1900-2100之间
💻 TXT
字号:
datas segment              ;定义数据段
	year   db 10,?,10 dup(?)                          ;年份字符串缓冲区
	input  db 0dh,0ah,'Please input one year:$'       ;输入年份提示信息
	yes    db 0dh,0ah,'The year is a leap year!$'     ;闰年信息
	no     db 0dh,0ah,'The year is not a leap year!$' ;不是闰年信息
	error  db 0dh,0ah,'The year is illegal! $'        ;输入年份不合理的提示信息
	information db 0dh,0ah,'Continue or not?(y/n)$'   ;是否继续判断闰年提示信息
	buff   db 5,?,5 dup(?)                            ;判断字符串缓冲区
	crlf   db 0ah,0dh,'$'                             ;换行
datas ends

code segment               ;定义数据段
main proc far              ;主函数段
	assume cs:code,ds:datas
start:                     ;主函数开始执行
    push ds
    sub  ax,ax
    push ax
    mov ax,datas
    mov ds,ax
    
    lea dx,input           
    mov ah,9
    int 21h               ;显示输入年份提示信息
    lea dx,year
    mov ah,10
    int 21h               ;输入年份字符串 
    
    cmp year[1],4         ;判断输入的年份字符串的字符个数是否为4
    jnz output3           ;若不为4,则跳转到output3
    
    lea si,year+2         ;把输入的年份字符串的首地址传送给si
    mov dh,year[si]       ;把年份字符串的第一个字符传送给dh
    mov dl,year[si+1]     ;把年份字符串的第二个字符传送给dl
    
    cmp dh,'1'            ;判断年份字符串的第一个字符串是否为1	                           
    jz  cmp1              ;若为1,则跳转到cmp1
    cmp dh,'2'            ;判断年份字符串的第一个字符串是否为2
    jz  cmp2              ;若为2,则跳转到cmp2
    jmp output3           ;若不为1、2,则跳转到output3 
cmp1:
    cmp dl,'9'            ;判断年份字符串的第二个字符串是否为9	
    jz  compare           ;若为9,则跳转到compare
    jmp output3           ;若不为9,则跳转到output3
cmp2:
    cmp dl,'0'            ;判断年份字符串的第二个字符串是否为0	
    jz  compare           ;若为0,则跳转到compare
    cmp dl,'1'            ;判断年份字符串的第二个字符串是否为1
    jz  compare           ;若为1,则跳转到compare
    jmp output3           ;若不为0、1,则跳转到output3
compare:
    mov ah,year[si+2]     ;把年份字符串的第三个字符传送给ah
   ;判断年份字符串的第三个字符串是在0-9之间,
   ;若是,则继续向下执行;若非,则跳转到output3
    cmp ah,'9'            
    jg  output3
    cmp ah,'0'
    jl  output3               
    mov al,year[si+3]     ;把年份字符串的第四个字符传送给al
   ;判断年份字符串的第四个字符串是在0-9之间,
   ;若是,则继续向下执行;若非,则跳转到output3
    cmp al,'9'
    jg  output3
    cmp al,'0'
    jl  output3
    
 ;以下代码对输入的年份字符串是否为闰年进行判断   
    cmp dh,'1'         ;判断年份字符串的第一个字符串是否为1
    jz  chuli1         ;若为1,则跳转到chuli1
    cmp dl,'0'         ;若非,则为2,判断年份字符串的第二个字符串是否为0
    jz  chuli2         ;若为0,则跳转到chuli2
    
    cmp ah,'0'         ;若非,则为1,判断年份字符串的第三个字符串是否为0
    jnz output3        ;若不为0,则跳转到output3
    cmp al,'0'         ;若为0,判断年份字符串的第四个字符串是否为0
    jnz output3        ;若不为0,则跳转到output3
    jmp output2
chuli1:
    cmp al,'0'         
    jnz chuli2
    cmp ah,'0'
    jnz chuli2
    jmp output2      
   ;以下代码判断年份(1900<year<2100)是否为闰年  
chuli2:
    shr al,1 
    jc  output2       ;年份的第四个字符为奇数,则不是闰年
    mov bl,al
    shr ah,1          
    jc  chuli3       
    jmp chuli4
chuli3:
    shr al,1
    jnc output2     ;年份的第三个字符为奇数,第四个字符为0、4或8,则不是闰年
    jmp output1     ;年份的第三个字符为奇数,第四个字符为2或6,则是闰年
chuli4:
    shr bl,1        
    jc  output2     ;年份的第三个字符为偶数,第四个字符为2或6,则不是闰年 
                    ;年份的第三个字符为偶数,第四个字符为0、4或8,则是闰年                    
output1:    
    lea dx,yes
    mov ah,09h
    int 21h        ;输出年份为闰年的信息
    jmp exit
output2:
    lea dx,no
    mov ah,09h
    int 21h        ;输出年份不为闰年的信息
    jmp exit
output3:
    lea dx,error
    mov ah,09h    
    int 21h        ;输出年份不合理的信息
exit:
    lea dx,crlf
    mov ah,9
    int 21h       
    lea dx,information   ;是否继续判断闰年提示信息
    mov ah,09h
    int 21h
       
    lea dx,buff
    mov ah,10
    int 21h
    cmp buff[2],'y'      
    jnz display          ;若输入字母n,则结束程序
    lea dx,crlf
    mov ah,9
    int 21h
    jmp start            ;否则跳转到start,继续输入年份进行判断
display:  
    mov ah,4ch     ;返回DOS
    int 21h
main endp
code ends
  end start	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -