星期判断微机汇编_第1页
星期判断微机汇编_第2页
星期判断微机汇编_第3页
星期判断微机汇编_第4页
星期判断微机汇编_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

学号:课程设计题目星期判断的程序学院自动化学院专业电气工程及其自动化班级电气1304姓名指导教师2015年12月26日课程设计任务书学生姓名:专业班级:电气指导教师:工作单位:自动化学院题目:星期判断的程序初始条件:星期判断程序输入年、月、日,能够判断当日的星期数,并进行输出。〔可设某年的1月1日为起点,注意闰年问题〕;要求完成的主要任务:〔包括课程设计工作量及其技术要求,以及说明书撰写等具体要求〕设计任务及要求分析方案比拟及认证说明系统原理阐述硬件设计课题需要说明:硬件原理,电路图,采用器件的功能说明软件设计课题需要说明:软件思想,流程图,源程序及程序注释调试记录及结果分析总结参考资料附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图时间安排: 12月3日~12月6日:收集资料,方案选择12月7日~12月19日:整体流程,程序细节,调试程序12月21日~12月30日:课程设计报告撰写1月4:交报告,程序演示,辩论指导教师签名:年月日系主任〔或责任教师〕签名:年月日目录TOC\o"1-3"\h\u19317摘

要 据区里。其次程序的核心转换思想是运用蔡勒公式W

=

[C/4]

-

2C

+

y

+

[y/4]

+

[13

*

(M+1)

/

5]

+

d

