当前位置:首页 > 电源 > 数字电源
[导读]  有时我们的程序需要一些很高的执行效率或者执行系统底层的功能模块,这些关键的部分我们可以采用内联汇编直接插入汇编指令来达到我们的要求,以下是几个技巧与大家共同探讨.  1.内联汇编嵌入VC语句:  在VC中内

  有时我们的程序需要一些很高的执行效率或者执行系统底层的功能模块,这些关键的部分我们可以采用内联汇编直接插入汇编指令来达到我们的要求,以下是几个技巧与大家共同探讨.

  1.内联汇编嵌入VC语句:

  在VC中内联汇编非常方便,只需要按照如下格式

  __asm{

  //汇编语句

  }

  请看如下示例代码

  void CAlcmemDlg::OnButton3()

  {

  DWORD d=(m_size*1024*1024)/sizeof(DWORD);

  DWORD*p=(DWORD*)m_p;

  DWORD s;

  m_pr.SetMin(0);

  m_pr.SetMax((float)d);

  m_pr.SetEnabled(TRUE);

  if(NULL!=m_p){

  __asm{

  mov ecx,d

  mov eax,0

  L:        mov edx,DWORD ptr p

  mov [edx+eax],1  //随便写入数据,此处写入1

  inc eax

  mov s,eax

  pushad

  }

  m_pr.SetValue((float)s);

  __asm{

  popad

  loop L

  }

  }

  }

  请注意示例代码中两个__asm块中的pushad 和 popad 语句,pushad保存了寄存器环境,popad恢复了寄存器环境,使得m_pr.SetValue((float)s);语句对寄存器的影响被抵销,你还可以调用其他任何语句。但建议是尽量少打断内联汇编块,以减少运行时来回倒腾寄存器环境的时间。笔者的测试是,当删除m_pr.SetValue((float)s);并且合并两个__asm块,同时删除pushad,和popad后,速度明显提高。可见这种打断通常是得不偿失。

  通常要保存的寄存器环境还有Flags寄存器等,这些视具体情况而定。

  2.自由使用FPU,MMX等指令[!--empirenews.page--]

  void CAlcmemDlg::OnButton4()

  {

  float f_t=.132;

  float f_s=0;

  __asm{

  fld f_s

  fld f_s

  fld f_s

  fld f_t

  fadd f_t

  fst f_t

  //    fadd fs

  }

  }

  可以利用设置断点的方法来观察FPU寄存器的情况,通常你用VC写的代码,不会被编译为引用特殊指令集的代码,虽然微软号称编译器支持这些指令。所以你必须用内联汇编方法来调用这些指令以优化程序,充分利用资源。示例中的代码调用了FPU处理器的指令,使操作浮点数的能力被充分发挥。但当然你还可以调用3DNOW!指令,SSE,SSE2等指令,但笔者没有试过,如果你有什么新的发现,还望赐教,再此先谢了!

  总的来说内联汇编提高了速度,尤其是游戏编程,更应该努力使用内联汇编,把CPU充分榨干,但坏处就是有些低端的机器无法运行,兼容性差。同时微软又号称,编译器不会去优化你写的汇编码,他只是简单的翻译为等价的机器码,优化的事情交给你自己来完成,所以你不但得是C++高手,同时还得是汇编高手。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

雀巢公司(Nestle)表示,已经同意从星巴克(Starbucks Corp)手中收购Seattle's Best Coffee品牌,以加强该公司在美国的咖啡业务。雀巢公司是雀巢咖啡(Nescafe)和Nespresso...

关键字: TTL ST SE AFE

南京2022年10月19日 /美通社/ -- 10月16日是第42个世界粮食日,今年世界粮食日的主题是"不让任何人掉队,更好生产、更好营养、更好环境、更好生活",向全社会倡导爱惜粮食,拒绝浪...

关键字: 西门子 SE OS 可持续发展

云顶新耀宣布其合作伙伴Providence Therapeutics Holdings Inc.的mRNA新冠候选疫苗PTX-COVID19-B在评估其安全性、耐受性和免疫原性的II期研究中取得了积极的顶线结果。云顶新耀...

关键字: VI OV IDE CE

强生公司(Johnson & Johnson)公布最近结束的季度销售额和利润实现增长,即使美元走强和劳动力成本上升削弱了业绩。这家保健用品公司周二下调了全年销售指引,因美元相对于全球其他货币的上涨带来的持续影响。...

关键字: JOHNSON SE OS

百奥赛图(北京)医药科技股份有限公司的全资子公司祐和医药科技(北京)有限公司宣布与临床阶段的美国生物制药公司Syncromune达成协议,共同开发和商业化基于Syncrovax™技术的瘤内免疫疗法。Syncrovax™平...

关键字: ROM OV

阿布扎比和沙特正在权衡,是否在瑞信(Credit Suisse)股价低迷之际,对该行的投资银行和其他业务进行投资。阿联酋和沙特在分别探索通过各自的主权基金,例如阿布扎比穆巴达拉发展公司和沙特公共投资基金(PIF)进行潜在...

关键字: MICHAEL UI SE PI

慕尼黑2022年10月17日 /美通社/ -- TUV南德意志集团(以下简称"TUV南德")在EcoVadis全球企业社会责任评级中以总分71分荣获金奖。...

关键字: OV ADIS BSP COM

摩根大通(JPMorgan Chase)首席执行官戴蒙(Jamie Dimon)预测,美国经济可能在明年陷入衰退。他警告称,经济低迷可能在信贷市场引发“恐慌”,令美国股市价值再蒸发20%。花旗集团(Citigroup)首...

关键字: CE SE MORGAN GROUP

本文中,小编将对无线模块予以介绍,如果你想对无线模块的详细情况有所认识,或者想要增进对它的了解程度,不妨请看以下内容哦。

关键字: 无线模块 寄存器 处理器

据全球最大石油生产商沙特阿美(Saudi Aramco)称,全球石油市场依然紧张。对于一个仍然严重依赖化石燃料的世界来说,这不是一个好兆头。沙特阿美CEO Amin Nasser表示,如今闲置产能非常低。如果亚洲重新开放...

关键字: NAS RAM SE CE

数字电源

15504 篇文章

关注

发布文章

编辑精选

技术子站

关闭