如何将英特尔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