万年历设计报告.doc_第1页
万年历设计报告.doc_第2页
万年历设计报告.doc_第3页
万年历设计报告.doc_第4页
万年历设计报告.doc_第5页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

万年历实验设计报告1006840113 符瑞盛7一、 设计思想将一连串内存单元(数据缓冲区),看作一个年历的二维平面,视作一个表格,将计算所得的年历数据依次填入此缓冲区,再一并输出。二、 程序流程图输入年份闰年?L=1L=0计算此年1月1日的星期调用月子程序(每月有相应的坐标定位)月子程序中计算每月1日的星期,依次递增。L=0?用平年的天数用闰年的天数输出年历三、 程序源代码、注释及运行效果assume cs:code,ds:datadata segment tip_in db Please Input A Year:,$ key_in db 8,?,8 dup(?) xq_11 db ?leap_tf db 0 month db Jan. , Feb. , Mar. , Apr. , May. , Jun. , Jul. , Aug. , Sep. , Oct. , Nov. , Dec. days db 31,28,31,30,31,30,31,31,30,31,30,31 ;平年天数days_lp db 31,29,31,30,31,30,31,31,30,31,30,31 ;闰年天数 xinq db s. m. t. w. t. f. s.data endstable segment zbx db 2800 dup(20h),$table endscode segment start: mov ax,data mov ds,ax mov ax,table mov es,ax;table段为年历的行列表格;作为ES段,为串传输作准备 lea dx,tip_in mov ah,9 int 21h lea dx,key_in mov ah,10 int 21h mov si,offset key_in+2 sub ax,ax call ctod ;(ax)= 年份的数值 call if_year;判断是否为闰年;leap_tf记录结果;闰年为1,平年为0 call year_xq ;xq_11=1月1日的星期;余数0,1,2,3,4,5,6,分别对应;星期日,一,二,三,四,五,六 mov cx,12 mov ax,1 s_month: push ax call md_in ;调用月子程序 pop ax inc ax loop s_month;循环12次;得整年年历 mov di,78 mov cx,35 mov ax,0a0dh s_lnfd: mov es:di,ax add di,80 loop s_lnfd;在每行最后填充回车 call line_feed call line_feed;换行 mov ax,es mov ds,ax lea dx,zbx mov ah,9 int 21h mov ah,4ch int 21h md_in: push cx push ax mov cl,3 div cl cmp ah,0 jne dingw_0 ;余数为0,代表是一行中最后一月 add ah,3 dec al dingw_0:份 ;开始定位 mov cl,ah sub ah,ah mov dl,9 mul dl mov dl,80 mul dl mov dx,ax dec cl mov ax,25 mul cl add ax,dx mov di,ax pop ax dec ax push ax mov si,offset month mov dl,21 mul dl add si,ax mov cx,21 cld rep movsb;将相应的月份英文填入. add di,59 mov si,offset xinq mov cx,21 cld rep movsb;传入星期标识 add di,59 cmp leap_tf,0 jne leapy mov si,offset days jmp true_in leapy: mov si,offset days_lp;是闰年则用闰年的天数 true_in: pop ax add si,ax mov cl,si ;si= 此月的天数 push cx cmp ax,0 je Jan_in;看是否是一月份,是则跳过. mov cx,ax sub ax,ax dec si ;si=之前一月的天数,;距离1.1日的天数从上一月开始加起 d_all: mov dl,si add al,dl adc ah,0 dec si loop d_all ;计算此月之前的总天数 mov dh,7 call divw;计算余数 add dl,xq_11 ;加上1.1的余数 xor ah,ah mov al,dl div dh jmp NJan_in Jan_in: mov ah,xq_11;(ah)= 代表相应星期的余数 NJan_in: mov dl,ah mov al,3 mul ah add di,ax;定位1日的坐标 mov ax,1 pop cx day_in: push axmov byte ptr es:di,20h inc di call dtoc_ahal;低位放低位,高位放高位的ASCII码;若高位为0,则输空格. mov es:di,ah inc di mov es:di,al inc di pop ax inc ax cmp dl,6 je lin_fed inc dl loop day_in jmp _md_in lin_fed: sub dl,dl add di,59 loop day_in;当输到星期六那天时,;再输下一个时需在逻辑上换行 _md_in: pop cx ret if_year: push dx push cx push bx push ax mov cx,ax sub dx,dx mov bx,4 div bx cmp dx,0 jnz _if_year;判断能否被4整除;不整除则不是闰年 mov ax,cx mov bx,100 sub dx,dx div bx cmp dx,0 jnz lpd_t;判断是否被100整除;不是则一定是闰年 mov ax,cx mov bx,400 sub dx,dx div bx cmp dx,0 jnz _if_year;是否被400整除,是为闰年 lpd_t: mov leap_tf,1 _if_year: pop ax pop bx pop cx pop dx ret divw: push bx mov bl,al mov al,ah xor ah,ah div dh mov bh,al mov al,bl div dh mov dl,ah mov ah,bh pop bx ret;字的无溢出除法,AH放结果高位,;AL放结果低位,DL放余数 dtoc_ahal: push dx mov dl,10 div dl xchg ah,al cmp ah,0 jne chag_str add ah,20h add al,30h pop dx ret chag_str: add ah,30h add al,30h pop dx ret line_feed: push ax push dx mov dl,10 mov ah,2 int 21h mov dl,13 int 21h pop dx pop ax ret ctod: push dx ctod_s: xor dh,dh mov dl,si cmp dl,0dh je _ctod sub dl,30h push dx shl ax,1 mov dx,ax shl ax,1 shl ax,1 add ax,dx pop dx add ax,dx inc si jmp ctod_s _ctod: pop dx ret;ASCII码数字字符转换成数值 year_xq: push dx push ax dec ax mov dl,100 div dl ;(ah)=y(年份的后两位),;(al)=C(年份的前两位) push ax mov dl,4 mov dh,ah sub ah,ah div dl ;(al)=C/4 xchg al,dh ;(dh)=C/4,(al)=y sub ah,ah div dl;(al)=y/4 mov dl,al ;(dl)=y/4 pop ax xchg al,ah shl ah,1 add al,dl add al,dh add al,36 sub al,ah aorb: cmp al,0 jnb calcu_xq add al,7 jmp aorb calcu_xq: sub ah,ah mov dl,7 div dl mov xq_11,ah pop ax pop dx retcode endsend start四、 设计调试等体会这次的程序的确有些复杂,但是从小程序子程序入手,一个一个的解决,那么再大的工程也不是件难事.先从设计表格的定位入手,再选择合适的指针定位,一步一步调试到月子程序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论