子程序设计实验报告

子程序设计实验报告

ID:35220885

大小:46.00 KB

页数:7页

时间:2019-03-22

子程序设计实验报告_第1页
子程序设计实验报告_第2页
子程序设计实验报告_第3页
子程序设计实验报告_第4页
子程序设计实验报告_第5页
资源描述:

《子程序设计实验报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、学号:0740303104姓名:雷凤子程序设计实验报告一、实验目的:1、训练子程序;调用程序以及DOS功能调用程序的编制,进一步熟悉和灵活使用系统功能调用,培养根据具体情况合理划分程序模块的能力2、掌握主、子程序之间的调用关系,联结方法,提高使用各种参数传递方法的正确性和灵活性。3、掌握调试主、子程序的基本方法,通过调试进一步理解和加深堆栈在子程序设计中的重要意义的认识4、上机前要求写好被调试程序的程序文本,并进行静态调试,然后拟定好调试计划和上机操作步骤。二、实验要求:1、具体了解和掌握call指令,主,子程序之间的调用和在使用时应注意的问题2、学习子程序设计和调用的一般方法。三、实验

2、内容1、实验任务试编制一程序,分别对NUM字节单元数组中统计出有多少个20,有多少个5,有多少个2,有多少个1.统计的个数分别放在NUM20、num5、num2、num1单元中。1.程序要求用主程序-子程序的结构形式编制。2.并且传递参数的方式为堆栈方法。2、实验的原理在主程序部分,将统计个数的单元分别放在俩个通用寄存器——AH,AL,DH,DL中,数组首址和数组长度都压栈,设置一个循环次数,送给CX,再调用输出语句进行输出。最重要的是子程序JUSUAN,做好保护现场等准备工作后就将数组中的每个元素分别与20,5,2,1比较,根据不同的结果转到不同的分支语句,对应的不同的计数器相应地增1

3、,并修改地址,继续循环比较。3、程序设计流程图子程序流程图入口保护现场取出断点送DIAX,DX清零[DI]=20AH<-AH+1[DI]=5AL<-AL+1[DI]=2DH<-DH+1[DI]=1DL<-DL-1DI<-DI+1CX<-CX-1?恢复现场四、实验步骤1、编辑(纪事本)DATASSEGMENTNUMDB20,1,20,5,2,5,2,2,2,20COUNTEQU$-NUMNUM20DB?NUM5DB?NUM2DB?NUM1DB?;此处输入数据段代码DATASENDSSTACKSEGMENTPARASTACK'STACK'STAPNDB100DUP(?);此处输入堆栈段代码S

4、TACKENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKMAINPROCFARPUSHDSSUBAX,AXPUSHAXMOVAX,DATASMOVDS,AXMOVAX,STACKMOVSS,AXSTART:MOVBX,OFFSETNUM;取偏移地址MOVCX,COUNT;数组长度送给CXPUSHBX;数组首地址入栈PUSHCX;数组长度进栈CALLJISUAN;调用子程序MOVNUM20,AH;将统计的个数保存MOVNUM5,ALMOVNUM2,DHMOVNUM1,DLMOVCX,4;设置循环次数LEADI,NUM20;取偏移地址COUT:

5、ADD[DI],30H;输出MOVDL,[DI]MOVAH,02HINT21HINCDILOOPCOUTRETMAINENDPJISUANPROC;PUSHBx;保护现场PUSHCXPUSHBPMOVBP,SP;当前栈顶地址送BPBEGIN:MOVDI,[BP+10];DI<-数组首址MOVCX,10;CX<-数组长度SUBAX,AX;计数器清零SUBDX,DX;计数器清零GO:CMPBYTEPTR[DI],20JENEXT1;比较,相等就转CMPBYTEPTR[DI],5JENEXT2CMPBYTEPTR[DI],2JENEXT3CMPBYTEPTR[DI],1JENEXT4DO:IN

6、CDI;修改地址LOOPGOJMPANEXT1:INCAH;计数器加1JMPDONEXT2:INCALJMPDONEXT3:INCDHJMPDONEXT4:INCDLJMPDOA:;POPBX;恢复现场POPCXPOPBPRET4;此处输入代码段代码;JISUANENDPCODESENDSENDMAIN2、汇编(masm/ML)3、连接(link)4、调试(debug)5、运行3241Pressanykeytocontinue五、实验中各个步骤遇到的问题及解决方法、1、汇编(masm/ML)虽然思路比较清晰,但在用堆栈方式进行参数传递时出现了一些语法错误,不知道该何时进栈,对到底应该哪个

7、寄存器进栈也没弄太明白。遇到的这个问题刚开始看了一下书上的例题,但还是没明白,最后是让学得比较好的同学一步一步的帮我分析,找出错误并改正的。2、连接(link)3、调试(debug)六、总结经验我认为这个程序最难的部分是堆栈部分和子程序的一些清零工作,因为这个题目思路比较明确,主,子程序的大致方向也比较好把握,难就难在一些细节,所以,以后在写一些稍微繁琐偏难得程序时,每一步都要仔细推敲,不然写完了再回过头来检查时很难找出错在哪的。总

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。