Xcode:运行ASM

我有这个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,%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));

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...