使用 GCC Intel Assembly 时出错:+ 的无效操作数(.text 和 UND 部分)

Error using GCC Intel Assembly: invalid operands (.text and UND sections) for +

我正在编写内联汇编,但遇到了一个我不知道如何修复的错误。 这部分代码会引发错误。应该是在“source”和“array”地址加上“i”,将“source”处的字节内容复制到“array”。

int main()
{
    char* _source = new char [1];
    _source[0] = 1;
    char* array = new char[1];
    unsigned int i = 0;
    __asm volatile (
        "mov eax, $[source] \n\t"
        "add eax, $[i] \n\t"
        "mov bh, [eax] \n\t"
        "mov ecx, $[array] \n\t"
        "add ecx, $[i] \n\t"
        "mov [ecx], bh \n\t"
        :
        : "r" "source" (_source), "r" "array" (array), "r" "i" (i)
        : "eax", "bh", "ecx", "memory"
    );
}

此代码使用 gcc 执行。

gcc -m32 -masm=intel -o test.cpp 

以及出现的错误

C:\Users\geish\AppData\Local\Temp\ccMCDck3.s:34: Error: invalid operands (.text and *UND* sections) for `+'
C:\Users\geish\AppData\Local\Temp\ccMCDck3.s:35: Error: invalid operands (.text and *UND* sections) for `+'
C:\Users\geish\AppData\Local\Temp\ccMCDck3.s:37: Error: invalid operands (.text and *UND* sections) for `+'
C:\Users\user\AppData\Local\Temp\ccMCDck3.s:38: Error: invalid operands (.text and *UND* sections) for `+'
C:\Users\user\AppData\Local\Temp\ccMCDck3.s:56: Error: invalid operands (.text and *UND* sections) for `+'
C:\Users\user\AppData\Local\Temp\ccMCDck3.s:57: Error: invalid operands (.text and *UND* sections) for `+'
C:\Users\user\AppData\Local\Temp\ccMCDck3.s:59: Error: invalid operands (.text and *UND* sections) for `+'
C:\Users\user\AppData\Local\Temp\ccMCDck3.s:60: Error: invalid operands (.text and *UND* sections) for `+'

您对命名操作数的使用在某些方面是错误的。您应该将操作数指定为:[source] "r" (_source),而不是 "r" "source" (_source),其中 [source] 指定其名称,_source 是 C 变量,"r" 是常量使用。您应该使用 %[source] 而不是 $[source].

来访问操作数