会员: 密码:  免费注册 | 忘记密码 | 会员登录 网页功能: 加入收藏 设为首页 网站搜索  
游戏开发 > 程序设计 > 优化调试
C++ 的在线汇编技巧
发表日期:2006-08-28 21:55:01作者: 出处:  

 前次已经为大家讲过了如何在 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

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

返回顶部】 【打印本页】 【关闭窗口

关于我们 / 给我留言 / 版权举报 / 意见建议 / 网站编程QQ群   
Copyright ©2003- 2024 Lihuasoft.net webmaster(at)lihuasoft.net 加载时间 0.00243