我一直试图在Xcode中运行这个ASM,但没有成功:
_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__,但错误仍然是持久的:
内联asm:6:2:指令助记符的未知用法,没有大小后缀
我在网上搜索了几个小时,但似乎没有人回答我的问题。
我正在运行Xcode 5.0.2。
有人知道我可能需要在Xcode中设置什么才能运行吗?
发布于 2015-04-09 05:18:23
相当于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;如果我假装它做了一些有用的事情,而不仅仅是交换了两个变量,那么我建议去掉这样的明显不重要的推送/弹出指令:
__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));https://stackoverflow.com/questions/21030898
复制相似问题