2012-10-14 45 views
0

如何解析表達式並將其放入寄存器,在內聯程序集中使用它,甚至再次使用它並將它放在某處?C++ - 將表達式註冊並在程序集中使用

例如:

EAX=a[i]; //Any expression that valid in C++ 
__asm xor eax,0xFFFF //Do something with this 
b[i]=EAX; //And then put it in some variable. 

順便說一句,原因是性能。

+0

取決於編譯器。 [MSVC]的文檔(http://msdn.microsoft.com/en-us/library/4ks26t93.aspx),[GCC](http://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html ),[GCC再次](http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html)。但是現在編譯器在大多數情況下都可以優化代碼進入程序集。 – DCoder

+0

好處是,編譯器比你聰明,而且'b [i] = a [i] xor 0xfff;'是要走的路。 – elmigranto

+0

@DCoder是的,我知道它。我在反彙編中看到,我可以製作更好的代碼。 (將3個動作與3個動作相結合) – DividedByZero

回答

2

幾個編譯器有編譯器具體的方法來完成這一點。但它幾乎是不值得的。

有原因列表爲什麼這是幾乎從來不值得做的事情:

  • 編譯器通常會產生更好的代碼,你可以寫的大部分時間。
  • 即使沒有,也可以通過稍微調整代碼來說服編譯器編寫至少與編寫代碼一樣好的代碼,並保持程序的可移植性。
  • 具有感知性能問題的代碼實際上並不重要,因爲程序花費了0.01%的時間。
  • 你希望你的程序保持標準的C++,並且不希望使用大量的#ifdef警衛來混淆它。

你展示的例子不是非常有說服力的。

相關問題