第 9章 汇编语言与高级语言的连接
本章主要教学内容
1、了解汇编程序过程
2,掌握多个模块组合时的连接情况
3,掌握多个模块之间的变量传送问题
4,掌握汇编语言程序与高级语言程序的连接方法
教学目的,使学生掌握汇编语言与高级语言的连结
教学重点,汇编语言程序与高级语言程序的连接方法
教学难点,多个模块之间的变量传送问题
9.1 连接程序及连接对程序设计的要求
9.1.1 连接程序的主要功能
( 1)找到要连接的所有目标模块。
( 2) 对所有要连接的目标模块中的所有段分配存
储单元, 即确定所有段地址值 。
( 3) 确定所有汇编程序所不能确定的偏移地址值
( 包括浮动地址及外部符号所对应的地址 ) 。
( 4)构成装入模块,并把它装入存储器。
9.1.2 连接对程序设计的要求
1.多个模块组合时的连接情况
几种组合方式,
( 1) PUBLIC:可以把不同模块中的同名段在装入模块
中连接而形成一个段,它们共用一个段地址。
( 2) COMMON:把不同模块中的同名段重叠而形成一
个段。
( 3) STACK:把不同模块中的同名段组合而形成一个段。
( 4) MEMORY:使该段放在装入模块的最高地区。
( 5) NONE:默认方式。表示该段与其他模块中的段不
发生任何组合关系。
SEG1 ( PUBLIC )
10KB
SEG2 ( COMMON )
20KB
模块 1
SEG3 ( STACK )
10KB
SEG1 ( COMMON )
20KB
SEG2 ( COMMON )
15KB
模块 2
SEG4
30KB
SEG3 ( STACK )
10KB
模块 3
连接以后
组合情况
10KB
20KB SEG1
20KB SEG2
10KB
10KB SEG3
30KB SEG4
连接时对不同模块同名段的组合处理
2.多个模块之间的变量传送问题
( 1)利用外部符号
【 例 9.1】
( 2)多个模块之间的变量传送方法
【 例 9.2】
【 例 9.3】
【 例 9.4】
详见教材
9.2 汇编语言程序与高级语言程序
的连接
连接中要解决以下三个问题,
( 1)存储器分配问题
( 2)两种语言之间的控制传送问题
( 3)变量传送问题
9.2.1 PASCAL语言程序与汇编语言程序
的连接
一,PASCAL与汇编语言连接的开发过程
首先将 PASCAL语言程序和汇编语言程序编
写成为独立的程序模块,并且分别用它们的编译
程序将程序模块单独地编译成目标模块,即生成
*.OBJ文件,然后用 LINK程序将 PASCAL的目标
模块和汇编语言的目标模块以及 PASCAL的库文
件连接起来,生成 — 个可执行文件( *.EXE文件)
二.采用外部方式与汇编语言程序相连接
将汇编语言程序单独编写、汇编、连接生
成 EXE文件后,再转换成 COM或 BIN文件,供
PASCAL程序以外部过程或函数的形式调用。
这时,需要在 PASCAL程序和汇编语言程序中
分别按语言约定进行说明。
1,PASCAL程序中的说明
FUNCTION 函数名 ( 变量名:变量类型; …… ;变量名:变量
类型 ) ;函数类型; EXTERNAL;
PROCEDURE 过程名(变量名:变量类型; …… ;变量名:变
量类型); EXTERNAL;
2、建立汇编过程
建立一个可被 PASCAL程序调用的汇编过程是进行
混合编程和程序调用的另一个主要任务。
( 1) 汇编过程的建立。
( 2) 汇编过程的进入。
( 3) 分配局部变量(可选择)。
( 4) 保护现场(即保护相关寄存器的值)。
( 5) 参数访问。
( 6) 结果和值的返回(可选择)。
( 7) 退出汇编语言过程。
3,PASCAL调用汇编语言过程的步骤
( 1) 编写并汇编一个汇编语言过程, 如 EP4.ASM连接
并形成一个可执行文件 EP4.EXE。
( 2) 由于 PASCAL程序所调用的外部过程是以二进制
文件形式 ( 如,BIN或,COM) 包含在外部说明中
的, 故需要把一个汇编语言过程的,EXE文件转换
为,BIN或,COM文件 。 这个转换可以用实用程序
EXE2BIN来实现 。
( 3) 编写 PASCAL程序, 进行外部说明 。
( 4) 在集成环境下编译后执行 PASCAL程序 。
【 例 9.5】
9.2.2 C语言程序与汇编语言程序的连接
1,Microsoft C语言调用汇编语言过程的约定
( 1)有关名字的约定。
( 2)有关近调用或远调用的约定。
( 3)关于寄存器保存的约定。
( 4)关于参数传递的约定。
( 5)局部变量的约定。
( 6)过程结束处理的约定。
2,Turbo C语言调用汇编语言过程的约定
Turbo C语言与 Microsoft的 C语言的约定基本一致。
3,C语言与汇编语言程序连接的编程环境
( 1)参数的传递
( 2)值的返回
( 3)段与组
( 4) C语言调用汇编语言的一般格式
4,C与汇编接口的实例程序
本章小结
汇编程序可以把汇编语言源程序模块转换为二进
制的目标模块, 连接程序是汇编语言程序设计的另
外一个重要步骤, 它按目标模块行中用户所键入文
件名的次序来实行连接, 装入模块即可执行的 EXE文
件, 即在汇编程序生成目标程序文件 ( *.OBJ) 的基
础上, 进一步来生成可执行文件 ( *.EXE) 。
在高级语言程序与汇编语言程序连接时, 主模块
与子模块间采用近调用和远调用来实现程序转移,
相应的汇编语言程序设计成近过程和远过程, 且不
设置堆栈 。 模块间的参数传递多数使用堆栈方法,
有时也用寄存器返回运算结果 。 不同的高级语言与
汇编语言之间有自己的约定和编程环境要求 。
THANK YOU VERY MUCH
本章到此结束,
谢谢您的光临!