资源描述:
《北邮微机原理软件实验报告.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、信息与通信工程学院微机原理软件实验报告班级:姓名:班内序号:学号:日期:年11月实验二分支,循环程序设计一.实验目的:1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单的DOS功能调用.二.实验内容:1.安排一个数据区,内存有若干个正数,负数和零.每类数的个数都不超过9.2.编写一个程序统计数据区中正数,负数和零的个数.3.将统计结果在屏幕上显示.三.预习题:1.十进制数0--9所对应的ASCII码是什么?如何将十进制数0--9在屏幕上显示出来?答:十进制数0-9对应的ASCII码的30H~39H。将十进制数0~9显示在屏幕上,要用二进制数0~9后面分别加上
2、30H。2.如何检验一个数为正,为负或为零?你能举出多少种不同的方法?答:可以将这个数跟零进行比较,利用指令CMP和JZ等进行判定;或者对该有符号数的第一位进行判定,判断是不是一,若为1,则是负数,反之再判定是0还是正数。四.选作题:统计出正奇数,正偶数,负奇数,负偶数以及零的个数.五.实验过程1.流程图开始定义各段并初始化获取数据长度工作指针指向当前数字和0相比小于0大于0等于0除以20个数加一除以2判余数判定余数为0不为0为0不为0负偶数加1负奇数加1正偶数加1正奇数加1统计结果输出结果结束2.源代码DATASEGMENTBUFFDW11,12,0,-59,85,78,15,0,-7
3、8,0,74,-45,47,0,12,-79;自定义需要判定的一组数字COUNTEQU$-BUFF;得到数据长度PLUSODB0PLUSJDB0ZERODB0MINUSODB0MINUSJDB0;分别用来存几种要求的数字STRING1DB'PLUSO,PLUSJ,ZERO,MINUSO,MINUSJ:','$'STRINGDB0,'',0,'',0,'',0,'',0,'','$';用来显示结果的字符串DATAENDSSTACKSEGMENTSTACK'STACK';定义堆栈段DB100DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:
4、DATA,SS:STACKBEGINPROCFARPUSHDSXORAX,AXPUSHAX;保证返回DOSMOVAX,DATAMOVDS,AXMOVCX,COUNTSHRCX,1;相当于对CX中的数除以2LEABX,BUFF;得到BUFF的偏移地址AGAIN:CMPWORDPTR[BX],0;将工作指针中的数与零进行比较JGEPLUJMPMINUSPLU:JZZER;判定为0MOVAX,WORDPTR[BX]MOVDL,2DIVDL;将结果除以2CMPAH,0JNZPLUJINCPLUSO;正偶数加一JMPNEXTPLUJ:INCPLUSJ;正奇数加一JMPNEXTMINUS:MOVAX
5、,WORDPTR[BX]MOVDL,2IDIVDLCMPAH,0JNZMINJINCMINUSO;负偶数加一JMPNEXTMINJ:INCMINUSJ;负奇数加一JMPNEXTZER:INCZERO;0加一NEXT:INCBXINCBX;工作指针加2LOOPAGAINMOVBL,PLUSOADDBL,30H;将统计的数字加上30h变为ASCii码MOVPLUSO,BLMOVBL,PLUSJADDBL,30HMOVPLUSJ,BLMOVBL,ZEROADDBL,30HMOVZERO,BLMOVBL,MINUSOADDBL,30HMOVMINUSO,BLMOVBL,MINUSJADDBL,3
6、0HMOVMINUSJ,BLLEABX,STRING;将每个变量统一加到字符串对应位置MOVCL,PLUSOMOV[BX],CLMOVCL,PLUSJMOV[BX+2],CLMOVCL,ZEROMOV[BX+4],CLMOVCL,MINUSOMOV[BX+6],CLMOVCL,MINUSJMOV[BX+8],CLMOVAH,09H;打印字符串MOVDX,SEGSTRING1MOVDS,DXMOVDX,OFFSETSTRING1INT21HMOVAH,09H;打印结果MOVDX,SEGSTRINGMOVDS,DXMOVDX,OFFSETSTRINGINT21HRETBEGINENDPCOD
7、EENDSENDBEGIN3.实验结果分析实验区待统计的数为:11,12,0,-59,85,78,15,0,-78,0,74,-45,47,0,12,-79经过上述代码的编译链接执行后可以得到的结果如下图所示:经过手动检查发现符合实验的预期结果,则可验证实验的正确性。六.实验总结这道题实则是比较基础简单的一道,其核心在于循环结构和对数字判定的比较方法。对于刚开始编写汇编语言的我而言,还是遇到了不小的挑战。由于汇编语言它不同于C++的