《汇编语言》课程设计报告判断闰年程序_第1页
《汇编语言》课程设计报告判断闰年程序_第2页
《汇编语言》课程设计报告判断闰年程序_第3页
《汇编语言》课程设计报告判断闰年程序_第4页
免费预览已结束,剩余9页可下载查看

下载本文档

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

文档简介

1、.汇编语言课程设计报告题目:判断闰年程序院 (系):计算机与信息工程学院班级:姓名:学号:指导教师:Word 资料.1 设计主要任务通过完成闰年判别程序设计掌握字符输入及、调试过程。1.1 设计任务与目标软件所实现的任务与目标主要包括:( 1)由键盘输入任意年份, 判断输入年份是否在限制区间 2000-9999 内;( 2)若程序判别输入年份为闰年,显示 ?,不是闰年显示;( 3)根据要求确定解决问题的编程方法;( 4)画出程序框图、设计源程序;( 5)在计算机上汇编、链接所设计的程序;( 6)按照要求调试程序,记录程序运行结果;( 7)写出设计总结报告。2 设计方案判断某年是否为闰年具体算法

2、为如果该年份的数值正整数若能被400 整除,或者不能被 100 整除,却能被 4 整除,则该数值代表的年份为闰年。判断结果的显示符号可用值来实现。流程图如下:Word 资料.开始显示提示信息输入年份到BUF 缓冲区CX=BUF+1,即输入年份的实际长度将年份数值转换为ASCII 字符判断输入范围判断是否为闰年输出范围出错CF=1显示是闰年的信息显示非闰年信息结束Word 资料.4 子程序设计4.1输入判断子程序该模块是对输入的年份的范围的判断, 若是输入不在 2000-9999 之内,则显示错误 Error ,若是输入在范围内,则进行下面的操作。4.2 数字转换子程序将数字字符串转换成数字,以

3、便进行下面的程序操作。4.3判断闰年子程序判断输入的年份是否为闰年,若是则输出 ?,若不是则输出, 然后退出。5 调试程序调试主要使用宏汇编程序MASM.EXE、连接程序 LINK.EXE、Word 资料.系统操作界面当输出年份时显示结果当输入为闰年时显示笑脸并返回操作界面:Word 资料.6 设计总结通过这几天的汇编课程设计, 基本掌握闰年判别程序设计, 首先是根据题目要求确定思路, 然后根据思路按照题目要求编写相应汇编程序, 最后用软件调试结果是否正确。在此次课程设计中, 虽然课本上也讲过年份的判别, 但是比较分散, 所以刚开始设计时思路不是太清, 通过查阅相关资料,清楚了程序设计的基本框

4、架,进而能编写出相应程序, 设计中又一个难题是最后屏幕显示的问题, 通过查阅相应 ASCII 值,使最后显示出结果。一周的课程设计让我收获颇多,虽然调试中遇到不少问题,但通过调试明白程序中存在的问题并改正。 通过本次实验,以后的学习奠定了良好的基础,是对自己综合能力的一种提高。7 程序清单data segmentinfon db 0dh,0ah,' input a year: $'E db 0dh,0ah,'Error! $'w dw 0;保存年份的数值 , 因年份是字符串 , 需要转换数buf db 8; 定义输入缓冲区db ?db 8 dup(?)data

5、endsstack segment stackdb 200 dup(0)stack endscode segmentassume ds:data,ss:stack,cs:codestart:mov ax,datamov ds,axWord 资料.lea dx,infon;在屏幕上显示提示信息mov ah,9; 显示字符串int 21hlea dx,buf;从键盘输入年份字符串mov ah,0Ah;0AH功能调用从键盘接受字符串到内存的输入缓存区int 21hmov cl, buf+1;把输入的字符的个数保存在cl 中lea di,buf+2;把从键盘输入字符的首地址存放到di中push axa

6、0:mov al,dicmp al,0dhjza1cmp al,'9'jg a3cmp al,'2'jl a3inc dia00:mov al,dicmp al,0dhjza1cmp al,'9'jg a3cmp al,'0'jl a3inc dijmp a00Word 资料.a1:pop axcall datacate;调用 datacate子程序call ifyears;调用 ifyears子程序jc a2;如果进位则跳转sub AX,AX; 输出不是闰年 , 显示三角形push AXmov AH,0FHint 10hmov

7、AH,0mov AL,2int 10hmov CX,1mov DX,0MOV AH,2int 10Hmov AL,30mov AH,0AHint 10Hmov ah,9int 21hjmp exita2:sub AX,AX;输出是闰年显示笑脸push AXmov AH,0FHint 10hmov AH,0mov AL,2int 10hmov CX,1Word 资料.mov DX,0MOV AH,2int 10Hmov AL,2mov AH,0AHint 10Hmov ah,9int 21hcall exita3:lea dx,emov ah,9int 21hexit:mov ah,0int 1

8、6hmov ah,4ch;返回操作系统int 21hdatacate proc near;用于把表示年份的字符串转换为数值push cx;dec cx;让 cx 寄存器自减 1leasi,buf+2;把字符串的首地址保存在源地址寄存器SI中让 si 指向字符串的最低位p1:inc siloop p1pop cxmov dh,30hmov bl,10mov ax,1p2: push axsub byte ptr si,dh;ASCII码字符 , 减去 30H 后转换十六进制数Word 资料.mul byte ptr si ;计算 ax 乘以字符数字add w,ax;把计算结果累加,并保存在w中p

9、op ax;出栈操作,去除上一次操作后的倍数mul bl;乘以 bl ,计算当前的倍数dec si;修改源地址寄存器si 的值,使得 si 指向下一个字符(即高位)loop p2;循环直到所有字符处理完毕(ret;子程序返回指令datacate endpifyears proc near;此子程序用来判断年份是否为闰年push bxpush cxpush dxmov ax,w;把转换后的年份的数值存入 AXmov cx,axmov dx,0;将 dx 清零mov bx,4;把 4 存放到寄存器 bx 中(除数)div bx;除法指令cmp dx,0;将 dx 的余数与 0 进行比较,看似否整除jnz lab1;若不相等跳转mov ax,cx;判断年份是否位 400 的整数倍mov bx,100;将 100 赋给 bx 寄存器 , 做 div的源操作数mov dx,0div bxcmp dx,0; 将 dx 中的余数与 0 比较,看似否整除jnz lab2mov ax,cx; 判断年份是否位400 的整数倍mov bx,400Word 资

温馨提示

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

评论

0/150

提交评论