c++ - C++代码中的汇编代码

标签 c++ gcc assembly g++ inline-assembly

如何将英特尔 asm 代码放入我的 C++ 应用程序中? 我正在使用 Dev-C++。

我想这样做:

int temp = 0;
int usernb = 3;

pusha
mov eax, temp
inc eax
xor usernb, usernb
mov eax, usernb
popa

这只是一个例子。 我怎么能那样做?

更新: 它在 Visual Studio 中的外观如何?

最佳答案

您可以在此处找到完整的指南 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);
}

之后你需要用类似的东西编译:

gcc -m32 -std=c99 -Wall -Wextra -masm=intel -o casm casmt.c && ./casm && echo $?
output:
0

您需要使用 -masm=intel 标志进行编译,因为您需要使用 intel 汇编语法:)

关于c++ - C++代码中的汇编代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6038312/

相关文章:

c - 了解基址指针和堆栈指针 : In Context with gcc Output

C++17 模板参数推导失败

c++ - 为包装字符串流的类重载 ostream 运算符

c - 无符号整数位域移位产生有符号整数

c++ - 内联成员函数使用的静态全局变量

c - 当您使用稍后分配给全局的临时值时,GCC 不会将内联汇编 "=g"输出优化为内存操作数?

c++ - 深度复制 c++ - 如果给出指向该类的指针,则复制该类

c++ - 为什么模板只能在头文件中实现?

c - 如果 C 标准说禁止使用空格,为什么 clang 和 gcc 只在反斜杠后有空格时发出警告?

c# - 两个排序整数数组的快速交集