1进行转换,调用子程序并将最后结果显示在屏幕上。四、程序框图开始开始输入年月日输入年月日提示错误是否提示错误是否继续判断正误判断正误 N蔡勒公式进行转换结束是否继续显示星期 N 蔡勒公式进行转换结束是否继续显示星期 YN五、源程序及程序注解stacksSEGMENTstackDB200DUP(0)stacksENDSdatasegmentYeardw0Monthdb0Daydb0tempdb10dup(0)countdw?ErrMsgdb0dh,0ah,'Inputwrong!pleaseinputagain!','$'str1db0dh,0ah,'pleaseinputyearmonthday:',0dh,0ah,'$'str2db0dh,0ah,'WhetherornottocontinueinquiriesYes/No',0dh,0ah,'$'weekstr0db'TodayisSunday','$'weekstr1db'TodayisMonday','$'weekstr2db'TodayisTuesday','$'weekstr3db'TodayisWednesday','$'weekstr4db'TodayisThursday','$'weekstr5db'TodayisFriday','$'weekstr6db'TodayisSaturday','$'adw?bdw?ccdw?ddw?wdb0dataends;定义了变量和信息codesegmentassumecs:code,ds:data,ss:stacksstart:movax,datamovds,axleadx,str1;提醒你输入年月日movah,9h;显示字符串int21hcallGetYearMonthDay;调用子程序输入正确的年月日calldisplay;调用子程序通过计算得出星期sel:leadx,str2;提醒你选择退出程序还是继续movah,9hint21hmovah,1;输入你的选择〔键盘输入并回显〕int21hcmpal,'Y'jestartcmpal,'y';输入y或Y继续程序jestartcmpal,'N'jeexitcmpal,'n';输入n或N退出程序jeexitjmpselexit:movah,4chint21h;退出GetYearMonthDayprocnear;子程序输入正确的年月日pushaxpushcxpushsipushdi;压栈inputagain:movYear,0movMonth,0movDay,0movsi,0;把年月日重新归零repeatY:movah,1;输入年int21hcmpal,0dh;换行jeEndY;回车结束年的输入cmpal,20h;判断是否是是空格键SPjeEndY;空格结束年的输入cmpal,1bh;判断是否是退出ESCjeExitDos0;退出键那么退出程序cmpal,30h;和0比拟jbErr;小于0转到错误提示cmpal,39h;和9比拟jaErr;大于9转到错误提示subal,30h;把读入的数据转化为二进制保存到temp[si]中movtemp[si],alincsi;si加1jmprepeatYErr:leadx,ErrMsgmovah,9hint21hmovah,2;显示输出movdl,0dhint21h;换行movdl,0ahint21h;回车jmpinputagain;跳回到inputagain重新输入年月日EndY:movbx,10;把10存入bxmovdi,si;把si的值传给dimovsi,0;再把si清零NextYBit:movah,0moval,temp[si];再把存在temp[si]中的数据存入almovcount,di;把di中的转到countsubcount,si;count=count-sideccount;count-1movcx,count;把自减后的count存入cxjcxzskipY;cx为0转移lopmul:mulbx;*10,主要实现把年按千位,百位,十位,各位存放looplopmul;cx-1循环skipY:addYear,ax;把ax中存入的年的值赋给yearincsi;si自加1cmpsi,di;比拟si和dijneNextYBit;不相等转移;主要实现把年按千位,百位,十位,各位存放pushdxmovah,2movdl,0dh;换行int21hmovdl,0ah;回车int21hpopdxjmpskiplap;跳到月的输入ExitDos0:jmpExitDos退出skiplap:movsi,0;si清零repeatM:movah,1int21hcmpal,0dhjeEndMon;换行cmpal,20hjeEndMon;空格结束输入cmpal,1bhjeExitDos1;ESC退出程序cmpal,30hjbErr1;小于0报错cmpal,39hjaErr1subal,30hmovtemp[si],alincsijmprepeatMErr1:jmpErrExitDos1:jmpExitDosEndMon:movdi,si;把si的值传给dimovsi,0;再把si清零movbl,10;把10存入blNextMBit:moval,temp[si]movcount,disubcount,sideccountmovcx,countjcxzskipMlpmul:mulbllooplpmulskipM:addMonth,alincsicmpsi,dijneNextMBitcmpMonth,12jaErr1pushdxmovah,2movdl,0dh;回车int21hmovdl,0ah;换行int21hpopdxjmpskiplap1skiplap1:movsi,0repeatD:movah,1int21hcmpal,0dhjeEndDaycmpal,20hjeEndDaycmpal,1bhjeExitDoscmpal,30hjbErr2cmpal,39hjaErr2subal,30hmovtemp[si],al;把读入的数据转化为二进制保存到temp[si]中incsijmprepeatDErr2:jmpErr1EndDay:movdi,si;把si的值传给dimovsi,0;再把si清零movbl,10;把10存入blNextDBit:moval,temp[si]movcount,disubcount,sideccountmovcx,countjcxzskipDlpmul1:mulbllooplpmul1skipD:addDay,alincsicmpsi,dijneNextDBitcallGetrightday;调用子程序确定每个月的最大天数moval,[si];把存放器si中的值存入alcmpDay,al;用输入的day和al比拟jaErr2;假设day大于al那么报错pushdxmovah,2movdl,0dhint21hmovdl,0ahint21hpopdxpopdipopsipopcxpopaxretExitDos:movah,4chint21hGetYearMonthDayendpGetrightdayprocnear;此子程序用来判断年份是否为闰年pushbxpushcxPushdxmovsi,offsetwmovax,Yearmovcx,axmovdx,0movbx,4divbxmovb,dxcmpdx,0jnzlab1movax,cx;接着判断年份是否为100的倍数movbx,100divbxmovcc,dxcmpdx,0jnzlab2movax,cx;再判断是否为400的倍数movbx,400divbxmovd,dxcmpdx,0jzlab2lab1:;确定平年各月的天数cmpMonth,1jel1cmpMonth,3jel1cmpMonth,5jel1cmpMonth,7jel1cmpMonth,8jel1cmpMonth,10jel1cmpMonth,12jel1cmpMonth,4jel2cmpMonth,6jel2cmpMonth,9jel2cmpMonth,11jel2moval,28mov[si],aljmplab3l1:moval,31mov[si],aljmplab3l2:moval,30mov[si],aljmplab3lab2:cmpMonth,1jel1cmpMonth,3jel1cmpMonth,5jel1cmpMonth,7jel1cmpMonth,8jel1cmpMonth,10jel1cmpMonth,12jel1cmpMonth,4jel2cmpMonth,6jel2cmpMonth,9jel2cmpMonth,11jel2moval,29mov[si],aljmplab3lab3:popdxpopcxpopbxretGetrightdayendpdisplayprocnearcmpmonth,2jglab11addmonth,12subyear,1;小于等于2那么月加12,年再减1再计算lab11:xorax,axxorbx,bxxorcx,cxxordx,dxdecyearmovax,yearmovcx,axmovdx,0movbl,4divbxaddcx,axxorax,axxorbx,bxmovax,yearmovdx,0movbl,100divbxsubcx,axxorax,axxorbx,bxxordx,dxmovax,yearmovbx,400divbxaddcx,axxorax,axmovdx,0movbx,0incmonthmoval,monthmovbl,13mulblxorbx,bxmovbl,5divbxaddcx,axxorax,axxordx,dxcmpmonth,13janoaddd;当此时month大于13时,即月为1、2月时不用考虑加1cmpb,0jnenoadddcmpcc,0jneadddcmpd,0jeadddaddd:addday,1;day+1jmpdodnoaddd:jmpdod;day不用加一dod:moval,dayaddcx,ax;把day送个cxxorax,axxorbx,bxxordx,dxmovax,cxmovbl,7divbxmova,dx;把由公式的来的和除以7,取余cmpa,0jes0cmpa,1jes1cmpa,2jes2cmpa,3jes3cmpa,4jes4cmpa,5jes5leadx,weekstr6movah,9hint21hjmpexit1s0:leadx,weekstr0movah,9hint21hjmpexit1s1:leadx,weekstr1movah,9hint21hjmpexit1s2:leadx,weekstr2movah,9hint21hjmpexit1s3:leadx,weekstr3movah,9hint21hjmpexit1s4:leadx,weekstr4movah,9hint21hjmpexit1s5:leadx,weekstr5movah,9hint21hexit1:retdisplayendpcodeendsendstart六、调试

温馨提示

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

评论

0/150

提交评论