【发布时间】:2014-01-09 20:54:51
【问题描述】:
我有这个 ASM,我一直试图在 Xcode 中运行但没有成功:
_asm
{
push eax
push ebx
push ecx
mov eax,[A]
mov ebx,[B]
xor eax,ebx
mov ecx,eax
xor ecx,ebx
mov ebx,ecx
xor eax,ebx
mov [A],eax
mov [B],ebx
pop eax
pop ebx
pop ecx
}
我已尝试将其更改为__asm__,但错误仍然存在:
inline asm:6:2: 未知使用没有大小后缀的指令助记符
我在网上搜索了几个小时,但似乎没有人回答我的问题。
我正在运行 Xcode 5.0.2。
有谁知道我可能需要在 Xcode 中设置什么才能运行它?
【问题讨论】:
-
听起来编译器期待
gas语法(其中每条指令都有一个显示其大小的后缀,寄存器名称以%开头,源操作数和目标操作数颠倒了)。它看起来像pushl %eaxmovl (A), %eax等等,或者非常接近的东西。 -
你可以说
-Xassembler -msyntax=intel让它识别你拥有的东西。 -
它需要的远不止这些。请参阅en.wikibooks.org/wiki/X86_Assembly/GAS_Syntax 了解更多信息。
-
在为 x86 编写汇编程序时,有两种常见的格式:intel 格式和 att 格式。这些格式之间存在许多差异(例如 Unheilig 提到的 %)。根据您的汇编程序,您可以要求它使用一种格式或另一种格式。您发布的代码看起来像英特尔格式。错误消息清楚地表明它正在为 att 格式编译。您要么需要告诉编译器使用 intel 格式(正如 cHao 试图建议的那样),要么以 att 格式重新编写代码。两种格式都有很多参考资料(请查看 google)。