子程序设计实验报告.doc_第1页
子程序设计实验报告.doc_第2页
子程序设计实验报告.doc_第3页
子程序设计实验报告.doc_第4页
子程序设计实验报告.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学号:0740303104姓名:雷凤子程序设计实验报告一、实验目的: 1、训练子程序;调用程序以及DOS功能调用程序的编制,进一步熟悉和灵活使用系统功能调用,培养根据具体情况合理划分程序模块的能力2、掌握主、子程序之间的调用关系,联结方法,提高使用各种参数传递方法的正确性和灵活性。3、掌握调试主、子程序的基本方法,通过调试进一步理解和加深堆栈在子程序设计中的重要意义的认识4、上机前要求写好被调试程序的程序文本,并进行静态调试,然后拟定好调试计划和上机操作步骤。二、实验要求:1、具体了解和掌握call指令,主,子程序之间的调用和在使用时应注意的问题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、程序设计流程图子程序流程图入口保护现场取出断点送DIAX,DX清零DI=20AH-AH+1DI=5AL-AL+1DI=2DH-DH+1DI=1DL-DL-1DI-DI+1CX-CX-1?恢复现场四、实验步骤1、编辑(纪事本)DATAS SEGMENTNUM DB 20,1,20,5,2,5,2,2,2,20COUNT EQU $-NUM NUM20 DB ?NUM5 DB ?NUM2 DB ?NUM1 DB ? ;此处输入数据段代码 DATAS ENDSSTACK SEGMENT PARA STACK STACKSTAPN DB 100 DUP(?) ;此处输入堆栈段代码STACK ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKMAIN PROC FAR PUSH DS SUB AX,AX PUSH AX MOV AX,DATAS MOV DS,AX MOV AX,STACK MOV SS,AX START: MOV BX,OFFSET NUM ;取偏移地址 MOV CX,COUNT ;数组长度送给CX PUSH BX ;数组首地址入栈 PUSH CX ;数组长度进栈 CALL JISUAN ;调用子程序 MOV NUM20,AH ;将统计的个数保存 MOV NUM5,AL MOV NUM2,DH MOV NUM1,DL MOV CX,4 ;设置循环次数 LEA DI,NUM20 ;取偏移地址 COUT: ADD DI,30H ;输出 MOV DL,DI MOV AH,02H INT 21H INC DI LOOP COUT RETMAIN ENDPJISUAN PROC ;PUSH Bx ;保护现场 PUSH CX PUSH BP MOV BP,SP ;当前栈顶地址送BPBEGIN: MOV DI,BP+10 ;DI-数组首址 MOV CX,10 ;CX-数组长度 SUB AX,AX ;计数器清零 SUB DX,DX ;计数器清零 GO: CMP BYTE PTR DI,20 JE NEXT1 ;比较,相等就转 CMP BYTE PTR DI,5 JE NEXT2 CMP BYTE PTR DI,2 JE NEXT3 CMP BYTE PTR DI,1 JE NEXT4 DO: INC DI ;修改地址 LOOP GO JMP ANEXT1: INC AH ;计数器加1 JMP DO NEXT2: INC AL JMP DONEXT3: INC DH JMP DO NEXT4: INC DL JMP DO A: ;POP BX ;恢复现场 POP CX POP BP RET 4 ;此处输入代码段代码 ;JISUAN ENDPCODES ENDS END MAIN2、汇编(masm/ML)3、连接(link)4、调试(debug)5、运行3241 Press any key to continue五、实验中各个步骤遇到的问题及解决方法、1、汇编(masm/ML)虽然思路比较清晰,但在用堆栈方式进行参数传递时出现了一些语法错误,不知道该何时进栈,对到底应该哪个寄存器进栈也没弄太明白。遇到的这个问题刚开始看了一下书上的例题,但还是没明白,最后是让学得比较好的同学一步一步的帮我分析,找出错误并改正的。2、连接(link)3、调试(debug)六、总结经验我认为这个程序最难的部分是堆栈部分和子程序的一些清零工作,因为这个题目思路比较明确,主,子程序的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论