加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

8086汇编程序模块的连接

(2011-10-15 16:03:46)
标签:

8086

汇编

模块连接

校园

分类: 汇编

8086汇编程序中,如何将几个模块连接在一起呢?

如:将几个.asm文件连接在一起编译形成一个.obj文件。

 

主要有三种方法:

1、在编译的时候连接。

       这种方法主要是在需要连接的地方使用INCLUDE伪指令,使得已独立编辑好的若干个.asm文件在汇编时被连接在一起,形成一个完整的.obj文件,然后对此.obj文件继续其他操作,直至调试通过,满足要求。

       下面举例说明:利用下面的程序输出“AB

 

       文件A.asm

CSEG  SEGMENT

                     ASSUME  CS:CSEG

START :       CALL  SUB1

               CALL  SUB2

               MOV  AH,4CH

                     INT  21H

INCLUDE  B.ASM

INCLUDE  C.ASM

CSEG  ENDS

END  START

 

       文件B.asm

SUB1  PROC  NEAR

MOV  DL,'A'

              MOV  AH,2

              INT  21H

              RET

SUB1  ENDP


文件C.asm

SUB2    PROC  NEAR

             MOV  DL,'B'

              MOV  AH,2

              INT  21H

              RET

SUB2  ENDP

操作过程如下:

http://s16/middle/867764f7gaf51db7bad4f&690

 

这里有几点要说明:

(1)    要汇编在一起的文件中的自定义的符号名(标号)不允许有重复的。

(2)     也可使用嵌套形式形成一个.obj文件,如果INCLUDE后的文件不在隐含驱动器的磁盘上,则在文件名前加上含有该文件的磁盘驱动器的名字。

3子程序的类型必须定义为NEAR. 因为INCLUDE伪指令在对现行的源程序文件汇编时,是把另外的源程序文件 加入 到现行源程序中的INCLUDE处的。拿上面的例子来说,文件B.asm的源程序和文件C.asm的源程序在汇编时会被插入A.asm文件的INCLUDE处,三个源代码在同一个代码段CSEG中,属于段内调用。

       如果你写成FAR,在编译时会出现下面的错误提示,

http://s2/middle/867764f7gaf51f1ea8081&690




2、在LINK的时候连接。

这种方法主要使用LINK命令的连接格式,把事先独立编辑、编译、调试好的程序模块(.obj文件)再用LINK连接生成.exe文件时连接在一起,即把多个.obj文件连接成一个完整的.exe文件。

LINK的主要格式:LINK  A+B+C ,其中ABC是已编译好的.obj文件名。

       下面举例说明:

       文件A.asm

EXTRN  SUB1 : FAR , SUB2 : FAR

CSEG  SEGMENT

       ASSUME  CS : CSEG

START :  CALL  SUB1

              CALL  SUB2

              MOV  AH,4CH

              INT  21H

CSEG  ENDS

END  START

 

 

文件B.asm

PUBLIC  SUB1

CSEG  SEGMENT

ASSUME CS:CSEG

SUB1   PROC  FAR

              MOV  DL,'A'

              MOV  AH,2

              INT  21H

              RET

SUB1  ENDP

CSEG  ENDS

END

 

 

文件C.asm

PUBLIC  SUB2

CSEG  SEGMENT

       ASSUME  CS:CSEG

SUB2    PROC  FAR

      MOV  DL,'B'

       MOV  AH,2

       INT  21H

       RET

SUB2  ENDP

CSEG ENDS

END

 

注:注意加粗的语句和斜体语句(和第一种方法比较着看)

 

操作过程如下:

http://s10/middle/867764f7g77ee98cc3ed9&690

 

http://s2/middle/867764f7g77ee98f25e01&690

 

http://s3/middle/867764f7gaf51fae542d2&690

 

http://s16/middle/867764f7g77ee9931a5ff&690

 

要注意以下几点:

1)各源程序要设置必需 的段地址,至少要设置代码段(其他段根据需要安排)。

2)要组织在同一个物理段内的各个段的名字要相同,如果段名不同,要用GROUP伪指令说明。

3)模块中要使用其他模块的标号时,用EXTRN语句说明,本模块中存在可以被其他模块引用的标号要用PUBLIC语句说明。EXTRN PUBLIC 语句放在所有段的前面。

 

 

3、子程序库法。

       事先将子程序装入一个子程序库中,在LINK 主程序时Libraries选择子程序库名即可。

这种方法和方法2本质上是一样的,所以程序源代码和方法2中的源代码一样。

 

操作过程如下:

http://s1/middle/867764f7gaf51fce93770&690

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有