Xcode:运行 ASM

标签 xcode assembly

我有这个 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: Unknown use of instruction mnemonic without a size suffix



我在网上搜索了几个小时,但似乎没有人回答我的问题。

我正在运行 Xcode 5.0.2。

有谁知道我可能需要在 Xcode 中设置什么才能运行它?

最佳答案

等效的 GCC 样式的 asm 语句将是:

__asm__(
    "push %%eax\n\t"
    "push %%ebx\n\t"
    "push %%ecx\n\t"
    "mov %0,%%eax\n\t"
    "mov %1,%%ebx\n\t"
    "xor %%ebx,%%eax\n\t"
    "mov %%eax,%%ecx\n\t"
    "xor %%ebx,%%ecx\n\t"
    "mov %%ecx,%%ebx\n\t"
    "xor %%ebx,%%eax\n\t"
    "mov %%eax,%0\n\t"
    "mov %%ebx,%0\n\t"
    "pop %%ecx\n\t"
    "pop %%ebx\n\t"
    "pop %%eax"
    : "+m" (A), "+m" (B));

(我通过将堆栈中保存的值弹出回其原始寄存器来纠正了一个明显的错误。)

我不确定这个汇编声明的重点是什么。用三行 C/C++ 代码可以更有效地完成一些事情需要付出很多努力:
temp = A;
A = B;
B = temp;

如果我假装它做了一些有用的事情,而不仅仅是交换两个变量,那么我会建议摆脱这样明显不重要的 PUSH/POP 指令:
__asm__(
    "xor %1,%0\n\t"
    "mov %0,%2\n\t"
    "xor %1,%2\n\t"
    "mov %2,%1\n\t"
    "xor %1,%0"
    : "+r" (A), "+r" (B), "=r" (temp));

关于Xcode:运行 ASM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21030898/

相关文章:

com.apple.root.default-qos 中的 iOS 13 SIGABRT

arrays - 解开一个实际有值的可选时为零

assembly - 在汇编中反转字符串时遇到问题

assembly - DosBox 有问题,int 15h ah = 86h

ios - 在 Xcode 中编译应用程序时无法解决的链接器错误

ios - 无法加载 bundle “CheckoutTests”,因为它已损坏或缺少必要的资源。尝试重新安装 bundle

c++ - 可以使用 c++filt 将 demangled 名称写回 .s 文件本身吗?

assembly - 关于STM32 ARM Cortex M LDRB指令

gcc - Apple AS 和 ARM/Thumb ADDS 指令

iphone - 并排安装 xcode 4.4 和 xcode 4.5?