首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇编程序(.s)代码中用于iPhone的条件编译-如何编译?

汇编程序(.s)代码中用于iPhone的条件编译-如何编译?
EN

Stack Overflow用户
提问于 2009-11-10 17:47:15
回答 2查看 3.4K关注 0票数 2

我在.s文件中有几行汇编程序arm代码。我只需要打几个电话。当为设备构建时,它工作得很好,但是当我切换到iPhone模拟器时,我会得到“没有这样的指令”错误。我尝试有条件地编译.s文件的部分内容:

代码语言:javascript
复制
#if !TARGET_IPHONE_SIMULATOR

但是汇编程序不识别这些预处理器指令(当然),也不识别我能记住或找到工作的汇编程序的任何条件编译技术,所以我现在绞尽脑汁在为模拟器构建时如何避免编译那个汇编程序代码。我在Xcode中也看不到一个项目选项,它允许我根据目标平台编译文件或不编译文件。

解决:

我所缺少的只是汇编程序文件中正确的#导入。我没有考虑添加它,因为Xcode语法用绿色(注释)突出显示了任何预处理器指令,这让我假设这些命令实际上工作得很好,却不被识别。

这样做是可行的:

代码语言:javascript
复制
#import "TargetConditionals.h"

#if !TARGET_IPHONE_SIMULATOR

... asm code here ...

#endif
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-10 18:01:25

你用一个预处理器宏来做。它们是在TargetConditionals.h TARGET_IPHONE_SIMULATOR中定义的!(不过,您确实需要将它包括在内。)

票数 2
EN

Stack Overflow用户

发布于 2011-05-30 21:51:28

下面是我用来检测手臂和拇指对模拟器的代码:

代码语言:javascript
复制
#include "TargetConditionals.h"

#if defined(__arm__)
# if defined(__thumb__)
#  define COMPILE_ARM_THUMB_ASM 1
# else
#  define COMPILE_ARM_ASM 1
# endif
#endif

#if TARGET_IPHONE_SIMULATOR
  // Simulator defines
#else
  // ARM or Thumb mode defines
#endif

//以下是如何使用它

代码语言:javascript
复制
uint32_t
test_compare_shifted_operand(uint32_t w1) {
  uint32_t local;
#if defined(COMPILE_ARM_ASM)
  const uint32_t shifted = (1 << 8);
  __asm__ __volatile__ (
                        "mov %[w2], #1\n\t"
                        "cmp %[w2], %[w1], lsr #8\n\t"
                        "moveq %[w2], #10\n\t"
                        "movne %[w2], #11\n\t"
                        : \
                        [w1] "+l" (w1),
                        [w2] "+l" (local)
                        : \
                        [shifted] "l" (shifted)
                        );
#else // COMPILE_ARM_ASM
  if ((w1 >> 8) == 1) {
    local = 10;
  } else {
    local = 11;
  }
#endif // COMPILE_ARM_ASM  
  return local;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1709850

复制
相关文章

相似问题

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