资源描述:
《子程序设计和调用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、昆明理工大学信息工程与自动化学院学生实验报告(2011—2012学年第一学期)课程名称:微型计算机原理与应用开课实验室:信自楼1112011年12月1日年级、专业、班生医091班学号姓名成绩实验项目名称子程序设计和调用指导教师韩晓东教师评语教师签名:2011年12月日一、实验目的1)学习子程序的定义和调用方法。2)掌握子程序设计、编制及调试。二、实验内容编写计算N个偶数之和的子程序和接收键入的N及将结果送显示器的主程序。三、实验设计思路子程序设计是使程序模块化的一种重要手段。当设计一个比较复杂的程序时,根据程序要实现的若干主
2、要功能及各功能要调用的公用部分,当程序划分为若干个相对独立的模块。确定各模块调用关系和参数传递方式,为各模块分配不同的名字(入口地址),然后把每个模块都编成子程序,最后将这些模块根据调用关系连成一个整体。这样既便于分工合作,又可避免重复劳动,节省存储空间,提高程序设计的效率和质量,使程序整洁,清晰,易读,便于修改和扩充。四、实验设备PC机一台五、实验1.按要求编写程序,关键程序写上注释,以便读懂。源程序如下:stacksegmentstack'stack';定义堆栈段dw32dup(?);堆栈段有32字(64字节)空间sta
3、ckends;堆栈段结束datasegment;定义数据段inputdb'pleaseinputN:','$';定义字符串inputndb6,0,6dup(?);定义变量数据区nobfdb9dup(?)dataends;数据段结束codesegment;定义代码段beginprocfar;定义一个过程beginassumess:stack,cs:code,ds:data;伪指令assume将段寄存器与段间的对应关系告诉汇编程序pushdssubax,ax;为通过过程返回DOS作准备pushaxmovax,data;建立DS段
4、地址movds,ax;movdx,offsetinput;9号功能调用,显示器显示“pleaseinputN:”movah,9int21h;movdx,offsetn;10号功能调用,键入并显示数据nmovah,10int21h;movsi,offsetn+2movcl,n+1movch,0callabc;调用子程序abccallsum;调用子程序sumshlax,1;乘2movbx,segobfmoves,bxmovdi,offsetobf+1callcba;调用子程序cbacalllf;调用子程序lfmovdx,offs
5、etobf;10号功能调用,输入并显示字符串odfmovah,9int21hRet;返回beginendP;过程段begin结束sumproc;定义过程sumsum为自然数相加子程序pushcx;保护现场pushbxmovcx,ax;把ax的值赋给cxmovbx,0;为bx赋值0movax,bx;把bx的值赋给axsm:adcbx,1;把bx,1和进位CF相加adcax,bx;把ax,bx和进位CF相加loopsm;cx减1,并判断cx是否为0.cx不为0则转到sm,cx为0则顺序执行popbx;恢复现场popcxRet;返
6、回sumendp;过程sum结束abcproc;定义过程abcabc为将键盘输入的十进制数转化为十六进制子程序movax,0;为ax赋值0abc1:pushcx;cx入栈movcx,10;Xi*10+Xi-1mulcx;乘法指令调用andbyteptr[si],0fh;把十进制数的ASCⅡ转换为BCD数addal,[si]adcah,0incsi ;越过负号指向数字 popcx;cx出栈loopabc1;将cx减1,然后判断cx是否为0.若cx不为0,则转移到abc1Ret;cx为0,则返回abce
7、ndp;过程abc结束cbaproc;定义过程cbacba为十六进制转化为ASCⅡ码子程序pushax;保护现场pushbxpushcxpushdxpushdiorax,ax;判别数的符号jnsplus;为正,转移到plusmovbyteptres:[di],'-';为负,送负号至输出数据区incdi;并求该负数的绝对值negaxplus:movcx,0;将AX中的二进制数转换为十进制数movbx,10lop1:movdx,0divbxpushdx;余数进栈inccx;十进制数位数加1orax,ax;商不为0继续除以10jn
8、zlop1lop2:popax;将十进制数转换为ASCⅡ码addal,30hstosblooplop2moval,'$'stosbpopdi;恢复现场popdxpopcxpopbxpopaxRet;返回cbaendp;过程cba结束LFPROC;定义过程LFMOVDL,0AH;2号功能调用