汇编课程设计星期判断Word格式文档下载.docx

上传人:b****3 文档编号:13778449 上传时间:2022-10-13 格式:DOCX 页数:17 大小:41.52KB
下载 相关 举报
汇编课程设计星期判断Word格式文档下载.docx_第1页
第1页 / 共17页
汇编课程设计星期判断Word格式文档下载.docx_第2页
第2页 / 共17页
汇编课程设计星期判断Word格式文档下载.docx_第3页
第3页 / 共17页
汇编课程设计星期判断Word格式文档下载.docx_第4页
第4页 / 共17页
汇编课程设计星期判断Word格式文档下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

汇编课程设计星期判断Word格式文档下载.docx

《汇编课程设计星期判断Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《汇编课程设计星期判断Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。

汇编课程设计星期判断Word格式文档下载.docx

四、程序源代码

stacksSEGMENTstack

DB200DUP(0)

stacksENDS

datasegment

Yeardw0

Monthdb0

Daydb0

tempdb10dup(0)

countdw?

ErrMsgdb0dh,0ah,'

Inputwrong!

pleaseinputagain!

'

'

$'

str1db0dh,0ah,'

pleaseinputyearmonthday:

0dh,0ah,'

$'

str2db0dh,0ah,'

WhetherornottocontinueinquiriesYes/No'

weekstr0db'

TodayisSunday'

weekstr1db'

TodayisMonday'

weekstr2db'

TodayisTuesday'

weekstr3db'

TodayisWednesday'

weekstr4db'

TodayisThursday'

weekstr5db'

TodayisFriday'

weekstr6db'

TodayisSaturday'

adw?

bdw?

ccdw?

ddw?

wdb?

dataends;

定义了变量和信息

codesegment

assumecs:

code,ds:

data,ss:

stacks

start:

movax,data

movds,ax

leadx,str1;

提醒你输入年月日

movah,9h;

显示字符串

int21h

callGetYearMonthDay;

调用子程序输入正确的年月日

calldisplay;

调用子程序通过计算得出星期

sel:

leadx,str2;

提醒你选择退出程序还是继续

movah,9h

int21h

movah,1;

输入你的选择(键盘输入并回显)

cmpal,'

Y'

jestart

y'

;

输入y或Y继续程序

N'

jeexit

n'

输入n或N退出程序

jmpsel

exit:

movah,4ch

int21h;

退出

;

主程序

GetYearMonthDayprocnear;

子程序输入正确的年月日

pushax

pushcx

pushsi

pushdi;

压栈

inputagain:

movYear,0

movMonth,0

movDay,0

movsi,0;

把年月日重新归零

repeatY:

输入年

cmpal,0dh;

换行

jeEndY;

回车结束年的输入

cmpal,20h;

判断是否是是空格键SP

空格结束年的输入

cmpal,1bh;

判断是否是退出ESC

jeExitDos0;

退出键则退出程序

cmpal,30h;

和0比较

jbErr;

小于0转到错误提示

cmpal,39h;

和9比较

jaErr;

大于9转到错误提示

subal,30h;

把读入的数据转化为二进制保存到temp[si]中

movtemp[si],al

incsi;

si加1

jmprepeatY

Err:

;

出错调用

leadx,ErrMsg;

提示错误

movah,2;

显示输出

movdl,0dh

movdl,0ah

回车

jmpinputagain;

跳回到inputagain重新输入年月日

EndY:

movbx,10;

把10存入bx

movdi,si;

把si的值传给di

再把si清零

NextYBit:

movah,0

moval,temp[si];

再把存在temp[si]中的数据存入al

movcount,di;

把di中的转到count

subcount,si;

count=count-si

deccount;

count-1

movcx,count;

把自减后的count存入cx

jcxzskipY;

cx为0转移

lopmul:

mulbx;

*10,主要实现把年按千位,百位,十位,各位存放

looplopmul;

cx-1循环

skipY:

addYear,ax;

把ax中存入的年的值赋给year

si自加1

cmpsi,di;

比较si和di

jneNextYBit;

不相等转移

主要实现把年按千位,百位,十位,各位存放

pushdx

movah,2

movdl,0dh;

movdl,0ah;

popdx

jmpskiplap;

跳到月的输入

ExitDos0:

jmpExitDos;

skiplap:

si清零

repeatM:

输入月数

cmpal,0dh

jeEndMon;

cmpal,20h

空格结束输入

cmpal,1bh

jeExitDos1;

ESC退出程序

cmpal,30h

jbErr1;

小于0报错

cmpal,39h

jaErr1;

大于9报错

转为二进制存贮

movtemp[si],al;

jmprepeat;

重新输入下一个字符

Err1:

jmpErr

ExitDos1:

jmpExitDos

EndMon:

movbl,10;

把10存入bl

NextMBit:

moval,temp[si]

movcount,di

subcount,si

deccount

movcx,count

jcxzskipM

lpmul:

mulbl

looplpmul

skipM:

addMonth,al

incsi

cmpsi,di

jneNextMBit

cmpMonth,12;

大于12报错

把月按十位,各位存贮

jmpskiplap1

skiplap1:

movsi,0

repeatD:

movah,1

jeEndDay;

jeExitDos;

jbErr2;

jaErr2

jmprepeatD;

Err2:

jmpErr1

EndDay:

NextDBit:

jcxzskipD

lpmul1:

looplpmul1

skipD:

addDay,al

jneNextDBit

callGetrightday;

调用子程序确定每个月的最大天数

moval,[si];

把寄存器si中的值存入al

cmpDay,al;

用输入的day和al比较

jaErr2;

若day大于al则报错

把日按十位,各位存贮

popdi

popsi

popcx

popax

ret

ExitDos:

GetYearMonthDayendp

************闰年**********

Getrightdayprocnear;

此子程序用来判断年份是否为闰年

pushbx;

保存寄存器状态

movsi,offsetw

movax,Year

movcx,ax;

把转换后的年份的数值存入cx

movdx,0;

计算年份是否为4的整数倍

movbx,4

divbx

movb,dx;

把此刻的余数赋给b,便于后面天数计算

cmpdx,0

jnzlab1;

不能被4整除,不为闰年

movax,cx;

接着判断年份是否为100的倍数

movbx,100

movcc,dx;

把此刻的余数赋给cc,便于后面天数计算

jnzlab2;

不为100的倍数,则为闰年

再判断是否为400的倍数

movbx,400

mov

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 从业资格考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1