PROTEUS-8086实验指导书
六、 实验结果和体会
七、 建议
第29页
PROTEUS-8086实验指导书
实验五 子程序设计
一、实验目的
1.学习子程序的定义和调用方法。
2.掌握子程序、子程序的嵌套、递归子程序的结构。 3.掌握子程序的程序设计、编制及调试方法。
二、实验内容
1.求无符号字节序列中的最大值最小值
设有一字节型序列,其存贮首址为3000H,字节数为08H。利用子程序的方法编程求出该序列中的最大值与最小值。程序流程图如图5-l所示。
开始 数据首址?SI
调用求最大最小值子程序 结 束
图5-1 主程序流程图
序列的字节个数
第30页
PROTEUS-8086实验指导书
Y (CX)=0? N SI,CX,BX入栈 (SI)?BH;BH?BL (SI)+1?SI;(SI)?AL (AL)<(BH) Y (AL)>(BL) Y (CX)-1?CX N AL?BH N AL?BL N (CX)=0? Y RET 图5-2 子程序流程图
2.求N!
利用子程序的嵌套和子程序的递归调用,实现N!的运算。 根据阶乘运算,我们有:
N!=N*(N-1)!=N*(N一l )*(n-2)!=?? 0!=1
由此我们可以想到,欲求N的阶乘,可以用一递归子程序来实现,每次递归调用时应将调用参数减1,即求(N-1)的阶乘,并且当调用参数为0时应停止递归调用,且有0!=1的中间结果。最后将每次调用的参数相乘得到最后结果;因每次递归调用时参数都送入栈中,当N减为0而程序开始返回时,应按嵌套的方式逐层返回,并逐层取出相应的调用参数。
第31页
PROTEUS-8086实验指导书
假定,N放在3000H~3001H单元中,N!的结果放在3010H起始的单元中,N在00H~0FH间取数,且(3000H)中放低位。
三、实验步骤
1、Proteus仿真
a.在Proteus中新建两个工程“子程序设计X.pdsprj”,添加自己编写的汇编代 码,编译直至成功;
b.设置断点、运行程序,打开调试窗口进行调试。 2、调试、验证
a.设置断点、单步运行程序;
b.观察程序运行到断点时,8086内存相应地址单元和寄存器的数值变化; c.验证实验结果。
四、实验结果和体会
五、思考题
1.若求有符号字节型序列中的最大值与最小值,如何修改程序?
2.子程序执行完毕后要返回调用程序,它返回调用程序的什么地方,是靠什么指令、什么方法返回的?
3.若N=3。请画出求N!程序运行时的堆栈变化情况,并加以解释。
第32页
PROTEUS-8086实验指导书
8086硬件部分实验
实验一 IO口读写实验 (245、373)
一、 实验要求
利用板上集成电路上的资源,扩展一片74HC245,用来读入开关状态;扩展一片74HC373,用来作来输出口,控制8个LED灯。
二、 实验目的
1、了解CPU常用的端口连接总线的方法。 2、掌握74HC245、74HC373进行数据读入与输出。
三、 实验电路及连线
1、Proteus实验电路
2、硬件验证实验
第33页