`
kbk325pw
  • 浏览: 12932 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

在 Visual C++ 中使用内联汇编(三)

 
阅读更多

在 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++写。  
分享到:
评论

相关推荐

    在 Visual C++ 中使用内联汇编

    在 Visual C++ 中使用内联汇编 在 Visual C++ 中使用内联汇编 在 Visual C++ 中使用内联汇编

    在Visual C++中使用内联汇编

    在Visual C++中使用内联汇编 希望对学习VC++有所帮助

    在Visual_C++中使用内联汇编

    在Visual_C++中使用内联汇编 本文档主要详细介绍如何在c/c++代码内涵汇编代码,推荐给学习c/c++的同学们下载

    在 Visual C++ 中使用内联汇编.pdf

    在 Visual C++ 中使用内联汇编

    2022年在Visual C++中使用内联汇编C语言教程.docx

    2022年在Visual C++中使用内联汇编C语言教程.docx

    在 Visual C++ 中使用内联汇编,VC内联ASM汇编,混合使用C和汇编代码的程序(用__asm写c函数)

    在 Visual C++ 中使用内联汇编 VC内联ASM汇编 混合使用C和汇编代码的程序(用__asm写c函数)

    Visual C++ 6.0 专业便携版

    4.替换 c2.dll 版本为 13.0.9044.0 ,支持内联汇编的 SSE 指令。 5.修改 VC6 版本号为 "6.x" ,使同一系统中能和其他版本的 VC6 共存。 增加的内容: 1.集成 Visual Assist X、WndTabs 插件。 2.集成 DevTrueColour...

    Visual C++开发经验技巧宝典(第3章)

    0146 在代码编辑器中使用代码录制功能 73 0147 快速调整控件的Tab键顺序 73 0148 从位图中获取工具条资源 73 0149 从其他文件中抓取资源 74 0150 生成自定义的关键字 74 0151 利用Visual C++修改可执行...

    Visual C++开发经验技巧宝典(第1章)

    0073 如何在STL中使用容器 30 0074 STL算法的优点 31 0075 如何设计和使用STL迭代器 31 0076 使用STL需要包含哪些头文件 32 0077 STL简单应用 32 1.10 C++.NET语法 33 0078 在C++.NET中如何判断空指针...

    浅谈VC++中的内联

    在 Visual C++ 中使用内联汇编 一、内联汇编的优缺点 因为在Visual C++中使用内联汇编不需要额外的编译器和联接器,且可以处理Visual C++ 中不能处理的一些事情,而且可以使用在 C/C++中的变量,所以非常方便。

    汇编和C混用说明文档

    ——喝口茶先,大家先看看秋镇菜blog上这篇文章《在 Visual C++ 中使用内联汇》 ,详细介绍了在 Visual C++ 中内联汇编的用法。 参考书也必不可少;可悲的是我手头仅有的两本书一本是老掉牙的8086汇编,另一本则是AT...

    Visual C++ 6.0专业便携版,亲测Win10 1803可用

    4.替换 c2.dll 版本为 13.0.9044.0 ,支持内联汇编的 SSE 指令。 5.修改 VC6 版本号为 "6.x" ,使同一系统中能和其他版本的 VC6 共存。 增加的内容: 1.集成 Visual Assist X、WndTabs 插件。 2.集成 DevTrueColour...

    Visual C++ 2005入门经典--源代码及课后练习答案

    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 类的...

    软件加密技术.part7

    软件加密技术内幕电子书 第1章 PE文件格式深入研究 第2章 PE分析工具编写 第3章 Win32 调试API 第4章 Windows下的异常处理 第5章 软件加密技术 ...附录A 在Visual C++中使用内联汇编 附录B 在Visual Basic中使用汇编

    软件加密技术.part2

    软件加密技术内幕电子书 第1章 PE文件格式深入研究 第2章 PE分析工具编写 第3章 Win32 调试API 第4章 Windows下的异常处理 第5章 软件加密技术 ...附录A 在Visual C++中使用内联汇编 附录B 在Visual Basic中使用汇编

    软件加密技术.part4

    软件加密技术内幕电子书 第1章 PE文件格式深入研究 第2章 PE分析工具编写 第3章 Win32 调试API 第4章 Windows下的异常处理 第5章 软件加密技术 ...附录A 在Visual C++中使用内联汇编 附录B 在Visual Basic中使用汇编

    软件加密技术.part6

    软件加密技术内幕电子书 第1章 PE文件格式深入研究 第2章 PE分析工具编写 第3章 Win32 调试API 第4章 Windows下的异常处理 第5章 软件加密技术 ...附录A 在Visual C++中使用内联汇编 附录B 在Visual Basic中使用汇编

    软件加密技术.part5

    软件加密技术内幕电子书 第1章 PE文件格式深入研究 第2章 PE分析工具编写 第3章 Win32 调试API 第4章 Windows下的异常处理 第5章 软件加密技术 ...附录A 在Visual C++中使用内联汇编 附录B 在Visual Basic中使用汇编

    软件加密技术.part1

    软件加密技术内幕电子书 第1章 PE文件格式深入研究 第2章 PE分析工具编写 第3章 Win32 调试API 第4章 Windows下的异常处理 第5章 软件加密技术 ...附录A 在Visual C++中使用内联汇编 附录B 在Visual Basic中使用汇编

Global site tag (gtag.js) - Google Analytics