1.WIN32中API的作用
WIN32中API的作用是以一种新的方式替代了DOS中软中断的作用。在DOS中用汇编语言编程,要调用系统提供的功能,首先要知道中断号,其次要知道中断号的功能号,如打印一个字符串,就要使用21h号中断的9号功能。使用的过程中,功能号存放在AH中,DX中存放字符串地址,最后int21h。
mov ah,9
mov dx,offset szHello
int 21h
这种方法比较繁琐,需要不断地查中断表。与DOS系统不同,WIN32系统的功能模块是放在DLL中的,在DLL文件的PE头导出表中,以字符串的形式指出了这个DLL提供的导出函数列表,应用程序可以通过函数名调用。
2.函数的声明
格式: 函数名 proto [距离] [call模式] [参数1]:数据类型, [参数2]:数据类型,……
[]中的内容都可以省略。距离NEAR、FAR等等,通常省略,因为WIN32汇编程序中只有一个FLAT段。call模式即cdelcall、stdcall等,如果省略则使用.model的默认值。参数名可以省略,加上只改善代码的可读性。WIN32汇编只使用DWORD类型的参数,所以数据类型基本是DWORD。
2.1 include和includelib
include和c语言中的include类似,等于添加了一个包含函数声明的头文件,编译器在编译时将include语句直接替换成目标文件。而includelib则包含了DLL中导出函数的信息,链接时链接器根据这些信息到指定DLL中找到对应函数。
可以这样理解:如果没有include对应.inc文件则找不到函数的声明,没有includelib对应.lib文件则找不到函数的实现。
3.函数的调用
为了避免整个源代码都在push push call,MASM提供了一个伪指令:invoke 函数明,参数,参数……通过这种方式
3.1函数的返回值
函数的返回值放在eax中,如果返回值是64位,则高位放在edx中。如果返回值太大,就返回指向返回值的指针。