无法使用字符串变量中的指令执行内联汇编程序

时间:2017-11-17 17:56:11

标签: c gcc assembly inline-assembly

我尝试执行内联汇编,将变量作为输入

void main(void)
{
    char a[20] = "mov edx, 88";

    asm("%[a]" : : [a]"r"(a));
}

但是:

gcc a.c -masm=intel
Error: no such instruction: `eax'

我该如何做到这一点?

1 个答案:

答案 0 :(得分:0)

指令必须是字符串文字的形式(实际写入的字符串,char数组的名称是指针btw)。 除此之外你有一般的想法:)

#include <stdio.h>

int main(int argc, char ** argv){
char a[20] = "nice try:)";
char * dst;

asm("mov %[dst], %[src]\n\t"
    : [dst]"=r" (dst) : [src]"r"(a));

printf("%s\n", dst);
return 0;
}

和一个有用的链接:       https://dmalcolm.fedorapeople.org/gcc/2015-08-31/rst-experiment/how-to-use-inline-assembly-language-in-c-code.html