汇编学习笔记51(剧终)

三、模块间的通信

(一) 伪指令PUBLIC和EXTRN

由于各模块被单独汇编,所以,如果模块甲要按符号名调用或访问其他模块中定义的某个过程或变量,那么模块甲必须告诉汇编程序此指定符号名(标识符)在别的模块内定义,否则在汇编程序甲时,汇编程序会给出符号未定义这类汇编出错信息。另一方面,如果在模块乙内定义的过程或变量准备供其他模块调用或访问,那么模块乙必须通知汇编程序,否则汇编程序不会把相应标识符保存到目标程序中,最终导致汇编失败。

伪指令EXTRN和PUBLIC就是分别用于通知汇编程序上述两种信息。

1. 伪指令PUBLIC

伪指令PUBLIC用于声明在当前模块内定义的某些标识符是公共标识符,即可供其他模块使用的标识符。

PUBLIC 标识符 [,标识符,…]

一个模块源程序内可使用多条PUBLIC语句,数据变量名及标号均可声明为公共标识符。

2. 伪指令EXTRN

伪指令EXTRN用于声明当前模块使用的哪些标识符在其他模块内定义。

它的一般格式如下:

EXTRN 标识符 : 类型 [, 标识符 : 类型, …]

上述语句中位于助词符EXTRN后的每一项标识符: 类型 声明一个在其他模块内定义的标识符

汇编程序为了产生合适的代码或保留恰当的存储单元,要求在声明标识符的同时指出其类型属性。标识符和类型之间用冒号分隔。

类型可以是NEAR, FAR, BYTE, WORD, DWORD等标识符类型属性。

注意: 把EXTRN伪指令安排在段的里面和段的外面是有区别的,如果EXTRN伪指令出现在某个段内,表示所声明的标识符虽在其他模块内,但却在同一个段内,如果EXTRN伪指令出现在段外,那么表示不知道所声明的标识符在哪一个段内被定义。

3. 声明一致性

各模块内PUBLIC和EXTRN语句必须互相响应,互相一致。凡是由PUBLIC语句声明的标识符,应该是其他模块EXTRN语句中用到的标识符。

(二) 模块间的转移

模块间的转移是指从一个模块的某个代码段转移到另一个模块的某个代码段。这种转移通常是以过程调用及返回的形式出现。例如模块甲调用定义在模块乙内的某个过程。但有时这种转移也直接采用转移指令的形式。

若两个模块的涉及转移的代码段在连接后不能组合为一个代码段,那么发生在这两个代码段之间的转移必须是段间转移,所以模块间的转移就成为远调用或远转移。否则模块间的转移可以是近调用或近转移。当然仍采用远调用或远转移也是完全可以的。

posted @ 2011-01-28 21:54  杨海龙  阅读(1548)  评论(1编辑  收藏  举报