關於內聯彙編的幾個技巧

2021-08-30 02:51:44 字數 906 閱讀 4950

關於內聯彙編的幾個技巧

有時我們的程式需要一些很高的執行效率或者執行系統底層的功能模組,這些關鍵的部分我們可以採用內聯彙編直接插入彙編指令來達到我們的要求,以下是幾個技巧與大家共同**.

在vc中內聯彙編非常方便,只需要按照如下格式

__asm

請看如下示例**

void calcmemdlg::onbutton3() 

m_pr.setvalue((float)s);

__asm

}}

請注意示例**中兩個__asm塊中的pushad 和 popad 語句,pushad儲存了暫存器環境,popad恢復了暫存器環境,使得m_pr.setvalue((float)s);語句對暫存器的影響被抵銷,你還可以呼叫其他任何語句。但建議是盡量少打斷內聯彙編塊,以減少執行時來回倒騰暫存器環境的時間。筆者的測試是,當刪除m_pr.setvalue((float)s);並且合併兩個__asm塊,同時刪除pushad,和popad後,速度明顯提高。可見這種打斷通常是得不償失。

通常要儲存的暫存器環境還有flags暫存器等,這些視具體情況而定。

void calcmemdlg::onbutton4()

}總的來說內聯彙編提高了速度,尤其是遊戲程式設計,更應該努力使用內聯彙編,把cpu充分榨乾,但壞處就是有些低端的機器無法執行,相容性差。同時微軟又號稱,編譯器不會去優化你寫的彙編碼,他只是簡單的翻譯為等價的機器碼,優化的事情交給你自己來完成,所以你不但得是c++高手,同時還得是彙編高手。不過據我所知這種人十有**是黑客。我是不鼓勵你成為那類人的,撰寫此文只為拋磚引玉。

作者資訊:

姓名:孫原(2002-8-16於西安)

e-mail:[email protected]

關於OS X的幾個技巧。。

1.a 怎麼把ll搞出來?alias ll ls l 1.b ll 是搞出來了,但是咋全都是乙個顏色,比linux的ll 醜很多啊。答 稍微再修改一下.profile 檔案,加入下面的指令碼 export clicolor 1 1.c 顏色是有了,但是對比度不咋地。有時候帶顏色樂反而看不清楚。答 再...

內嵌彙編和內聯彙編的使用

有時為了高效,有時為了直接控制硬體,有些模組我們不得不直接用組合語言來編寫,並且對外提供呼叫的介面,隱藏細節,這其實就是內聯彙編。如何使用內聯彙編?我們就以 gcc 為例,一窺其中奧秘!一 關鍵字 如何讓 gcc 知道 中內嵌的彙編呢?借助關鍵字!來看下面的例子 asm volatile hlt a...

C中的內聯彙編學習

在從事嵌入式c語言的開發過程中為了提高效率經常會用到c語言的內聯彙編。在對dsp程式做優化時,將部分c 變為彙編指令可以大大提高程式效率。c語言簡潔易讀,容易組織規模較大的 而彙編效率高,gcc編譯器提供了一種擴充套件語法可以在c 中使用內聯彙編 inline assembly 其用 asm 來表示...