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

📄 实验一 闰年判断.asm

📁 汇编语言课程设计源代码
💻 ASM
字号:
;判断闰年
;根据输入的具体年份(在1900-2100之间,要求对输入进行有效性检查)
;判断是否闰年,并给出相应的提示信息

load macro               ;宏——依次读取字符串中的一个字符
     mov cx,1
     lodsb
endm

print macro mess         ;宏——显示字符串
     lea dx,mess
     mov ah,9
     int 21h
endm

data segment
yearasc       label byte
     maxlen   db    5
     actlen    db    ?
     kb_data  db    5 dup (?)
     year     dw    0
inmess        db 'Please input a year:',0dh,0ah,'$' 
errmess1      db 0dh,0ah,'INVALID INPUT!',0dH,0aH,'$'
errmess2      db 0dh,0ah,'INVALID YEAR INPUT(1900-2100)!',0dH,0aH,'$'
ymess        db 0dh,0ah,'This is a leap year!','$' 
nmess        db 0dh,0ah,'This is a common year!','$' 
factor        dw 01h 
data ends

code segment
main proc far
     assume ds:data,cs:code
start:
     mov ax,data
     mov ds,ax
     
     call input 
     call cascdec 
     call leap
 
     mov ax,4c00h 
     int 21h
main endp

input proc near
     print inmess
enter:
     mov ah,0ah
     lea dx,yearasc
     int 21h
     cld
     mov cx,4
     lea si,kb_data
check1:             ;有效输入范围:1000-9999
     lodsb
     cmp al,'0'
     jb err1
     cmp al,'9'
     ja err1
     loop check1
     ;jmp check2
check2:             ;有效输入范围:1900-2100
     lea si,kb_data
     cld
     load
     cmp al,'1'
     je  b1
     cmp al,'2'
     je b2
     ja err2
     ret
b1:
     load
     cmp al,'9'
     jne err2
     ret
b2:
     load
     cmp al,'1'
     ja err2
     jb exit
     load
     cmp al,'0'
     ja err2
     load
     cmp al,'0'
     ja err2
exit:
     ret
err1:
     mov dl,07h 
     lea dx,errmess1
     mov ah,9 
     int 21h    
     jmp enter     
err2: 
     lea dx,errmess2
     mov ah,9 
     int 21h
     jmp enter
input endp 

cascdec proc near          ;ASC码转十进制
     std 
     lea si,kb_data+3 
     mov cx,4
again: 
     xor ax,ax
     lodsb       
     and al,0fh          ;AL寄存器的内容和0FH相与,使ASCII码的高4位清零,低4位保持不变
     mul factor          ;于是一个ASCII码数就转换成了BCD码
     add year,ax 
     mov ax,factor
     mov bx,10
     mul bx
     mov factor,ax
     loop again
     ret
cascdec endp

leap proc near
     mov ax,year
     and ax,0003h        ;能否被4整除 
     jne no              ;不能则输出NO 
     mov ax,year 
     mov cl,100 
     div cl              ;除100 
     cmp ah,00h         ;能否整除 
     jne yes             ;不能,打印YES 
     xor dx,dx 
     mov ax,year 
     mov cx,400 
     div cx 
     cmp dx,0
     je yes 
no: 
     print nmess
     jmp exit1
yes:
     print ymess
exit1: 
     ret
leap endp

code ends
end start

⌨️ 快捷键说明

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