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

📄 c.asm

📁 汇编语言程序,主要用于的功能是输入年月日,输出星期几,不是太好,希望大家多提意见
💻 ASM
字号:
data segment
maxlen db 11
len db ?
string1 db 11 dup(?)
        db '$'
year dw ?
month dw ?
day dw ?
sum dw 2 dup(?)
string db 0dh,0ah,'PLEASE INPUT A DATA!',0dh,0ah,'$'
monday db 0dh,0ah, 'today is monday','$'
tuesday db 0dh,0ah, 'today is tuesday','$'
wednesday db  0dh,0ah,'today is wendesday','$'
thursday db 0dh,0ah, 'today is thursday','$'
friday db  0dh,0ah,'today is friday','$'
saturday db  0dh,0ah,'today is saturday','$'
sunday db  0dh,0ah,'today is sunday','$'
string2 db 0dh,0ah,'DO YOU WANT TO GO ON ?  Y/N  ',0dh,0ah,'$'
string3 db 0dh,0ah,'bay-bay!','$'
mro1 db 0dh,0ah,'year is wrong','$'
mro2 db 0dh,0ah,'month is wrong','$'
mro3 db 0dh,0ah,'day is wrong','$'
data ends
stack1 segment para stack
 dw 200h dup(0)
stack1 ends
code segment
assume cs:code,ds:data,ss:stack1
start:push ds
mov ax,0
push  ax
mov ax,data
mov ds,ax
mov ah,0fh
int 10h
mov ah,0
mov al,0dh
int 10h

start1: lea dx,string ;提示输入一个你要查询的日期
    mov ah,9
   int 21h
mov dx,offset maxlen
mov ah,0ah
int 21h 
xor cx,cx
lea di,string1
mov al,[di]
and al,0fh
xor ah,ah
mov bx,3e8h
mul bx 
mov year,ax
inc di
mov al,[di]
and al,0fh
xor ah,ah
mov bl,64h
mul bl
mov cx,year
add cx,ax
inc di
mov al,[di]
and al,0fh
xor ah,ah
mov bl,0ah
mul bl
add cx,ax
inc di
mov al,[di]
and al,0fh
xor ah,ah
add cx,ax
cmp cx,1         ;判断输入的年号是否错误
jl p1
jmp p2
p1:
lea dx,mro1
mov ah,9
int 21h
jmp start1
p2:mov year,cx   ;获取正确的年份
add di,2
mov al,[di]
and al,0fh
xor ah,ah
mov bl,0ah
mul bl
mov month,ax
inc di
mov al,[di]
and al,0fh
xor ah,ah
mov cx,month
add cx,ax
mov month,cx   ;获取月份
cmp cx,12      ;判断月份是否错误
ja p5
cmp cx,1
jl p5
jmp p3
p5:lea dx,mro2
mov ah,9
int 21h
jmp start1
p3:add di,2
mov al,[di]
and al,0fh
xor ah,ah
mov bl,0ah
mul bl
mov day,ax
inc di
mov al,[di]
and al,0fh
xor ah,ah
mov cx,day
add cx,ax
mov day,cx    ;获取日期
mov bx,month
cmp bx,1      ;判断日期是否错误
jz l1
cmp bx,2
jz l3
cmp bx,3
jz l1
cmp bx,4
jz l2
cmp bx,5
jz l1
cmp bx,6
jz l2
cmp bx,7
jz l1
cmp bx,8
jz l1
cmp bx,9
jz l2
cmp bx,10
jz l1
cmp bx,11
jz l2
cmp bx,12
jz l1
l1:cmp cx,31
ja p6
jmp p4
l2: cmp cx,30
ja p6
jmp p4
p6:lea dx,mro3
mov ah,9
int 21h
jmp start1
l3:call ling
   cmp dx,0
   jz q1
   jmp q2
q1:mov cx,day
cmp cx,29
ja p7
jmp p4
q2:mov cx,day
cmp cx,28
ja p7
jmp p4
p7:lea dx,mro3
mov ah,9
int 21h
jmp start1

ling proc                ;包含判断闰年或平年的子程序
lea si,sum
mov ax,year
sub ax,1
mov year,ax
mov bx,16dh
mul bx 
mov word ptr[si],ax
add si,2
mov word ptr[si],dx
clc
lea si,sum
mov ax, year
xor dx,dx
mov  bx,4h
div bx
mov cx, [si]
mov dx, [si+2]
adc cx,ax
mov word ptr[si],cx
lea si,sum
mov ax,year
mov bl,64h
div bl
and ax,00ffh
mov dx,[si]
clc 
sbb dx,ax
mov word ptr[si],dx
lea si,sum
mov ax,year
xor bx,bx
xor dx,dx
mov bx,190h
div bx
mov cx,[si]
clc
adc cx,ax
mov word ptr[si],cx
mov ax,year           ;判断输入的是平年还是闰年!
inc ax              
xor dx,dx
mov bx,0190h
div bx
cmp dx,0
jz f1
mov ax,year
inc ax
xor dx,dx
mov bl,64h
div bl
cmp ah,0
jnz  e1
e1:mov ax,year
   inc ax
   xor dx,dx
   mov bx,0004h
   div bx
   ret 
