汇编判断闰年实习报告_第1页
汇编判断闰年实习报告_第2页
汇编判断闰年实习报告_第3页
汇编判断闰年实习报告_第4页
全文预览已结束

下载本文档

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

文档简介

1、1 实验题目编写一个判断闰年的汇编语言程序,判断某个年份是否是闰年,如果是,输出“yes!”;如果不是,则输出“No!”。2 实验目的1) 学习汇编基本程序结构(顺序、分支、循环)编程;2) 学习int 21h的01h,09h,0ah号功能;3) 学习如何用堆栈方法解决实际问题。3 实验步骤1) 根据题意,程序启动运行之后,用户在键盘上输入判断的年份,输出判断的结果。所以,程序主要结构应如下:接收在键盘上输入的年份字符串,存储在缓冲区year;将缓冲区中的年份转换成10进制数赋给变量yeard;判断变量yeard是否满足闰年的条件;输出判断的结果。2) 首先,定义数据段。数据段包括输入判断闰年

2、年份提示,判断是否结束程序的提示,输入字符串的缓冲区(其中定义了允许输入的最大字节数,实际输入的个数,实际字符串存储的缓冲区大小),闰年和非闰年的判断提示,缓冲区的偏移量,十进制形式存储的变量yeard;3) 定义堆栈段,由于判断闰年时会改变yeard的数值,所以定义200个字节的堆栈空间供程序使用;4) 接下来进入代码段的实现,从程序结构上看,用INT 21H的09号功能输出输入判断闰年年份的提示,用INT 21H的10号功能输入年份字符串,将字符串存储在缓冲区year中;5) 定义最大输入的字符个数为5(包括回车),用循环again1将year转化为十进制数存入变量yeard中;a) 设置

3、最大循环次数为4,初始字符串偏移量i为2,年份变量yeard为0;b) 首先将ax寄存器置0,然后将year的首地址赋给si,再将si加上偏移量i用寄存器间接寻址方式将si存储的字符赋给al;c) 将ax中存放的字符减去30h转化为十进制数值,把该数值加到年份变量yeard中,然后bx清0,将实际输入的个数存入bl中,将偏移量i与bx+1作比较(判断是否读到year的最后一个有效字符),是,跳出循环again1,否,继续下一步;d) 将ax中的数值乘以10再赋给yeard,然后i自增1,回到b。6) 判断yeard是否为闰年,是,输出“yes!”,否则输出“No!”;a) 将存有十进制形式的年

4、份ax的数值压入栈中,然后与4进行整除运算,判断其余数是否为0。是,则进行下一步;否,跳到e;b) 将栈中的数值出栈赋给寄存器ax,再ax的数值压入栈中,然后与100进行整除运算,判断其余数是否为0。是,则进行下一步;否,跳到d;c) 将栈中的数值出栈赋给寄存器ax,然后与100进行整除运算,判断其余数是否为0。是,则进行下一步;否,跳到e;d) 输出提示“yes!”;跳到步骤7;e) 输出提示“No!”;7) 输出提示“Continue?(n)”,若想结束程序则按N/n,否则按其他任意键。源程序代码 data segmentoutput db Input the year :,$ judge

5、 db 13,10,Continue?(n),13,10,$year db 5 ;允许输入的最大字节数 db ? ;实际输入的个数 db 5 dup(?) ,$ ;实际字符串存储的缓冲区 judge1 db yes!,$ judge2 db no!,$ i dw ? ;缓冲区的偏移量 yeard dw 0 ;10进制数形式的年份 ent db 13,10,$data ends stack segmentdb 200 dup(0)stack endscode segment assume cs:code,ss:stack,ds:datastart: mov ax,data ;初始段寄存器 mov

6、 ds,axcontinue : lea dx,output ;在屏幕上输出输入提示 mov ah,09h int 21h lea dx,year ;从键盘输入输入年份字符串 mov ah,0ah int 21h lea dx,ent ;换行 mov ah,09h int 21h mov cx,4 ;设置最大循环次数 mov i,2 ;取输入年份缓冲区字符串的偏移量 mov yeard,0 ;年份置0again1: mov ax,0 lea si,year add si,i mov al,si sub ax,30h ;将字符转化为10进制 add ax,yeard mov bx,0 mov b

7、l,year1 ;将实际输入的个数赋给bl寄存器 add bx,1 ;计算出需要处理数据的次数 cmp i,bx je over1 mov dx,0 mov bx,10 mul bx mov yeard,ax inc i loop again1over1: push ax ;将ax压栈 mov dx,0 mov bx,4 ;将年份yeard与4整除 div bx cmp dx,0 jne notleap pop ax ;将ax出栈 push ax ;将ax压栈 mov dx,0 mov bx,100 ;将年份yeard与100整除 div bx cmp dx,0 jne isleap pop

8、ax ;将ax出栈 mov dx,0 mov bx,400 ;将年份yeard与400整除 div bx cmp dx,0 jne notleap isleap : ;判断闰年 mov ah,09 lea dx,judge1 int 21h jmp over2 notleap : ;判断非闰年 mov ah,09 lea dx,judge2 int 21hover2: mov ah,09 ;判断是否继续 lea dx,judge int 21h mov ah,01 int 21h cmp al,n je outend cmp al,N je outendjmp continueoutend: mov ah,4ch int 21hcode ends end start4 实验结果5 心得体会1) 将复杂问题转化成若干个简单的问题,有助于问题的解决;2) 当程序出现语义错误时,多使用p指令检测程序,有利

温馨提示

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

评论

0/150

提交评论