首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xcode:运行ASM

Xcode:运行ASM
EN

Stack Overflow用户
提问于 2014-01-09 20:54:51
回答 1查看 4.2K关注 0票数 13

我一直试图在Xcode中运行这个ASM,但没有成功:

代码语言:javascript
复制
_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中设置什么才能运行吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-09 05:18:23

相当于GCC风格的asm声明如下:

代码语言:javascript
复制
__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++三行代码中更有效地完成的事情需要付出很大的努力:

代码语言:javascript
复制
temp = A;
A = B;
B = temp;

如果我假装它做了一些有用的事情,而不仅仅是交换了两个变量,那么我建议去掉这样的明显不重要的推送/弹出指令:

代码语言:javascript
复制
__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));
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21030898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档