ling endp

p4:call ling          ;以下具体计算部分程序
   cmp dx,0
   jz f1
   jmp f2
f1: call runnian
xor ax,ax
jmp again
f2: call pingnian
again:lea si,sum
mov ax,[si+2]
mov bl,07h
div bl
mov dl,ah
xor dh,dh
mov ax,[si]
mov bl,7h
and bh,00h
div bx
and dx,000fh
cmp dl,1
jz m1
cmp dl,2
jz m2
cmp dl,3
jz m3
cmp dl,4
jz m4
cmp dl,5
jz m5
cmp dl,6
jz m6
cmp dl,0
jz m0
add dl,30h
mov ah,2
int 21h
m1: lea dx,monday
    mov ah,9
    int 21h
    jmp exit
m2: lea dx,tuesday
    mov ah,9
    int 21h
    jmp exit
m3: lea dx,wednesday
    mov ah,9
    int 21h
    jmp exit
m4: lea dx,thursday
    mov ah,9
    int 21h
    jmp exit
m5: lea dx,friday
    mov ah,9
    int 21h
    jmp exit
m6: lea dx,saturday
    mov ah,9
    int 21h
    jmp exit
m0: lea dx,sunday
    mov ah,9
    int 21h
exit: lea dx,string2
      mov ah,9
      int 21h
      xor dx,dx
      mov ah,1
      int 21h
      cmp al,'n'
      je last
      jmp start1
last:lea dx,string3
     mov ah,9
     int 21h
     mov ah,4ch
     int 21h

pingnian proc      ;平年子程序
mov ax,month
mov cx,00h
cmp ax,1
jz c1
cmp ax,2
jz c2
cmp ax,3
jz c3
cmp ax,4
jz c4
cmp ax,5
jz c5
cmp ax,6
jz c6
cmp ax,7
jz c7
cmp ax,8
jz c8
cmp ax,9
jz c9
cmp ax,10
jz c10
cmp ax,11
jz c11
jmp lab
c1:mov bx,day
   add cx,bx
   jmp sum2
c2:mov bx,day
   mov cx,1fh
   add cx,bx
   jmp sum2
c3:mov bx,day
mov cx,3bh
   add cx,bx
   jmp sum2
c4:mov bx,day
mov cx,5ah
   add cx,bx
   jmp sum2
c5:mov bx,day
  mov cx,78h
   add cx,bx
   jmp sum2
c6:mov bx,day
mov cx,97h
   add cx,bx
   jmp sum2
c7:mov bx,day
mov cx,0b5h
   add cx,bx
   jmp sum2
c8:mov bx,day
mov cx,0d4h
   add cx,bx
   jmp sum2
c9:mov bx,day
mov cx,0f3h
 add cx,bx
   jmp sum2
c10:mov bx,day
mov cx,111h
   add cx,bx
   jmp sum2
c11: mov bx,day
mov cx,130h
   add cx,bx
   jmp sum2
lab:cmp ax,12
    jz c12
c12:mov bx,day
mov cx,14eh
   add cx,bx
   jmp sum2
sum2: clc
lea si,sum
    mov ax,[si]
mov dx,[si+2]
   adc ax,cx
mov word ptr[si],ax
mov word ptr[si+2],dx
ret
pingnian endp

runnian proc           ;闰年子程序
mov ax,month
mov cx,00h
cmp ax,1
jz d1
cmp ax,2
jz d2
cmp ax,3
jz d3
cmp ax,4
jz d4
cmp ax,5
jz d5
cmp ax,6
jz d6
cmp ax,7
jz d7
cmp ax,8
jz d8
cmp ax,9
jz d9
cmp ax,10
jz d10
cmp ax,11
jz d11
jmp lab1
d1:mov bx,day
   add cx,bx
   jmp sum1
d2:mov bx,day
   mov cx,1fh
   add cx,bx
   jmp sum1
d3:mov bx,day
mov cx,3ch
   add cx,bx
   jmp sum1
d4:mov bx,day
mov cx,5bh
   add cx,bx
   jmp sum1
d5:mov bx,day
  mov cx,79h
   add cx,bx
   jmp sum1
d6:mov bx,day
mov cx,98h
   add cx,bx
   jmp sum1
d7:mov bx,day
mov cx,0b6h
   add cx,bx
   jmp sum1
d8:mov bx,day
mov cx,0d5h
   add cx,bx
   jmp sum1
d9:mov bx,day
mov cx,0f4h
   add cx,bx
   jmp sum1
d10:mov bx,day
mov cx,112h
   add cx,bx
   jmp sum1
d11: mov bx,day
mov cx,131h
   add cx,bx
   jmp sum1
lab1:cmp ax,12
    jz d12
d12:mov bx,day
    mov cx,14fh
    add cx,bx
    jmp sum1
sum1: clc
    lea si,sum
    mov ax,[si]
    mov dx,[si+2]
    adc ax,cx
mov word ptr[si],ax
mov word ptr[si+2],dx
ret
runnian endp
code ends
end start

⌨️ 快捷键说明

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