万年历设计报告(汇编)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编大作业之万年历

914106840745

周子聪

万年历程序设计报

设置的初始年份为1995年,若距离1995年一月一日不超过65536天的年份应该都不会出错。也就是说1995——2174年应该都可以查询

具体能查询多少年内的没有特意验证,百度日历最多只给查2050年。1995年到2050年均正确,抽取三年截图如下:

万年历源代码(汇编)

DATAS SEGMENT

pwrdw 0

yeardw ?

monthdw 1,2,3,4,5,6,7,8,9,10,11,12

xingqidb 's','m','t','w','t','f','s'

day

dw32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,1 0,9,8,7,6,5,4,3,2,1

nuofdaydw 31,28,31,30,31,30,31,31,30,31,30,31

firstdaydw 12 dup(?) ;存放每月第一天星期几

nowdaydw 4 dup(?) ;动态变化,存放当前月份下次须输出几号

tishidb 'INPUT YEAR YOU WANT TO KNOW:',0dh,0dh,'$'

DATAS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS

START:

MOV AX,DATAS

MOV DS,AX

movdx,offsettishi

mov ah,9

int 21h

CALL PrintOneLine

;接收输入的年份

input:

MOV AH,1

INT 21H;ÊäÈëÒ»¸öN

mov ah,0

MOV pwr,Ax

CMP al,0dH

jz next0

sub al,30h

mov ah,0

push ax

movax,year

shl ax,1

push ax

mov cl,2

shlax,cl

popbx

addax,bx

popbx

addax,bx

movyear,ax

jmp input

;计算并初始化数据段中每个月第一天星期几

next0:

movcx,year

CALL IsLeap

cmp ax,1

jnzInitFirstDayOfMonth

movnuofday[2],29 InitFirstDayOfMonth:

CALL PrintOneLine

mov dx,0

movbx,year

sub bx,1995

movcx,year caculator:

sub cx,1

CALL IsLeap

cmp ax,1

jnz next

inc dx

next:

cmp cx,1995

jnzcaculator

movax,year

sub ax,1995

mov bx,365

push dx

mulbx

pop dx

addax,dx

mov bx,7

MOV DX,0

divbx

movfirstday,dx

mov bx,0

InitLoop:

movax,firstday[bx]

addax,nuofday[bx]

mov dx,0

div cx

add bx,2

movfirstday[bx],dx

cmp bx,22

jnzInitLoop

mov bx,2 BIGLOOP:

pushbx

CALL PRINTYEAR

CALL PrintOneLine popbx

add bx,6

cmp bx,26

jnz BIGLOOP

EXIT:

MOV AH,4CH

INT 21H

;打印第二三四行日期

PRINT234 PROC

pushbx

loopline234:

CALL PrintOneLine

CALL PrintBlank

CALL PrintBlank

printdayline234:

mov cx,7

movsi,nowday[bx]

CALL PrintBlank

CALL PrintBlank

ag7day234:

movax,day[si]

CALL PrintNum

cmp day[si],10

jae printoneblank234

CALL PrintBlank

CALL PrintBlank

jmp next234 printoneblank234:

CALL PrintBlank next234:

sub si,2

loop ag7day234

movnowday[bx],si

incbx

incbx

cmp bx,8

jnz printdayline234

popbx

RET

PRINT234 ENDP

相关文档
最新文档