子程序设计实验报告
更新时间: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
捉萤火虫作文700字07-12
精彩瞬间作文400字07-09
遥感算法09-14
人民解放战争的胜利教学设计02-22
最高法院:史上最强建设工程价款优先受偿权纠纷裁判规则集成10-02
江苏自考基础会计考试真题03-16
收入会计科目01-10
如何取缔十五土小企业04-10
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 子程序
- 实验
- 报告
- 设计