<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 內(nèi)聯(lián)匯編的技巧

          內(nèi)聯(lián)匯編的技巧

          作者: 時間:2010-09-13 來源:網(wǎng)絡(luò) 收藏

            有時我們的程序需要一些很高的執(zhí)行效率或者執(zhí)行系統(tǒng)底層的功能模塊,這些關(guān)鍵的部分我們可以采用直接插入指令來達(dá)到我們的要求,以下是幾個與大家共同探討.

          本文引用地址:http://www.ex-cimer.com/article/151564.htm

            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  //隨便寫入數(shù)據(jù),此處寫入1

            inc eax

            mov s,eax

            pushad

            }

            m_pr.SetValue((float)s);

            __asm{

            popad

            loop L

            }

            }

            }

            請注意示例代碼中兩個__asm塊中的pushad 和 popad 語句,pushad保存了寄存器環(huán)境,popad恢復(fù)了寄存器環(huán)境,使得m_pr.SetValue((float)s);語句對寄存器的影響被抵銷,你還可以調(diào)用其他任何語句。但建議是盡量少打斷內(nèi)聯(lián)匯編塊,以減少運(yùn)行時來回倒騰寄存器環(huán)境的時間。筆者的測試是,當(dāng)刪除m_pr.SetValue((float)s);并且合并兩個__asm塊,同時刪除pushad,和popad后,速度明顯提高??梢娺@種打斷通常是得不償失。

            通常要保存的寄存器環(huán)境還有Flags寄存器等,這些視具體情況而定。

            2.自由使用FPU,MMX等指令


          上一頁 1 2 下一頁

          關(guān)鍵詞: 技巧 匯編 內(nèi)聯(lián)

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();