《子程序设计实验报告计算机数据结构与算法_计算机-计算机原理.pdf》由会员分享,可在线阅读,更多相关《子程序设计实验报告计算机数据结构与算法_计算机-计算机原理.pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
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比较,根据不同的结果转
3、到不同的分支语句,对应的不同的计数器 相应地增 1,并修改地址,继续循环比较。3、程序设计流程图 子程序流程图用系统功能调用培养根据具体情况合理划分程序模块的能力掌握主子程序之间的调用关系联结方法提高使用各种参数传递方法的正确性和灵活性掌握调试主子程序的基本方法通过调试进一步理解和加深堆栈在子程序设计中的重要意具体了解和掌握指令主子程序之间的调用和在使用时应注意的问题学习子程序设计和调用的一般方法实验内容实验任务试编制一程序分别对字节单元数组中统计出有多少个有多少个有多少个有多少个统计的个数分别放在单元中程序分别放在俩个通用寄存器中数组首址和数组长度都压栈设置一个循环次数送给再调用输出语句进行
4、输出最重要的是子程序做好保护现场等准备工作后就将数组中的每个元素分别与比较根据不同的结果转到不同的分支语句对应的不同 入口 保护现场 取出断点送 DI AX,DX 清零 恢复现场 用系统功能调用培养根据具体情况合理划分程序模块的能力掌握主子程序之间的调用关系联结方法提高使用各种参数传递方法的正确性和灵活性掌握调试主子程序的基本方法通过调试进一步理解和加深堆栈在子程序设计中的重要意具体了解和掌握指令主子程序之间的调用和在使用时应注意的问题学习子程序设计和调用的一般方法实验内容实验任务试编制一程序分别对字节单元数组中统计出有多少个有多少个有多少个有多少个统计的个数分别放在单元中程序分别放在俩个通用
5、寄存器中数组首址和数组长度都压栈设置一个循环次数送给再调用输出语句进行输出最重要的是子程序做好保护现场等准备工作后就将数组中的每个元素分别与比较根据不同的结果转到不同的分支语句对应的不同四、实验步骤 1、编辑(纪事本)DATASSEGMENT NUM DB20,1,20,5,2,5,2,2,2,20 COUNTEQU$-NUM NUM20DB?NUM5 DB?NUM2 DB?NUM1 DB?;此处输入数据段代码 DATASENDS STACKSEGMENPTARA STACKSTACK STAPN DB 100 DUP(?);此处输入堆栈段代码 STACKENDS CODESSEGMENT A
6、SSUMCES:CODES,DS:DATAS,SS:STACK MAIN PROC FAR PUSHDS SUBAX,AX PUSHAX MOVAX,DATAS MOVDS,AX MOVAX,STACK MOVSS,AX START:MOVBX,OFFSETNUM;取偏移地址 MOVCX,COUNT;数组长度送给 CX PUSHBX;数组首地址入栈 PUSHCX;数组长度进栈 CALL JISUAN;调用子程序 MOVNUM20,AH;将统计的个数保存 MOVNUM5,AL MOVNUM2,DH 用系统功能调用培养根据具体情况合理划分程序模块的能力掌握主子程序之间的调用关系联结方法提高使用各种
7、参数传递方法的正确性和灵活性掌握调试主子程序的基本方法通过调试进一步理解和加深堆栈在子程序设计中的重要意具体了解和掌握指令主子程序之间的调用和在使用时应注意的问题学习子程序设计和调用的一般方法实验内容实验任务试编制一程序分别对字节单元数组中统计出有多少个有多少个有多少个有多少个统计的个数分别放在单元中程序分别放在俩个通用寄存器中数组首址和数组长度都压栈设置一个循环次数送给再调用输出语句进行输出最重要的是子程序做好保护现场等准备工作后就将数组中的每个元素分别与比较根据不同的结果转到不同的分支语句对应的不同MOVNUM1,DL用系统功能调用培养根据具体情况合理划分程序模块的能力掌握主子程序之间的调
8、用关系联结方法提高使用各种参数传递方法的正确性和灵活性掌握调试主子程序的基本方法通过调试进一步理解和加深堆栈在子程序设计中的重要意具体了解和掌握指令主子程序之间的调用和在使用时应注意的问题学习子程序设计和调用的一般方法实验内容实验任务试编制一程序分别对字节单元数组中统计出有多少个有多少个有多少个有多少个统计的个数分别放在单元中程序分别放在俩个通用寄存器中数组首址和数组长度都压栈设置一个循环次数送给再调用输出语句进行输出最重要的是子程序做好保护现场等准备工作后就将数组中的每个元素分别与比较根据不同的结果转到不同的分支语句对应的不同;输出 CMPBYTE PTR DI,20 NEXT1;比较,相等
9、就转 CMPBYTE PTR DI,5 NEXT2 CMPBYTE PTR DI,2 NEXT3 CMPBYTE PTR DI,1 NEXT4 INC DI;修改地址 COUT:ADDDI,30H MOVDL,DI MOVAH,02H INT 21H INC DI LOOP COUT RET MAIN ENDP JISUAN PROC;PUSH Bx PUSHCX PUSHBP MOVBP,SP BEGIN:MOVDI,BP+10 MOVCX,10 SUBAX,AX SUBDX,DX GO:JE JE JE JE DO:保护现场;当前栈顶地址送 BP;DI-数组首址;CX-数组长度;计数器清零
10、;计数器清零LOOP GO JMP A NEXT1:INC AH;计数器加 1 JMP DO NEXT2:INC AL JMP DO NEXT3:INC DH JMP DO用系统功能调用培养根据具体情况合理划分程序模块的能力掌握主子程序之间的调用关系联结方法提高使用各种参数传递方法的正确性和灵活性掌握调试主子程序的基本方法通过调试进一步理解和加深堆栈在子程序设计中的重要意具体了解和掌握指令主子程序之间的调用和在使用时应注意的问题学习子程序设计和调用的一般方法实验内容实验任务试编制一程序分别对字节单元数组中统计出有多少个有多少个有多少个有多少个统计的个数分别放在单元中程序分别放在俩个通用寄存器中
11、数组首址和数组长度都压栈设置一个循环次数送给再调用输出语句进行输出最重要的是子程序做好保护现场等准备工作后就将数组中的每个元素分别与比较根据不同的结果转到不同的分支语句对应的不同NEXT4:INC DL JMP DO A:;POP BX;恢复现场 POPCX POPBP RET 4;此处输入代码段代码 J JISUAN ENDP CODESENDS ENDMAIN 2、汇编(masm/ML)3、连接(link)4、调试(debug)5、运行 3241 Press any key to continue 五、实验中各个步骤遇到的问题及解决方法、1、汇编(masm/ML)虽然思路比较清晰,但在用堆
12、栈方式进行参数传递时出现了一些语法 错误,不知道该何时进栈,对到底应该哪个寄存器进栈也没弄太明白。遇到的这个问题刚开始看了一下书上的例题,但还是没明白,最后是 让学得比较好的同学一步一步的帮我分析,找出错误并改正的。2、连接(link)3、调试(debug)六、总结经验 用系统功能调用培养根据具体情况合理划分程序模块的能力掌握主子程序之间的调用关系联结方法提高使用各种参数传递方法的正确性和灵活性掌握调试主子程序的基本方法通过调试进一步理解和加深堆栈在子程序设计中的重要意具体了解和掌握指令主子程序之间的调用和在使用时应注意的问题学习子程序设计和调用的一般方法实验内容实验任务试编制一程序分别对字节单元数组中统计出有多少个有多少个有多少个有多少个统计的个数分别放在单元中程序分别放在俩个通用寄存器中数组首址和数组长度都压栈设置一个循环次数送给再调用输出语句进行输出最重要的是子程序做好保护现场等准备工作后就将数组中的每个元素分别与比较根据不同的结果转到不同的分支语句对应的不同