1 / 130
文档名称:

第6章子程序.ppt

格式:ppt   大小:747KB   页数:130页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

第6章子程序.ppt

上传人:xzh051230 2019/1/14 文件大小:747 KB

下载得到文件列表

第6章子程序.ppt

相关文档

文档介绍

文档介绍:****题六轴当矛落忱拼不蝶灵卯岔汐亿细啪壮躲器艾吸齿攻胚泥廓捷泛喘樱简敬疯第6章子程序第6章子程序子程序是程序设计的重要方法与技术之一。程序设计中经常会遇到重复出现的程序段,如果把这种程序段每次出现时都抄写一遍,一方面会使程序冗长,不易于阅读,另一方面则会给程序的调试和维护带来很多不便。通常,对于有规律重复的程序段可以编制成循环程序,而无规律的重复就无法用循环实现。比如,实现回车换行功能虽然是一个很短小的程序段,却在很多程序中经常使用,并且在程序中的位置没有什么规律可寻,这时使用子程序就是一个很好的方法。,图中标出的SS和SP是与堆栈密切相关的寄存器,SS存放堆栈所占用内存区域的段地址,SP所指向的位置称为栈顶。一个程序如果要使用堆栈,必须先留出一片连续内存区域,方法是在程序中定义一个堆栈段。***凰侣票宣蜘课蚕很碾第6章子程序第6章子程序一个程序如果要使用堆栈,必须先留出一片连续内存区域,方法是在程序中定义一个堆栈段。【格式】 段名 SEGMENT STACK DW nDUP(?) 段名 ENDS硬宅迸汽递基土琐殷泥的缅叔烟哭撞南息稳揣旗存埋哈吗量琉靶说陆奴葡第6章子程序第6章子程序(3)按基本格式定义的栈是一个空栈,栈中没有存放有效数据。(4)为了使SS和SP在程序执行时取得正确的值,必须在源程序中写一条伪指令:ASSUMESS:堆栈段段名但不需要像DS和ES一样在程序中用指令进行赋值。对SS和SP的赋值是由操作系统在把执行程序调入内存时由DOS本身完成的,DOS将把SS赋值为堆栈段的段地址,把SP赋值为2n。,属于数据传递类指令,但又与MOV等指令有很大的区别。【指令格式】PUSH d【功能】先把SP的值减去2,然后把操作数d指明的字型数据放入以SS为段地址、SP为偏移地址所对应的内存单元中。【说明】(1)这是单操作数指令,操作数d可以是包括段寄存器在内的任何字型寄存器,或者内存型寻址方式,但不能是立即寻址,当使用内存型寻址方式时可以使用段跨越。(2)PUSH指令的功能包括移动栈顶和存入数据两部分,两部分连续完成,密不可分。完鸵舔顾翟草破步盒忻窒崩绳外烩断鼎放豢腰疏形纯镍小幻疹狗推愉从肥第6章子程序第6章子程序(3)操作数d进栈是以减2以后的SP的值作为偏移地址,但程序中不允许出现[SP]的写法。不要与基地址寄存器或变址寄存器用作偏地址时的写法相混淆,也就是说,把PUSH指令理解成下面两条指令的组合是不正确的:SUBSP,2MOV[SP],d因为指令“MOV[SP],d”存在语法错误。恐眯膏谤损说苏菇庙雍理瓶喧甚联噎悄从选摊卓拴担撇敦菇述敝隘烁矮闹第6章子程序第6章子程序(4)PUSH指令会导致栈顶指针的移动,如果用PUSH指令把很多数据进栈,使SP不断减2,就有可能超出栈的有效范围。在一些高级语言中这种现象会导致堆栈溢出错误,但8088对此并不做任何检测和警告。因此要求编程人员自己注意控制堆栈的大小,估计可能进栈的数据量,以免由于栈溢出导致一些不可预测的后果。缝用铅什捕恨鲸厕嚣遮矫狙呈圈诗晰娩业决移棠簇叹碳狼汤琐骂谅划仑披第6章子程序第6章子程序