北邮微原软件实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

微原软件实验报告班级:2009211119班学号:09210550班内序号:07姓名:胡易实验二分支,循环程序设计一.实验目的:1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单的DOS功能调用.二.实验内容:1.安排一个数据区,内存有若干个正数,负数和零.每类数的个数都不超过9.2.编写一个程序统计数据区中正数,负数和零的个数.3.将统计结果在屏幕上显示.三.程序流程图开始BUFF偏移地址送BX[BX]是否大于等于0ah=ah+1(小于0个数)[BX]是否大于0?DL=DL+1(大于0个数)否dh=dh+1(等于0个数)否BX值加1判断完所有的数?否是显示结果,结束四.源程序datasegmentbuffdw22,11,33,0,55,-11,-32,-45,-56,123,-121countequ$-buffplusdb?;大于0的个数zerodb?;等于0的个数minusdb?;小于0的个数string1db'zhengshu:','$'string2db'fushu:','$'string3db'0:','$'dataendsstacksegmentstack'stack'db100dup(?)stackendscodesegmentassumecs:code,ds:data,ss:stackstart:movax,datamovds,axmovcx,countshrcx,1movdx,0movah,0movbx,offsetbuffagain:cmpwordptr[bx],0jgeplu;判断是否大于等于0,是就跳转incah;小于0的个数加1jmpnextplu:jzzer;判断是否等于0.是就跳转incdl;大于0的个数加1jmpnextzer:incdh;等于0的个数加1next:incbxincbx;修改指针地址loopagainmovplus,dl;将大于0,小于0,等入0个数存入movzero,dhmovminus,ahcallshow1;显示最终结果callshow2callshow3movax,4c00hint21hshow1procnear;显示大于0的数pushdxmovah,09hmovdx,segstring1movds,dxmovdx,offsetstring1int21hmoval,plusaddal,'0'-0hmovah,02hmovdl,alint21hmovdl,0ahint21hpopdxretshow1endpshow2procnear;显示小于0的数pushdxmovah,09hmovdx,segstring2movds,dxmovdx,offsetstring2int21hmoval,minusaddal,'0'-0hmovah,02hmovdl,alint21hmovdl,0ahint21hpopdxretshow2endpshow3procnear;显示等于0的数pushdxmovah,09hmovdx,segstring3movds,dxmovdx,offsetstring3int21hmoval,zeroaddal,'0'-0hmovah,02hmovdl,alint21hmovdl,0ahint21hpopdxretshow3endpcodeendsendstart五.程序运行结果六.预习题1.十进制数0--9所对应的ASCII码是什么?如何将十进制数0--9在屏幕上显示出来?0-9的ascii码为,30h,31h,32h,34h,35h,36h,37h,38h,39h,将要显示的数加上30h,得到该数的ascii码,再利用DOS功能调用显示单个字符2.如何检验一个数为正,为负或为零?你能举出多少种不同的方法?利用cmp指令,利用TEST指令,将该数与0相减,观察标志位。检查最高位,为0是正数,为1时再检查其他位判断是负数或0七.实验心得与体会这次实验我主要练习了基本的分支结构程序的编写,以及简单的DOS功能调用,并利用debug功能查找程序中的逻辑错误,由于程序比较简单,所以没有花费太多时间,但仍然让我对汇编语言有了一个新的认识实验三代码转换程序设计一.实验目的:1.掌握几种最基本的代码转换方法;2.运用子程序进行程序设计.二.实验内容:1.从键盘上输入若干两位十进制数,寻找其中的最小值,然后在屏幕上显示出来.2.两个十进制数之间的分隔符,输入结束标志自定,但要在报告中说明.3.对输入要有检错措施,以防止非法字符输入,并有适当的提示.4.将整个程序分解为若干模块,分别用子程序实现.在报告中要给出模块层次图.三.程序流程图模块层次图初始化调用get1子程序,取第一个数调用get2子程序,取第二个数调用get3子程序取第三个字符判断字符是什么?compare子程序数字其他回车显示结果四.源程序datasegmentminhdb9minldb9number1db100dup(?)number2db100dup(?)errordb'inputerror,pleaesinputagain',0dh,0ah,'$'welcomedb'pleasenumber:',0dh,0ah,'$'resultdb'theminis:',0ah,'$'dataendsstacksegmentstack'stack'db100dup(?)stackendscodesegmentassumecs:code,ds:data,ss:stackstart:movbx,0movax,datamovds,axmovsi,offsetnumber1movdi,offsetnumber2callwelcloop1:callget1cmpbl,01jzstartloop2:mov[si],alcallget2cmpbl,02jzstartcallcompareincsiincdicallget3cmpal,0dhjzovercmpal,'0'jbstartcmpal,'9'jbloop2jmpstartover:movah,02hmovdl,0dhint21hmovbx,offsetminhmovah,[bx]addah,'0'-0mov[bx],ahmovbx,offsetminlmoval,[bx]addal,'0'-0mov[bx],almovah,09hmovdx,segresultmovds,dxmovdx,offsetresultint21hmovah,02hmovbx,offsetminhmovdl,[bx]int21h;显示十位数movbx,offsetminlmovdl,[bx]int21h;显示个位数movax,4c00hint21hcompareprocnearpushaxpushbxmovah,[si]moval,[di]subah,'0'-0subal,'0'-0movbx,offsetminhcmpah,[bx]jbe1;十位小于现存数,直接将AH,AL,赋给minh,minljae2;大于现存数,返回主程序movbx,offsetminlcmpal,[bx];比较个位,大于就直接跳到返回主程序jae2e1:movbx,offsetminhmov[bx],ahmovbx,offsetminlmov[bx],ale2:popaxpopbxretcompareendpwelcprocnearmovah,09hmovdx,segwelcomemovds,dxmovdx,offsetwelcomeint21hretwelcendpget1procnear;取第一个数字movah,01hint21hcmpal,'0'jbeerror1cmpal,'9'jaeerror1jmpendpperror1:movbl,01hmovah,09hmovdx,segerrormovds,dxmovdx,offseterrorint21hendpp:retget1endpget2procnear;取第二个数字movah,01hint21hcmpal,'0'jberror2cmpal,'9'jaeerror2movdi],almovah,02hmovdl,','int21hjmpendpp2error2:movbl,02hmovah,09hmovdx,segerrormovds,dxmovdx,offseterrorint21hendpp2:retget2endpget3procnear;判断结束或空格movah,01hint21hretcodeendsendstart程序分析:在该实验中,我总共定义了4个子程序,get1用于输入第一个字符,在输入后检测输入的是否是0-9的数,不是则报错重新输入,是则存储到相应内存中,get2用于输入第二个字符,检测如果是数字的话则存入相应内存,并且输出“,”表示一个两位十进制数输入完毕,再调用get3函数,若为数字则继续调用get2输入数字,若为回车则进入最后输出结果,若为其他字符则报错重新输入。输入完毕后按回车键显示最终结果五.程序运行结果六.预习题1如何将输入的两个字符(0--9)变为十进制或二进制数?将输入的字符减去30H,可得到十进制数2如何将选出的最小值(二进制或十进制)变为ASCII码再进行显示?先定义一个字节的数据,分为十位和低位,每次将输入的数十位和已存的十位相比较,若小于则将输入的字符和已存的交换,大于则不交换,等于时比较个位,若小于则交换,最后将十位和个位分别加上30H变为相应的ascii码输出3你觉得采用二进制运算还是十进制运算更适合于这个实验?十进制七.实验心得与体会这次的实验相较于上次复杂了很多,光编写代码的时间就用了2个小时,期间不断的思考如何输入,如何储存,如何比较,最后又参考了同学的代码才写完,写完后一编译发现又有很多错,于是乎不断的在debug环境下用t命令G命令D命令调试,查错,找到一个错改过来再重新编译继续debug,这个过程一共持续了3个小时才最终将所有的逻辑错误改好,也终于输出了正确的结果。这次实验主要是考察了进制转换的相关知识,认识到了输入的ascii码和数值之间的关系,也学会了DOS功能调用。在该程序中共定义了4个子程序,在写完后觉得还有很多地方也可以定义子程序完成,但是由于急于求成就没有再花心思,导致程序在最后有些冗长,这些是以后需要避免的,总的来说,这次实验是第一次遇到比较多的挑战,但自己都慢慢的解决了,很有成就感。实验四子程序设计一.实验目的:1.进一步掌握子程序设计方法;2.进一步掌握基本的DOS功能调用.二.实验内容:1.从键盘上输入某班学生的某科目成绩.输入按学生的学号由小到大的顺序输入.2.统计检查每个学生的名次.3.将统计结果在屏幕上显示.4.为便于观察,输入学生数目不宜太多,以不超过一屏为宜.输出应便于阅读.尽可能考虑美观.5.输入要有检错手段.三.程序流程图开始模块层次:调用get1子程序,取第一个数调用get2子程序,取第二个数调用get3子程序取第三个字符判断字符是什么?compare子程序数字其他回车显示结果调用排序子程序四.源程序datasegmentminhdb9minldb9number1db100dup(?);存储十位number2db100dup(?);存储个位errordb'inputerror,pleaesinputagain',0dh,0ah,'$'welcomedb'pleaseinputnumber:',0dh,0ah,'$'resultdb'theministis:',0ah,'$'dataendsstacksegmentstack'stack'db100dup(?)stackendscodesegmentassumecs:code,ds:data,ss:stackstart:movbx,0movcx,0movax,datamovds,axmovsi,offsetnumber1movdi,offsetnumber2callwelcl

1 / 31
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功