www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式教程
[導(dǎo)讀]內(nèi)聯(lián)匯編的技巧

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

  1.內(nèi)聯(lián)匯編嵌入VC語句:

  在VC中內(nèi)聯(lián)匯編非常方便,只需要按照如下格式

  __asm{

  //匯編語句

  }

  請(qǐng)看如下示例代碼

  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

  }

  }

  }

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

  通常要保存的寄存器環(huán)境還有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

  }

  }

  可以利用設(shè)置斷點(diǎn)的方法來觀察FPU寄存器的情況,通常你用VC寫的代碼,不會(huì)被編譯為引用特殊指令集的代碼,雖然微軟號(hào)稱編譯器支持這些指令。所以你必須用內(nèi)聯(lián)匯編方法來調(diào)用這些指令以優(yōu)化程序,充分利用資源。示例中的代碼調(diào)用了FPU處理器的指令,使操作浮點(diǎn)數(shù)的能力被充分發(fā)揮。但當(dāng)然你還可以調(diào)用3DNOW!指令,SSE,SSE2等指令,但筆者沒有試過,如果你有什么新的發(fā)現(xiàn),還望賜教,再此先謝了!

  總的來說內(nèi)聯(lián)匯編提高了速度,尤其是游戲編程,更應(yīng)該努力使用內(nèi)聯(lián)匯編,把CPU充分榨干,但壞處就是有些低端的機(jī)器無法運(yùn)行,兼容性差。同時(shí)微軟又號(hào)稱,編譯器不會(huì)去優(yōu)化你寫的匯編碼,他只是簡(jiǎn)單的翻譯為等價(jià)的機(jī)器碼,優(yōu)化的事情交給你自己來完成,所以你不但得是C++高手,同時(shí)還得是匯編高手。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

雀巢公司(Nestle)表示,已經(jīng)同意從星巴克(Starbucks Corp)手中收購(gòu)Seattle's Best Coffee品牌,以加強(qiáng)該公司在美國(guó)的咖啡業(yè)務(wù)。雀巢公司是雀巢咖啡(Nescafe)和Nespresso...

關(guān)鍵字: TTL ST SE AFE

南京2022年10月19日 /美通社/ -- 10月16日是第42個(gè)世界糧食日,今年世界糧食日的主題是"不讓任何人掉隊(duì),更好生產(chǎn)、更好營(yíng)養(yǎng)、更好環(huán)境、更好生活",向全社會(huì)倡導(dǎo)愛惜糧食,拒絕浪...

關(guān)鍵字: 西門子 SE OS 可持續(xù)發(fā)展

云頂新耀宣布其合作伙伴Providence Therapeutics Holdings Inc.的mRNA新冠候選疫苗PTX-COVID19-B在評(píng)估其安全性、耐受性和免疫原性的II期研究中取得了積極的頂線結(jié)果。云頂新耀...

關(guān)鍵字: VI OV IDE CE

強(qiáng)生公司(Johnson & Johnson)公布最近結(jié)束的季度銷售額和利潤(rùn)實(shí)現(xiàn)增長(zhǎng),即使美元走強(qiáng)和勞動(dòng)力成本上升削弱了業(yè)績(jī)。這家保健用品公司周二下調(diào)了全年銷售指引,因美元相對(duì)于全球其他貨幣的上漲帶來的持續(xù)影響。...

關(guān)鍵字: JOHNSON SE OS

百奧賽圖(北京)醫(yī)藥科技股份有限公司的全資子公司祐和醫(yī)藥科技(北京)有限公司宣布與臨床階段的美國(guó)生物制藥公司Syncromune達(dá)成協(xié)議,共同開發(fā)和商業(yè)化基于Syncrovax?技術(shù)的瘤內(nèi)免疫療法。Syncrovax?平...

關(guān)鍵字: ROM OV

阿布扎比和沙特正在權(quán)衡,是否在瑞信(Credit Suisse)股價(jià)低迷之際,對(duì)該行的投資銀行和其他業(yè)務(wù)進(jìn)行投資。阿聯(lián)酋和沙特在分別探索通過各自的主權(quán)基金,例如阿布扎比穆巴達(dá)拉發(fā)展公司和沙特公共投資基金(PIF)進(jìn)行潛在...

關(guān)鍵字: MICHAEL UI SE PI

慕尼黑2022年10月17日 /美通社/ -- TUV南德意志集團(tuán)(以下簡(jiǎn)稱"TUV南德")在EcoVadis全球企業(yè)社會(huì)責(zé)任評(píng)級(jí)中以總分71分榮獲金獎(jiǎng)。...

關(guān)鍵字: OV ADIS BSP COM

摩根大通(JPMorgan Chase)首席執(zhí)行官戴蒙(Jamie Dimon)預(yù)測(cè),美國(guó)經(jīng)濟(jì)可能在明年陷入衰退。他警告稱,經(jīng)濟(jì)低迷可能在信貸市場(chǎng)引發(fā)“恐慌”,令美國(guó)股市價(jià)值再蒸發(fā)20%?;ㄆ旒瘓F(tuán)(Citigroup)首...

關(guān)鍵字: CE SE MORGAN GROUP

本文中,小編將對(duì)無線模塊予以介紹,如果你想對(duì)無線模塊的詳細(xì)情況有所認(rèn)識(shí),或者想要增進(jìn)對(duì)它的了解程度,不妨請(qǐng)看以下內(nèi)容哦。

關(guān)鍵字: 無線模塊 寄存器 處理器

據(jù)全球最大石油生產(chǎn)商沙特阿美(Saudi Aramco)稱,全球石油市場(chǎng)依然緊張。對(duì)于一個(gè)仍然嚴(yán)重依賴化石燃料的世界來說,這不是一個(gè)好兆頭。沙特阿美CEO Amin Nasser表示,如今閑置產(chǎn)能非常低。如果亞洲重新開放...

關(guān)鍵字: NAS RAM SE CE

嵌入式教程

6897 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