汇编判断闰年课程设计报告.docx

上传人:b****1 文档编号:11082801 上传时间:2023-05-29 格式:DOCX 页数:9 大小:77.76KB
下载 相关 举报
汇编判断闰年课程设计报告.docx_第1页
第1页 / 共9页
汇编判断闰年课程设计报告.docx_第2页
第2页 / 共9页
汇编判断闰年课程设计报告.docx_第3页
第3页 / 共9页
汇编判断闰年课程设计报告.docx_第4页
第4页 / 共9页
汇编判断闰年课程设计报告.docx_第5页
第5页 / 共9页
汇编判断闰年课程设计报告.docx_第6页
第6页 / 共9页
汇编判断闰年课程设计报告.docx_第7页
第7页 / 共9页
汇编判断闰年课程设计报告.docx_第8页
第8页 / 共9页
汇编判断闰年课程设计报告.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

汇编判断闰年课程设计报告.docx

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

汇编判断闰年课程设计报告.docx

汇编判断闰年课程设计报告

闰年判别程序设计

一、设计目的

通过完成闰年判别程序设计掌握字符输入及特殊符号显示方面的编程、调试过程。

二、设计要求

1、程序要求

(1)由键盘输入任意年份,限制范围:

2000-9999;

(2)若程序判别输入年份为闰年,显示☆,否则显示△;

2、设计内容

(1)根据要求确定解决问题的编程方法;

(2)画出程序框图、设计源程序;

(3)在计算机上汇编、链接所设计的程序;

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

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

三、总体设计思路

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

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

 

(1)程序框图

(2)程序源代码

a.各个模块

主模块:

显示提示输入年份以及输入的内容和最后输出的判断

子模块:

①判断输入:

该模块是对输入的年份的范围的判断,若是错误则显示错误Error,正确则进行下面的操作。

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

③判断闰年:

判断输入的年份是否为闰年,若是则输出笑脸,若不是则输出三角形,然后退出。

b.程序代码

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功能调用从键盘接受字符串到内存的输入缓存区

int21h

movcl,buf+1 ;把输入的字符的个数保存在cl中

leadi,buf+2 ;把从键盘输入字符的首地址存放到di中

push ax

a0:

moval,[di]

cmpal,0dh

jz a1

cmpal,'9'

jga3

cmpal,'2'

jl a3

inc di

a00:

moval,[di]

cmpal,0dh

jz a1

cmpal,'9'

jga3

cmpal,'0'

jl a3

inc di

jmp a00

a1:

popax

calldatacate  ;调用datacate子程序

callifyears   ;调用ifyears子程序

jca2     ;如果进位则跳转

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

pushAX

movAH,0FH

int10h

movAH,0

movAL,2

int10h

movCX,1

movDX,0

MOVAH,2

int10H

movAL,30

movAH,0AH  

int10H

movah,9

int21h

jmpexit

a2:

 subAX,AX   ;输出是闰年显示笑脸

pushAX

movAH,0FH

int10h

movAH,0

movAL,2

int10h

movCX,1

movDX,0

MOVAH,2

int10H

movAL,2

movAH,0AH  

int10H

movah,9

int21h

callexit

a3:

 leadx,e

movah,9

int21h

exit:

 mov ah,0

int16h

movah,4ch  ;返回操作系统

int21h

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

pushcx;

deccx    ;让cx寄存器自减1

leasi,buf+2  ;把字符串的首地址保存在源地址寄存器SI中让si指向字符串的最低位

p1:

 incsi

loopp1

popcx    

movdh,30h

movbl,10

movax,1

p2:

 pushax

sub byteptr[si],dh;ASCII码字符,减去30H后转换十六进制数

mul byteptr[si]   ;计算ax乘以字符数字

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

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

mulbl        ;乘以bl,计算当前的倍数

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

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

ret          ;子程序返回指令

datacateendp

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

push bx

push cx

push dx

mov ax,w      ;把转换后的年份的数值存入AX

mov cx,ax

mov 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,0

div bx

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

jnz lab2

mov ax,cx     ;判断年份是否位400的整数倍

mov bx,400

mov dx,0

div bx

cmp dx,0

jz lab2

lab1:

clc         ;清除进位标志,即非闰年

jmplab3

lab2:

stc         ;设置进位标志,即闰年

lab3:

pop dx

pop cx

pop bx

ret         ;子程序返回指令

ifyearsendp

codeends

endstart

(3)程序调试结果

a.操作系统界面

b.当输出年份时显示结果

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

当输入不是闰年时输出三角形并返回界面:

 

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2