当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

<b>关于内联汇编的几个本领</b>[VC/C++编程]

赞助商链接



  本文“<b>关于内联汇编的几个本领</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

有时我们的程序需求一些很高的履行效率大概履行系统底层的功效模块,这些关键的部份我们可以采取内联汇编直接插入汇编指令来到达我们的要求,以下是几个本领与大家共同探究.

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等指令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++高手,同时还得是汇编高手.不过据我所知这种人十有八九是黑客.我是不鼓舞你成为那类人的,撰写此文只为举一反三.

本文配套源码


  以上是“<b>关于内联汇编的几个本领</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .