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

📄 dis.asm.bak

📁 这是一款汇编的日历
💻 BAK
字号:
;***********************************
;入口参数:bx = Year dl=Month
;***********************************

public display
data segment
      Year         dw ?
      Month       db ?
      leap     db ?
      weekstr db "  MON¤TUR¤WEN¤THU¤FRI¤SAT¤SUN",'$'
      fillblank db "     $"
      fillblank4 db "    $"
      fillblank3 db "   $"
      c        db ?
      y        db ?
      firstday db ?
      temp  db ?
      MonthSize db ?
data ends

cseg segment
      assume cs:cseg,ds:data
display proc   far
      push ds

      mov ax,data
      mov ds,ax

      mov Year,bx
      mov Month,dl

      mov dx,0
      xor bh,bh
      mov ah,2
      int 10h

      mov ah,6
      mov al,0
      mov bh,09h
      mov ch,0
      mov cl,0
      mov dh,24
      mov dl,79
      int 10h

      mov ah,6
      mov al,0
      mov bh,10h
      mov ch,0
      mov cl,25
      mov dh,24
      mov dl,79
      int 10h

      call far ptr dispYM

      lea dx,weekstr
      mov ah,9
      int 21h
      mov ah,2
      mov dl,0dh
      int 21h
      mov dl,0ah
      int 21h

      call GetMonthSize

      cmp Month,2
      ja skip
      add Month,12
      dec Year
skip:
      mov bl,100
      mov ax,Year
      div bl
      mov c,al
      mov y,ah
      mov cl,2
      mov bl,c
      shr bl,cl
      shl c,1
      sub bl,c
      add bl,y
      shr y,cl
      add bl,y
      inc Month
      xor ah,ah
      mov al,Month
      mov dx,13
      mul dx
      mov cx,5
      div cx
      xchg ax,bx
      cbw
      xchg ax,bx
      add bx,ax
      mov ax,bx
      mov cl,7
      idiv cl
      cmp ah,0
      jG skipAdd
      add ah,7
skipAdd:
      mov bl,ah
      mov firstday,bl
      mov cl,bl
      mov ch,0
      dec cl
      jcxz skipF
FillB:   mov ah,9
      lea dx,fillblank
      int 21h
      loop FillB
skipF:
      mov cl,1
disLop: call dispWeek
      inc cl
      inc bl
      cmp bl,8
      jb skipModle

      mov bl,1
      mov ah,2
      mov dl,0dh
      int 21h
      mov dl,0ah
      int 21h

skipModle:
      cmp cl,MonthSize
      jbe dislop

      mov ah,2
      mov dl,0dh
      int 21h
      mov dl,0ah
      int 21h

      pop ds
      ret
display endp

;******************************************************************

GetMonthSize proc    near
      push ax
      push dx

      mov leap,0
      mov ax,Year
      mov ch,00000011b
      and ch,al
      mov bl,100
      div bl
      mov cl,ah
      cmp ch,0
      jne skipNLeap
      cmp cl,0
      jne skipLeap

      mov ax,Year
      mov bx,400
      mov dx,0
      div bx
      cmp dl,0
      je skipLeap
skipNLeap:
      jmp gmsize
skipLeap:
      inc leap
gmsize:
      mov al,Month
      cmp al,2
      je return2
      cmp al,8
      jb skipInc
      inc al
skipInc:
      test al,1
      jz   returnEven
      mov MonthSize,31
      jmp return
returnEven:
      mov MonthSize,30
      jmp return

return2:
      mov MonthSize,28
      cmp leap,0
      je return
      inc MonthSize
return:
      pop dx
      pop bx
      ret
GetMonthSize endp

;*****************************************************************

dispWeek proc    near
      push cx
      push bx
      push ax
      push dx

      cmp cl,10
      jae DoubleDig

      lea dx,fillblank4
      mov ah,9
      int 21h
      mov dl,cl
      add dl,30h
      mov ah,2
      int 21h
      jmp back

DoubleDig:
      mov ch,10
      mov ah,0
      mov al,cl
      div ch

      mov cx,ax
      mov ah,9
      lea dx,fillblank3
      int 21h
      mov dl,cl
      add dl,30h
      mov ah,2
      int 21h
      mov dl,ch
      add dl,30h
      int 21h
back:
      pop dx
      pop ax
      pop bx
      pop cx
      ret
dispWeek endp
;*********************************************************

dispYM      proc    far
      push bx
      push dx

      mov ax,year
      mov dh,10
      xor si,si
next:   div dh
      mov cl,ah
      mov ch,0
      inc si
      push cx
      mov ah,0
      cmp ax,0
      jne next

      mov cx,si
repeat:      pop dx
      mov ah,2
      add dl,30h
      int 21h
      loop repeat

      mov dl,0dh
      mov ah,2
      int 21h
      mov dl,0ah
      mov ah,2
      int 21h

      mov al,Month
      mov ah,0
      mov bl,10
      div bl
      mov cx,ax
      mov dl,cl
      mov ah,2
      add dl,30h
      int 21h
      mov dl,ch
      add dl,30h
      int 21h

      mov dl,0dh
      mov ah,2
      int 21h
      mov dl,0ah
      mov ah,2
      int 21h

      pop dx
      pop bx
      ret
dispYM      endp
;****************************************************
cseg ends
      end

⌨️ 快捷键说明

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