- 浏览: 12932 次
最新评论
在 Visual C++ 中使用内联汇编(三)
2011年04月21日
七、调用函数
内联汇编调用C/C++函数必须自己清除堆栈,下面是一个调用C/C++函数例子:
#include
char szformat[] = "%s %s\n";
char szHello[] = "Hello";
char szWorld[] = " world";
void main()
{
__asm
{
MOV EAX, OFFSET szWorld
PUSH EAX
MOV EAX, OFFSET szHello
PUSH EAX
MOV EAX, OFFSET szformat
PUSH EAX
CALL printf
//内联汇编调用C函数必须自己清除堆栈
//用不使用的EBX寄存器清除堆栈,或ADD ESP, 12
POP EBX
POP EBX
POP EBX
}
}
注意:函数参数是从右向左压栈。
不能够访问C++中的类成员函数,但是可以访问extern "C"函数。
如果调用Windows API函数,则不需要自己清除堆栈,因为API的返回指令是RET n,会自动清除堆栈
比如下面的例子:
#include
char szAppName[] = "API Test";
void main()
{
char szHello[] = "Hello, world!";
__asm
{
PUSH MB_OK OR MB_ICONINformATION
PUSH OFFSET szAppName ; 全局变量用OFFSET
LEA EAX, szHello ; 局部变量用LEA
PUSH EAX
PUSH 0
CALL DWORD PTR [MessageBoxA] ; 注意这里,我费了好大周折才发现不是CALL MessageBoxA
}
}
一般来说,在Visual C++中使用内联汇编是为了提高速度,因此这些函数调用尽可能用C/C++写。
发表评论
-
c++模版函数中应用typename
2012-01-20 11:04 817c++模版函数中应用typename 2011年06月21日 ... -
寻找Nenia C’alladhan中的女声――Constance (Cuirina)
2012-01-20 11:03 794寻找Nenia C’alladhan中的 ... -
嗯哼,27°C
2012-01-20 11:03 1478嗯哼,27°C 14小时前 紧锣密鼓地忙完了各种考试,又 ... -
C1203018小时测试
2012-01-20 11:03 554C1203018小时测试 18小时前 C1203018小 ... -
Android网络编程实践之旅(一):网络状态检测
2012-01-19 15:57 724Android网络编程实践之旅 ... -
error: No curses/termcap library found的解决办法
2012-01-19 15:57 946error: No curses/termcap librar ... -
开机提示 A disk read error occurred ……
2012-01-19 15:57 920开机提示 A disk read error occurred ... -
ELAU运动控制器的应用――Watch3
2012-01-19 15:57 688ELAU运动控制器的应用――Watch3 2011年12月1 ... -
C51的PID程序
2012-01-19 15:57 827C51的PID程序 2011年12月22日 //主程序= ... -
北京自考专科接考本科要分清专业类别
2012-01-17 05:50 588北京自考专科接考本科 ... -
新目标英语八年级上册unit9 sectionA 1a-grammar导学案
2012-01-17 05:50 514新目标英语八年级上册unit9 sectionA 1a-gra ... -
符合用户体验是获得好的关键词排名的关键
2012-01-17 05:50 580符合用户体验是获得好 ... -
文化传媒成大盘下跌小棉袄
2012-01-17 05:50 494文化传媒成大盘下跌小 ... -
大叔遇上御姐丈母娘【十一】
2012-01-17 05:50 541大叔遇上御姐丈母娘【十一】 2011年11月25日 ... -
《中庸》
2012-01-16 04:37 490《中庸》 2010年02月26日 【原文】 子曰 ... -
第十四章 我是商鞅(上)
2012-01-16 04:36 460第十四章 我是商鞅( ... -
礼乐文明与和谐社会的构建
2012-01-16 04:36 656礼乐文明与和谐社会的 ...
相关推荐
在 Visual C++ 中使用内联汇编 在 Visual C++ 中使用内联汇编 在 Visual C++ 中使用内联汇编
在Visual C++中使用内联汇编 希望对学习VC++有所帮助
在Visual_C++中使用内联汇编 本文档主要详细介绍如何在c/c++代码内涵汇编代码,推荐给学习c/c++的同学们下载
在 Visual C++ 中使用内联汇编
2022年在Visual C++中使用内联汇编C语言教程.docx
在 Visual C++ 中使用内联汇编 VC内联ASM汇编 混合使用C和汇编代码的程序(用__asm写c函数)
4.替换 c2.dll 版本为 13.0.9044.0 ,支持内联汇编的 SSE 指令。 5.修改 VC6 版本号为 "6.x" ,使同一系统中能和其他版本的 VC6 共存。 增加的内容: 1.集成 Visual Assist X、WndTabs 插件。 2.集成 DevTrueColour...
0146 在代码编辑器中使用代码录制功能 73 0147 快速调整控件的Tab键顺序 73 0148 从位图中获取工具条资源 73 0149 从其他文件中抓取资源 74 0150 生成自定义的关键字 74 0151 利用Visual C++修改可执行...
0073 如何在STL中使用容器 30 0074 STL算法的优点 31 0075 如何设计和使用STL迭代器 31 0076 使用STL需要包含哪些头文件 32 0077 STL简单应用 32 1.10 C++.NET语法 33 0078 在C++.NET中如何判断空指针...
在 Visual C++ 中使用内联汇编 一、内联汇编的优缺点 因为在Visual C++中使用内联汇编不需要额外的编译器和联接器,且可以处理Visual C++ 中不能处理的一些事情,而且可以使用在 C/C++中的变量,所以非常方便。
——喝口茶先,大家先看看秋镇菜blog上这篇文章《在 Visual C++ 中使用内联汇》 ,详细介绍了在 Visual C++ 中内联汇编的用法。 参考书也必不可少;可悲的是我手头仅有的两本书一本是老掉牙的8086汇编,另一本则是AT...
4.替换 c2.dll 版本为 13.0.9044.0 ,支持内联汇编的 SSE 指令。 5.修改 VC6 版本号为 "6.x" ,使同一系统中能和其他版本的 VC6 共存。 增加的内容: 1.集成 Visual Assist X、WndTabs 插件。 2.集成 DevTrueColour...
7.4.4 在构造函数中使用初始化列表 320 7.5 类的私有成员 320 7.5.1 访问私有类成员 323 7.5.2 类的友元函数 324 7.5.3 默认复制构造函数 326 7.6 this指针 328 7.7 类的const对象 331 7.7.1 类的...
软件加密技术内幕电子书 第1章 PE文件格式深入研究 第2章 PE分析工具编写 第3章 Win32 调试API 第4章 Windows下的异常处理 第5章 软件加密技术 ...附录A 在Visual C++中使用内联汇编 附录B 在Visual Basic中使用汇编
软件加密技术内幕电子书 第1章 PE文件格式深入研究 第2章 PE分析工具编写 第3章 Win32 调试API 第4章 Windows下的异常处理 第5章 软件加密技术 ...附录A 在Visual C++中使用内联汇编 附录B 在Visual Basic中使用汇编
软件加密技术内幕电子书 第1章 PE文件格式深入研究 第2章 PE分析工具编写 第3章 Win32 调试API 第4章 Windows下的异常处理 第5章 软件加密技术 ...附录A 在Visual C++中使用内联汇编 附录B 在Visual Basic中使用汇编
软件加密技术内幕电子书 第1章 PE文件格式深入研究 第2章 PE分析工具编写 第3章 Win32 调试API 第4章 Windows下的异常处理 第5章 软件加密技术 ...附录A 在Visual C++中使用内联汇编 附录B 在Visual Basic中使用汇编
软件加密技术内幕电子书 第1章 PE文件格式深入研究 第2章 PE分析工具编写 第3章 Win32 调试API 第4章 Windows下的异常处理 第5章 软件加密技术 ...附录A 在Visual C++中使用内联汇编 附录B 在Visual Basic中使用汇编
软件加密技术内幕电子书 第1章 PE文件格式深入研究 第2章 PE分析工具编写 第3章 Win32 调试API 第4章 Windows下的异常处理 第5章 软件加密技术 ...附录A 在Visual C++中使用内联汇编 附录B 在Visual Basic中使用汇编