回复 10楼 zklhp
额,难道作者的lib是个静态链接库? 函数全写在里面了吗?
回复 2楼 zklhp
我今天看到了Intel汇编程序设计 的第8章了 ,,我明白了。 首先我说 invoke 和 call 很像 invoke为更高级的调用伪指令 为call的增加版
invoke 可以用来调用子程序,但是有一点要注意就是 先声明函数的原型 就是用proto伪指令进行对函数创建一个原型(说明参数类型 参数个数)
而这个函数的声明一般在inc里面进行声明
而函数的定义 在 asm源文件进行定义,还有另外一种情况,就是不用声明函数也可以用 invoke 进行调用。那就是在它调用前 进行函数的定义。要在他前面哦
invoke 的优点显而易见 invoke 调用子程序的时候 后面跟着参数的列表,这样汇编器就为你隐含push参数进入栈,而不像call 你要为子程序传递参数时候要自己push参数进入栈中,然后子程序在用EBP进行取得参数,(用堆栈传递参数的情况下)
INVOKE 调用子程序,参数,参数,参数 隐含压入的参数.
编译后 push 参数1
push 参数2
push 参数n
call 调用子程序
在子程序就可以很好的通过名字进行引用参数了,(高级语言中的形式参数)
还有INVOKE对外部定义的函数引用也很好,直接用PROTO进行函数的声明就可以了,再者定义 而传统的call 调用外部 你就需要进行用EXTERN 进行说明了。
不过call也可以模拟 INVOKE 的调用过程 很简单。
INVOKE一般配合PROTO PROC 使用,而CALL 就配合EXTERN使用,(引用外部函数,多模块设计的时候)
INVOKE 一般用于API函数的调用,因为API函数都是用PROTO声明函数的,而且都在inc文件里面。