子程序设计实验报告
更新时间:2023-09-27 10:01:01 阅读量: 综合文库 文档下载
学号: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、程序设计流程图 子程序流程图
入口 保护现场 取出断点送DI AX,DX清零 [DI]=20 [DI]=5 AH<-AH+1 [DI]=2 AL<-AL+1 [DI]=1 DH<-DH+1 DL<-DL-1 DI<-DI+1 CX<-CX-1? 恢复现场 四、实验步骤 1、编辑(纪事本)
DATAS SEGMENT
NUM DB 20,1,20,5,2,5,2,2,2,20 COUNT EQU $-NUM NUM20 DB ? NUM5 DB ? NUM2 DB ? NUM1 DB ?
;此处输入数据段代码 DATAS ENDS
STACK SEGMENT PARA STACK 'STACK' STAPN DB 100 DUP(?) ;此处输入堆栈段代码 STACK ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACK MAIN 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 RET MAIN ENDP
JISUAN PROC
;PUSH Bx ;保护现场 PUSH CX PUSH BP
MOV BP,SP ;当前栈顶地址送BP BEGIN:
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 A
NEXT1: INC AH ;计数器加1 JMP DO NEXT2: INC AL JMP DO NEXT3: INC DH JMP DO
NEXT4: INC DL
JMP DO
A: ;POP BX ;恢复现场 POP CX POP BP
RET 4 ;此处输入代码段代码 ;
JISUAN ENDP CODES ENDS END MAIN
2、汇编(masm/ML) 3、连接(link) 4、调试(debug) 5、运行 3241
Press any key to continue 五、实验中各个步骤遇到的问题及解决方法、 1、汇编(masm/ML)
虽然思路比较清晰,但在用堆栈方式进行参数传递时出现了一些语法错误,不知道该何时进栈,对到底应该哪个寄存器进栈也没弄太明白。遇到的这个问题刚开始看了一下书上的例题,但还是没明白,最后是让学得比较好的同学一步一步的帮我分析,找出错误并改正的。 2、连接(link) 3、调试(debug) 六、总结经验
我认为这个程序最难的部分是堆栈部分和子程序的一些清零工作,因为这个题目思路比较明确,主,子程序的大致方向也比较好把握,难就难在一些细节,所以,以后在写一些稍微繁琐偏难得程序时,每一步都要仔细推敲,不然写完了再回过头来检查时很难找出错在哪的。总之,这个程序在修改上花费了不少时间,以后要吸取教训,要培养更缜密的思想。
正在阅读:
子程序设计实验报告09-27
密度与浮力复习(知识点及习题)07-01
管理员工的基本绝招03-23
保持党的纯洁性学习教育活动个人剖析材料03-09
掰手腕大赛作文350字06-16
电影《八月》观后感04-02
滤池反冲洗废水回用生产性试验研究_柯水洲08-28
五年级数学下册第三单元剪纸中的数学_分数加减法一信息窗3同分母分数连加连减第2课时教案05-08
河南省2020届高三上学期期末英语试卷精选汇编:短文改错专题05-08
误会作文600字07-12
- 必修一物理寒假作业
- 2019-201X年5月大学生入党积极分子思想汇报-word范文模板(3页)
- 药物分析习题五
- 重拾应用意识 体会数学价值(沈建军)
- 2017全国高校辅导员结构化面试题集及参考答案
- 广东徐闻县实验中学2014届高三第二次月测地理试题
- 今天你共鸣了么?
- 2018-2019正能量读后感1000字-推荐word版(6页)
- 2018年中国截切型盖板针布行业专题研究分析报告目录
- 中国移动业务处理流程大全
- 公文写作常用词汇和句子集锦2016
- ARM课程设计说明书
- 教师资格证教育学论文
- 中考试卷分析
- 环境监测试卷(五)
- 党风廉政建设广播稿1
- 快速制作香香宫煮麻辣烫教程
- 《国际金融学》习题
- 文明施工保障措施方案
- 春兰维修资料故障代码
- 子程序
- 实验
- 报告
- 设计