📄 闰年.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 + -