网页功能: 加入收藏 设为首页 网站搜索  
C++ 的在线汇编技巧
发表日期:2006-08-28作者:[转贴] 出处:  

 前次已经为大家讲过了如何在 VC 中使用在线汇编,今次要讲的是专门针对 C++ 的一点技巧。

  写这段文字的动机是因为自己最近开始由 C 改到用 C++ 了,所以自然就会去思考如何在 C++ 中使用在线汇编。经过一些尝试以后,有了那么一小点的心得,便顺手记下来以供大家参考。

  要在 C++ 中使用在线汇编,同我们前面讲的在 C 中使用在线汇编并没有本质区别,唯一要考虑的问题是如何处理 C++ 中的 THIS 指针。

  分析 VC 编译成的汇编代码可以看到,很明显是由 ECX 寄存器来把 THIS 指针的内容传递给 C++ 的类函数的。因此我们在类函数中引用类的数据时,就可以利用这点来完成我们所需要的操作。

  在类函数中使用在线汇编时,假设该类有一个数据成员 Data,其类型是长整型(双字),我们就可以按照下面这种形式来访问它:

  MOV EAX, [ECX] this.Data

  但你也可能会担心,如果在类函数中使用在线汇编之前还有其它的指令,这时很可能 ECX 寄存器的内容已经被破坏了,其值根本不是 THIS 指针的内容了,这时该怎么办?

  这个问题其实很好解决,VC 编译成的类函数汇编代码中,会自动把由 ECX 传递来的 THIS 的内容保存于堆栈中,你可以先取到寄存器,再做剩下的操作就可以了,示例如下:

  MOV ECX, this
  MOV EAX, [ECX] this.Data

  最后提醒大家注意的是,以上所讲的只是一种简单的示意性的处理方法,没有去考虑任何效率优化,所以实际上高效的处理代码根本不是这样写的。你如果有兴趣的话,可以在此基础上做进一步的研究,千万不要就此停滞不前哦。

我来说两句】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 C++ 的在线汇编技巧
本类热点文章
  SSE 介紹
  浮点数到整数的快速转换
  基于SSE指令集的程序设计简介
  CPU 的 cache 和 latency
  关键字 对齐 内存对齐
  INTEL 体系结构 MMX™ 技术开发者..
  在非MFC程序中使用调试宏 ASSERT(),VER..
  Microsoft Visual C++ 浮点优化
  INTEL X86 体系 32 位汇编语言速成
  加速&优化技术
  加快程序运行速度的技巧
  VC代码的编写和调试
最新分类信息我要发布 
最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放  
Copyright ©2003-2024 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00396