万年历设计报告(汇编)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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