《汇编语言》课程设计报告判断闰年程序Word下载.docx

上传人:b****5 文档编号:15786915 上传时间:2022-11-16 格式:DOCX 页数:9 大小:120.02KB
下载 相关 举报
《汇编语言》课程设计报告判断闰年程序Word下载.docx_第1页
第1页 / 共9页
《汇编语言》课程设计报告判断闰年程序Word下载.docx_第2页
第2页 / 共9页
《汇编语言》课程设计报告判断闰年程序Word下载.docx_第3页
第3页 / 共9页
《汇编语言》课程设计报告判断闰年程序Word下载.docx_第4页
第4页 / 共9页
《汇编语言》课程设计报告判断闰年程序Word下载.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

《汇编语言》课程设计报告判断闰年程序Word下载.docx

《《汇编语言》课程设计报告判断闰年程序Word下载.docx》由会员分享,可在线阅读,更多相关《《汇编语言》课程设计报告判断闰年程序Word下载.docx(9页珍藏版)》请在冰豆网上搜索。

《汇编语言》课程设计报告判断闰年程序Word下载.docx

(6)按照要求调试程序,记录程序运行结果;

(7)写出设计总结报告。

2设计方案

判断某年是否为闰年具体算法为如果该年份的数值正整数若能被400整除,或者不能被100整除,却能被4整除,则该数值代表的年份为闰年。

判断结果的显示符号可用ASCII值来实现。

流程图如下:

4子程序设计

4.1输入判断子程序

该模块是对输入的年份的范围的判断,若是输入不在2000-9999之内,则显示错误Error,若是输入在范围内,则进行下面的操作。

4.2数字转换子程序

将数字字符串转换成数字,以便进行下面的程序操作。

4.3判断闰年子程序

判断输入的年份是否为闰年,若是则输出☺,若不是则输出△,然后退出。

5调试

程序调试主要使用宏汇编程序MASM.EXE、连接程序LINK.EXE、

系统操作界面当输出年份时显示结果

当输入为闰年时显示笑脸并返回操作界面:

6设计总结

通过这几天的汇编课程设计,基本掌握闰年判别程序设计,首先是根据题目要求确定思路,然后根据思路按照题目要求编写相应汇编程序,最后用软件调试结果是否正确。

在此次课程设计中,虽然课本上也讲过年份的判别,但是比较分散,所以刚开始设计时思路不是太清,通过查阅相关资料,清楚了程序设计的基本框架,进而能编写出相应程序,设计中又一个难题是最后屏幕显示的问题,通过查阅相应ASCII值,使最后显示出结果。

一周的课程设计让我收获颇多,虽然调试中遇到不少问题,但通过调试明白程序中存在的问题并改正。

通过本次实验,以后的学习奠定了良好的基础,是对自己综合能力的一种提高。

7程序清单

datasegment

infondb0dh,0ah,'

inputayear:

$'

Edb0dh,0ah,'

Error!

wdw0;

保存年份的数值,因年份是字符串,需要转换数

bufdb8;

定义输入缓冲区

db?

db8dup(?

dataends

stacksegmentstack

db200dup(0)

stackends

codesegment

assumeds:

data,ss:

stack,cs:

code

start:

movax,data

movds,ax

leadx,infon;

在屏幕上显示提示信息

movah,9;

显示字符串

int21h

leadx,buf;

从键盘输入年份字符串

movah,0Ah;

0AH功能调用从键盘接受字符串到内存的输入缓存区

movcl,buf+1;

把输入的字符的个数保存在cl中

leadi,buf+2;

把从键盘输入字符的首地址存放到di中

pushax

a0:

moval,[di]

cmpal,0dh

jza1

cmpal,'

9'

jga3

2'

jla3

incdi

a00:

0'

incdi

jmpa00

a1:

popax

calldatacate;

调用datacate子程序

callifyears;

调用ifyears子程序

jca2;

如果进位则跳转

subAX,AX;

输出不是闰年,显示三角形

pushAX

movAH,0FH

int10h

movAH,0

movAL,2

movCX,1

movDX,0

MOVAH,2

int10H

movAL,30

movAH,0AH

movah,9

jmpexit

a2:

subAX,AX;

输出是闰年显示笑脸

movAL,2

callexit

a3:

leadx,e

exit:

movah,0

int16h

movah,4ch;

返回操作系统

datacateprocnear;

用于把表示年份的字符串转换为数值

pushcx;

deccx;

让cx寄存器自减1

leasi,buf+2;

把字符串的首地址保存在源地址寄存器SI中让si指向字符串的最低位

p1:

incsi

loopp1

popcx

movdh,30h

movbl,10

movax,1

p2:

pushax

subbyteptr[si],dh;

ASCII码字符,减去30H后转换十六进制数

mulbyteptr[si];

计算ax乘以字符数字

addw,ax;

把计算结果累加,并保存在w中

popax;

出栈操作,去除上一次操作后的倍数

mulbl;

乘以bl,计算当前的倍数

decsi;

修改源地址寄存器si的值,使得si指向下一个字符(即高位)

loopp2;

循环直到所有字符处理完毕(

ret;

子程序返回指令

datacateendp

ifyearsprocnear;

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

pushbx

pushcx

pushdx

movax,w;

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

movcx,ax

movdx,0;

将dx清零

movbx,4;

把4存放到寄存器bx中(除数)

divbx;

除法指令

cmpdx,0;

将dx的余数与0进行比较,看似否整除

jnzlab1;

若不相等跳转

movax,cx;

判断年份是否位400的整数倍

movbx,100;

将100赋给bx寄存器,做div的源操作数

movdx,0

divbx

cmpdx,0;

将dx中的余数与0比较,看似否整除

jnzlab2

movax,cx;

movbx,400

cmpdx,0

jzlab2

lab1:

clc;

清除进位标志,即非闰年

jmplab3

lab2:

stc;

设置进位标志,即闰年

lab3:

popdx

popcx

popbx

ret;

ifyearsendp

codeends

endstart

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

当前位置:首页 > 高中教育 > 理化生

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

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