首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

子程序的完全定义

子程序的完全定义

在7.1节所给出的子程序定义格式是一个最基本的、最简单的定义格式,它不能为子程序提供更简洁的调用方式。在宏汇编MASM 6.11系统中,为微机汇编语言的子程序提供了更加丰富的定义方式。
虽然子程序的这种定义方式显得稍微有点复杂,但它不仅为子程序的调用带来了极大的方便,而且其调用方式与高级语言中子程序的调用方式相一致,这就大大地降低了程序员熟练掌握它的难度。
7.5.1子程序完全定义格式
子程序名PROC[Distance] [Langtype] [Visibility] [<Prologuearg>]
[USES寄存器列表] [,参数[:数据类型]]...
[LOCAL Varlist]
子程序的程序体
子程序名ENDP
定义子程序时,可使用参数表来直接指明其所要的参数,但程序员必须先用.MODEL伪指令,或使用<Langtype>参数来说明本子程序所使用的程序设计语言类型。
程序员在定义子程序时,最好能象在高级语言(如:C/C++)定义过程那样,先说明该子程序的原型(用伪指令PROTO),这样,在调用时,系统可以自动进行类型检查,也可以使用更方便的调用伪指令INVOKE来调用该子程序。有关子程序的原型说明伪指令和调用伪指令在随后第7.5.8和7.5.9小节中加以介绍。
子程序通常用RET指令来结束其执行,也可用指令“RET N”来指明在结束子程序执行后从堆栈弹出N个字节。有关返回指令请参阅7.2.2节中的叙述。
汇编程序在处理子程序时能自动产生“起始”代码(PROLOGUE Code)和“结束”代码(EPILOGUE Code)。这两段特殊的代码分别完成:在调用子程序时,能把传递给子程序的参数压栈,在子程序结束时能把先前压栈的参数弹出。有了这两段代码,程序员在调用子程序时就不用自行考虑子程序的参数传递问题。
若子程序用指令RETN、RETF或IRETF作为子程序的结束指令,那么,汇编程序将不生成“结束”代码。
程序员可以用自己定义宏来替代缺省的“起始”和“结束”的代码段。这种替代方法是使用伪指令:OPTION PROLOGUE和OPTION EPILOGUE。
若子程序没有参数、局部变量,没使用USES子句,也不会产生新的段或段组,那么,子程序是可以嵌套定义的。程序员也可以使用返回指令RETN和RETF来避免子程序的嵌套。
在子程序内部,可以在指令之前使用伪指令LOCAL来说明其局部变量,有关规定在随后的第7.5.10节中有详细的说明。
下面就来介绍该定义格式中各个说明项的作用。
返回列表