资源描述:
《实验6 子程序设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验六子程序设计实验一、实验目的1.掌握过程调用指令与过程返回指令的用法;2.掌握主程序与子程序之间的参数传送方法;3.掌握调用子程序时堆栈的变化情况及利用压栈、出栈保护现场的方法;4.掌握嵌套及递归子程序的设计方法。二、实验要求1.仔细阅读教材中有关子程序设计的章节;2.学会编写子程序说明文件;3.学会设置断点检查堆栈指针的变化及堆栈内容;4.学会用DEBUG中的P命令调试子程序;5.学会在子程序设计中保护所用到的寄存器。三、实验内容1.用递归子程序设计方法,编写计算N!(0≤N≤8)的子程序。要求:N
2、值由键盘输入,N!值以十六进制形式在屏幕上显示。2.编制程序,计算3~255之间的所有素数之和,并将3~255之间的所有素数存放在由DATA开始的连续内存单元中,所有素数之和存放在SUM单元中。要求:判断一个数是否为素数用子程序编写。四、程序清单及程序流程图1、;*******阶乘*********SSEGSEGMENTSKTOPDB100DUP(0)SSEGENDSDSEGSEGMENTDATADW0DATA1DB0DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGASSU
3、MESS:SSEGSTART:MOVAX,DSEGMOVDS,AXMOVAX,SSEGMOVSS,AXMOVSP,SIZESKTOPMOVAH,01HINT21HSUBAL,30HMOVDATA1,ALXORAH,AHMOVBX,AXCALLJIECMOVDATA,AXCALLQHTOAMOVCX,AXMOVDL,BHMOVAH,02HINT21HMOVDL,BLMOVAH,02HINT21HMOVDL,CHMOVAH,02HINT21HMOVDL,CLMOVAH,02HINT21HMOVAH,4CHIN
4、T21HJIECPROCANDBX,BXJZJIEC1PUSHBXDECBXCALLJIECPOPBXMULBXRETJIEC1:MOVAX,1RETJIECENDPHTOAPROCANDAL,0FHCMPAL,10JCHTOA1ADDAL,07HTOA1:ADDAL,30HRETHTOAENDPBHTOAPROCPUSHCXMOVCH,ALMOVCL,04SHRAL,CLCALLHTOAMOVAH,ALMOVAL,CHCALLHTOAPOPCXRETBHTOAENDPQHTOAPROCNEARPUSHA
5、XMOVAL,AHCALLBHTOAMOVBX,AXPOPAXCALLBHTOARETQHTOAENDPCSEGENDSENDSTART流程图:结束输出各位调用QHTOA求十六进制显示调用JIEC求阶乘子程序键盘输入N值设置堆栈段指针设置数据段指针设置数据段地址设置堆栈段地址开始主函数:结束JIEC(N)=1计算JIEC(N)=N*JIEC(N-1)顺序取出保存N保存N,领N=N-1,求JIEC(N-1)N==1?开始JIEC子程序:YN结束AL+37H输出AL+30H输出AL>10?开始QHTOA子程序
6、:YN运行结果:1、2、2、;**********素数***********DSEGSEGMENTDATADB64DUP(0)SUMDW0DSEGENDSSSEGSEGMENTSTACKSTKDB20DUP(0)SSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGASSUMESS:SSEGSTART:MOVAX,DSEGMOVDS,AXMOVAX,SSEGMOVSS,AXMOVSP,SIZESTKMOVCL,255XORBX,BXLEASI,DATARST:MOVAL,CLCA
7、LLISSUCMPAH,0JENNOTXORAH,AHADDBX,AXMOV[SI],CLINCSINNOT:DECCLCMPCL,2JNERSTMOVSUM,BXMOVAH,4CHINT21HISSUPROCNEARPUSHBXPUSHCXXORAH,AHMOVCX,AXMOVBL,ALDECBLSSTR:MOVAX,CXDIVBLCMPAH,0JEEENDDECBLCMPBL,1JNESSTRMOVAH,1EEND:POPCXPOPBXRETISSUENDPCSEGENDSENDSTART流程图:25
8、5存入CLSI指向存储首地址设置堆栈段指针设置数据段指针设置数据段地址设置堆栈段地址开始主函数:CL=2?CL-1BL是素数?调用ISSU求素数函数YNNY存入[SI],SI+1求和结束ISSU子程序流程图:BX入栈保存开始BL赋值CL-1AX除以BLYAH=0?NYBL=1?NBL-1是素数AH=1不是素数AH=0BX出栈返回运行结果:1、2、3、