| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1863 人关注过本帖
标题:32汇编下为什么不用include user32.inc 声明API函数就可以使用了啊
只看楼主 加入收藏
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
收藏
得分:0 
回复 10楼 zklhp
额,难道作者的lib是个静态链接库? 函数全写在里面了吗?
2012-07-30 23:18
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
收藏
得分:0 
回复 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文件里面。


2012-08-01 19:54
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
学的很快嘛 祝你早日成为大牛~
2012-08-01 19:58
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用爱末流在2012-8-1 19:54:51的发言:


我今天看到了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文件里面。

而你说的这些 让很多人诟病win32汇编是披着高级语言的汇编 其实 这是win32编程的特点决定的 是windows系统的特性决定的
2012-08-01 20:00
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
收藏
得分:0 
回复 13楼 zklhp
这几天学了好多知识,呵呵。打算看完那本,我买了好多汇编的书,16位的买了6,7本了,32的汇编就3本。
还有书上的习题要慢慢做了,好多习题
2012-08-01 20:32
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
祝成功 话说 我一本汇编的书都没有 呵呵
2012-08-01 21:28
bingghost
Rank: 2
等 级:论坛游民
帖 子:70
专家分:85
注 册:2012-1-4
收藏
得分:0 
没有用过该大神的库   只是读过该大神的所著的 <<Intel程序设计第5版>>

我的头像就是我的女神 可惜我的女神已经死了 所以我的心也死了
2012-08-07 12:15
cnldrk
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-8-8
收藏
得分:0 
路过看看!!!!!!!
2012-08-08 06:28
快速回复:32汇编下为什么不用include user32.inc 声明API函数就可以使用了啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017550 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved