第7章 子程序和库

子程序是程序设计所常见的基本概念,汇编语言也提供了编写子程序的方法。

本章主要介绍子程序的定义、调用和返回、子程序的参数传递等知识。此后,还将讲解如何构造自己的子程序库。

7.1 子程序的定义

如果某程序段在源程序内反复出现,那么,就可把该程序段定义为子程序。这样可以缩短源程序长度、节省目标程序的存储空间,也可提高程序的可维护性和共享性。

定义子程序的一般格式如下:

子程序名 PROC [NEAR | FAR]
;子程序体
子程序名 ENDP

对子程序定义的具体规定如下:

、“子程序名”必须是一个合法的标识符,并前后二者要一致;
PROCENDP必须是成对出现的关键字,它们分别表示子程序定义开始和结束;
、子程序的类型有近(NEAR)、远(FAR)之分,其缺省的类型是近类型;

、如果一个子程序要被另一段的程序调用,那么,其类型应定义为FAR,否则,其类型可以是NEAR。显然,NEAR类型的子程序只能被与其同段的程序所调用;

、子程序至少要有一条返回指令,也可有多条返回指令。返回指令是子程序的出口语句,但它不一定是子程序的最后一条语句;

、子程序名有三个属性:段值、偏移量和类型。其段值和偏移量对应于子程序的入口地址,其类型就是该子程序的类型。

编写子程序除了要考虑实现子程序功能的方法外,还要养成书写子程序说明信息的好习惯。其说明信息一般包括以下几方面内容:

、功能描述
、入口和出口参数
、所用寄存器 ;可选项,最好采用寄存器的保护和恢复方法,使之使用透明化
、所用额外存储单元 ;可选项,可以减少为子程序定义自己的局部变量
、子程序的所采用的算法 ;可选项,如果算法简单,可以不写
、调用时的注意事项 ;可选项,尽量避免除入口参数外还有其它的要求
、子程序的编写者 ;可选项,为将来的维护提供信息
、子程序的编写日期 ;可选项,用于确定程序是否是最新版本

这些说明性信息虽然不是子程序功能的一部分,但其他程序员可通过它们对该子程序的整体信息有一个较清晰认识,为准确地调用它们提供直接的帮助,与此同时,也为实现子程序的共享提供了必要的资料。