2012-04-03 79 views
0

我對Microchip PIC微控制器中的彙編編程有所瞭解,但我不是專家。x ++在裝配中比x = x + 1和x + = 1更有效嗎?

有人可以從以下3條語句中解釋我,這條語句在裝配中是最有效的(即耗時較少)。

x++ 
x = x + 1 
x += 1 

我相當熟悉C#和Java和我知道肯定有效率在上述3個語句沒有區別,當我們考慮的一個高級編程語言。但是當我們考慮組裝時,效率會有差異嗎?

謝謝

+8

取決於您如何將它們翻譯爲程序集? – Mat 2012-04-03 06:11:49

+3

爲什麼不嘗試反彙編你的代碼並檢查你自己?在gcc上使用'-S'選項 – 2012-04-03 06:12:18

+0

如果您只知道一些關於PIC彙編的知識,那麼您已經足夠了解它:它是使用最少代碼行的代碼。 – hplbsh 2012-04-03 06:32:14

回答

3

那些不是彙編語句,你工作在錯誤的抽象層次。

找出哪些類似C語句更快需要將它們編譯爲程序集,然後檢查

任何非braindead編譯器都會爲您提供所有三種情況下完全相同的代碼。

如果一個新空房禁地編譯器的話,是的,有幾乎肯定會是一些類似的差異:

inc [memloc] 

和:

lod r1, [memloc] 
inc r1 
sto [memloc], r1 
+0

謝謝paxdiablo ..我明白你的觀點..效率真的取決於編譯器以及微控制器或處理器的指令集。 – 2012-04-03 06:41:01

0

編譯器現在都足夠聰明到找到最好的解決方案,所以實際上都是一樣的。編譯器會將它們轉換成最快的彙編命令。所以不要這樣想。如果你正在編寫C#或Java代碼,這是你應該考慮的最後一件事。

2

有效率在上述3個語句沒有區別,當我們考慮的一個高級編程語言

這取決於你的「高層次」的定義。在諸如Python或Ruby之類的腳本語言中,我認爲x++優於x += 1x = x + 1,因爲x有最小符號表查找,並且沒有標量必須「拆箱」(將腳本語言1轉換爲程序集1)。對於C這樣的編譯語言,我期望所有這三條語句都會產生類似的彙編代碼,所以它們應該同樣有效。但是,這取決於您的編譯器及其配置,例如,如果您正在執行「調試」或「發佈」構建。

0

如果您問,如果這些在高級語言中使用時效率相同:假設您使用任何相當不錯的編譯器,它們將會是。

如果你問,如果使用三個不同的彙編指令類似於上述語句將同樣快,那麼可能不會。如果你的CPU有特殊的「inc」指令,那麼如果沒有其他的東西(現代的CPU通常只需要一個週期來完成這樣簡單的指令),那麼它可能比別人快一點,因爲指令可能更短,這就要求CPU從長期記憶。可以肯定的是,您應該檢查指令集手冊,其中經常指定時間。對於某些體系結構,您還可以獲得週期精確的模擬器,這應該能夠回答這些類型的問題。

相關問題