用汇编语言建立DLL的技术

本文详细介绍了如何在Windows环境下使用汇编语言创建动态链接库(DLL)。首先,文章阐述了DLL的调用约定,特别是PASCAL调用约定,并说明了参数传递的原理。接着,通过实例展示了如何在DLL中接收和处理传值和传址参数。此外,还详细解释了DLL的源代码结构,包括入口函数LibMain、出口函数WEP、公共函数的声明和定义,以及模块定义文件(.DEF)的作用。最后,给出了一个具体的DLL实现示例,并讲解了如何在VB中调用这个DLL,包括函数和过程的声明及调用方法。
摘要由CSDN通过智能技术生成

一、引言:
汇编语言是一种运行速度最快,能使用所有机器特殊硬件功能的语言。对速度要求很高的程序,如实时响应处理,图形图象处理等都离不开汇编语言。目前,在计算机系统中,无论是操作系统、编译系统、图形处理系统及大量应用系统中都还不能完全离开汇编语言编制的程序模块。众所周知,汇编语言的特点在于其速度和与硬件打交道的能力,而高级语言则通常具有编程容易、方便、调试快速的特点。因此,两者的结合将发挥各自的优势,扬长避短,从而发挥更大的效益。在Windows环境下一般采用动态连接库(DLL)技术使两者相结合,即用汇编语言来建立DLL,再在高级语言中调用DLL。本文将首先详细介绍用汇编建立DLL的方法,然后作为一个例子,在VB程序中调用所建立的DLL。
二、DLL的建立
1、调用约定
调用约定是在语言中为实现调用而建立的一种协议。应用程序采用调用约定来规定应用程序以某种顺序把变量或参数传递给DLL;DLL采用调用约定来决定以何种顺序接收所传递给它的参数。16位的DLL的参数传递遵从PASCAL的调用约定,即对函数参数采用与参数在参数表中出现的顺序"从左到右"压入堆栈的方式进行(见图1),参数在堆栈中所占的字节与调用类型,参数类型等有关;且被调用函数已经明确获知参数的数目,因此在函数结束时,会一并恢复堆栈的状态。
调用约定使应用程序知道哪一些过程、函数是外部的,从而在连接时能找到这些程序模块;同时,也在DLL中说明哪些过程、函数是可以为其它程序模块所使用。在用汇编语言建立的DLL中,调用约定由过程定义语句中的关键字PASCAL指出。

高 地 址
低 地 址
参 数1
参 数2
返 回 地 址
BP 保 护
BP, SP
图1.PASCAL调用堆栈
2、参数传递

应用程序与DLL之间的通讯是经过参数传递来完成的,当DLL中的过程或函数定义之后,就可以在应用程序中对它进行调用,而调用与被调用之间的信息传递和交换可以通过系统堆栈进行参数传递来完成。在定义或说明时用形式参数,调用时则替换成实际参数。如何把实际参数传递给相应的形式参数,而且当过程完结后又如何把所得结果送回应用程序,这是编程中要解决的问题。 DLL中接收应用程序传递过来的参数由过程定义语句中的EXPORT关键字给出。常用的参数传递方式有传值和传址两种:传值是一种最简单的参数传递方法,它把实际参数的值传递给相应的形式参数。DLL中的库函数可用如下方法来接收应用程序传递过来的值(假设应用程序用传值方式传递过来两个整型值):

SUM1 PROC FAR PASCAL EXPORT I:PTR WORD,J:PTR WORD
… …
MOV

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值