?? 閏年.asm
字號:
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 + -