如何將英特爾asm代碼放入我的C++應用程序中? 我正在使用Dev-C++。C++代碼中的彙編代碼
我想做某事這樣的:
int temp = 0;
int usernb = 3;
pusha
mov eax, temp
inc eax
xor usernb, usernb
mov eax, usernb
popa
這是唯一的例子。 我該怎麼辦?
UPDATE: 它在Visual Studio中的外觀如何?
如何將英特爾asm代碼放入我的C++應用程序中? 我正在使用Dev-C++。C++代碼中的彙編代碼
我想做某事這樣的:
int temp = 0;
int usernb = 3;
pusha
mov eax, temp
inc eax
xor usernb, usernb
mov eax, usernb
popa
這是唯一的例子。 我該怎麼辦?
UPDATE: 它在Visual Studio中的外觀如何?
更新:它在Visual Studio中看起來如何?
如果您正在構建64位,則無法在Visual Studio中使用內聯彙編。如果您正在構建32位,那麼您使用__asm
來執行嵌入。
通常,使用內聯ASM是一個壞主意。
這裏有一個簡單的例子,以示對GCC /開發-C語法++:
int main(void)
{
int x = 10, y;
asm ("movl %1, %%eax;"
"movl %%eax, %0;"
:"=r"(y) /* y is output operand */
:"r"(x) /* x is input operand */
:"%eax"); /* %eax is clobbered register */
}
這取決於你的編譯器。但是從你的標籤我猜你使用gcc/g ++,那麼你可以使用gcc inline assembler。但是它的語法很奇怪,與intel的語法有些不同,儘管它達到了相同的效果。
編輯:隨着Visual Studio(或Visual C++編譯器)它變得更容易,因爲它使用通常的英特爾語法。
您可以在這裏找到http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
#include <stdlib.h>
int main()
{
int temp = 0;
int usernb = 3;
__asm__ volatile (
"pusha \n"
"mov eax, %0 \n"
"inc eax \n"
"mov ecx, %1 \n"
"xor ecx, %1 \n"
"mov %1, ecx \n"
"mov eax, %1 \n"
"popa \n"
: // no output
: "m" (temp), "m" (usernb)); // input
exit(0);
}
之後,一個完整的HOWTO,你需要的東西,如編譯:
gcc -m32 -std=c99 -Wall -Wextra -masm=intel -o casm casmt.c && ./casm && echo $?
output:
0
需要,因爲要與-masm =英特爾標誌編譯英特爾彙編語法:)
有沒有一種寫作方法可以在微軟的visual studio C++編譯器上運行? – WiSaGaN 2013-11-06 08:42:48
DevC++不是編譯器。它附帶一個**非常老的**和**非常差的MinGW 3.x副本。你可能應該得到一個最近的MinGW編譯並手動使用它。請注意,任何嵌入式asm都將是編譯器特定的。 (而且建議你真的不這樣做,因爲編譯器生產的ASM比現在大多數人生產的更好)# – 2011-05-17 23:35:46
@Everyone:[''Bloodshed Dev-C++是一個全功能的C/C++編程語言集成開發環境(IDE) 。它使用GCC(GNU編譯器集合)的Mingw端口作爲它的編譯器。 Dev-C++也可以與Cygwin或任何其他基於GCC的編譯器結合使用。](http://www.bloodshed.net/devcpp.html) – sehe 2011-05-17 23:37:16
@Sehe:我相信這就是我所說的。 :) – 2011-05-17 23:43:43