使用 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]
.
来访问操作数
我正在编写内联汇编,但遇到了一个我不知道如何修复的错误。 这部分代码会引发错误。应该是在“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]
.