天道酬勤,学无止境

如何在 xcode 6 中查看汇编代码(How to see assembly code in xcode 6)

问题

在 xcode 6 中使用 iOS 设备运行应用程序时,如何查看编译器生成的汇编代码。我应该在 xcode 中启用哪些设置才能查看汇编代码?

回答1

在 Xcode 选项中,

选择选项

调试->调试工作流->始终显示反汇编

在代码中要查看汇编代码的位置放置断点。 然后您可以在代码到达该断点时查看汇编代码。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Xcode Debugger:为什么只向我显示汇编程序?(Xcode Debugger: Why is it only showing me assembler?)
    问题 我刚开始使用Xcode开发Cocoa,并举了个世界示例。 我要完成“运行时调试”部分的第6步,这是 使用调试器工具栏中的“跳过”按钮,开始逐步执​​行代码。 随着每一行代码的执行,您可以检查程序的状态。 变量的值有时用红色绘制,以表示该值在最后一步中已被修改。 请注意,调试器在执行指示的行之前暂停。 每次暂停后,您可以添加其他断点,或选择“调试”>“重新启动”以终止应用程序并启动新的调试会话。 现在,在过去的一个小时中,我一直在努力工作的是,该调试器仅向我显示汇编代码。 我可以手动选择我的源代码文件,但是一旦单击“ Step over”,我就立即回到汇编器视图。 我一辈子都想不起来如何关闭汇编器,并让它向我展示我的源代码! 回答1 我知道这篇文章已有一百年历史了,但是如果有人想知道如何在最新的Xcode版本(而不是Xcode 3)中解决此问题,您将在Debug> Debug Workflow下找到名为Always Show Disassembly的适当设置。在Xcode 6及更高版本中。 确保选项未被选中。 在Xcode 5中,该选项在Debug> Debug Workflow下被标记为Show Disassemble when debugging 。 确保未选中“调试时显示反汇编”。 回到Xcode 4中,在“产品>调试工作流”下找到了“在调试时显示反汇编”设置。 再次
  • 如何在XCode中使用ARM汇编程序?(How do I use the ARM assembler in XCode?)
    问题 仅出于教育目的,我想向以ARM汇编语言编写的现有iPhone应用程序中添加一个功能。 通常,我不需要有关ARM汇编的教程,因为我已经阅读了太多本书。 我只是不知道如何实际运行代码! 我想做的是这样的: 没用的.h: void useless(); 没用的: useless: bx lr 如果这也可以在模拟器上正常运行,则可以...在模拟器上,.s文件将无法编译,因此我应该执行以下操作: 没用的: #if I_AM_ARM useless: bx lr #endif 无用的 #if !I_AM_ARM void useless() { } #endif 我知道我使用的语法已损坏,但是如何正确编写呢? (仅仅因为我想尝试一些内联汇编程序而在模拟器上中断应用程序是没有选择的……) 第二好的选择是使用内联汇编,但是我强烈希望使用非内联汇编。 谢谢! 编辑:我想学习ARM汇编,所以我想找到一种编译ARM汇编代码并执行ARM汇编代码的方法。 回答1 模拟器不使用手臂。 如果要在模拟器上运行x86_64程序集,则必须编写该程序集。 (大概)。 回答2 我终于找到了答案。 实际上并不难。 我只为32位ARM版本解决了它。 没用的.h: void useless(); 没用的: #ifdef __arm__ .syntax unified .globl _useless .align 2
  • xcode 调试 - 快速将汇编代码跳回到我的自定义代码(xcode debugging - quickly step over assembly code back to my custom code)
    问题 我还是 xcode 的新手。 我有“调试时显示反汇编”未选中,但我知道当我逐步执行我自己的代码时,当调用系统方法时,我仍然会经常被扔进汇编代码。 我的问题是......有没有什么方法可以快速将汇编代码跳过到我自己的自定义代码的NEXT行,而不是无休止地按F6或F8。 我知道,事先我可以在下一个要调用的自定义方法处设置一个新断点并按下运行按钮,但是当我快速单步执行我的代码时,我通常不知道调试器什么时候会抛出我进入汇编代码,当这种情况发生时,点击“运行到下一个断点”按钮为时已晚。 任何帮助表示赞赏。 编辑 - 感谢“继续到当前行”的建议,但通常当我尝试这样做时,我将光标放在我自己的代码行上,并且调试菜单下的“继续到当前行”命令是灰色的。 此外,我通常不知道代码执行将在哪里重新输入我自己的代码,因此我可以将光标放在无论如何都不会被调用的位置。 基本上我试图通过逐行逐步了解我的代码的执行顺序。 每次我被“抛出”进入解散我事先不知道执行顺序将在哪里重新输入我自己的自定义代码(其中大部分可能是其他人的代码)所以按继续通常会带我到构建和我没有人更明智地选择所走的道路。 我看到的唯一选择是无休止地按 Fn-F8,这是一种正确的痛苦。 我一定是遗漏了什么吗? 编辑 - 谢谢@Jim 的建议。 仍然没有运气,我试过你的代码(lldb)“break set -r .* -s MyBinary
  • 深入iOS系统底层之XCODE对汇编的支持介绍
    工欲善其事必先利其器 --《论语·卫灵公》 一个好的IDE不仅要提供舒适简洁和方便的源代码编辑环境,还要提供功能强大的调试环境。XCODE是目前来说对iOS应用开发支持的最好的IDE(虽然Visual Studio2017也开始支持iOS应用的开发了),毕竟XCODE和iOS都是苹果公司的亲生儿子。唯一要吐槽的就是系统和编译环境绑的太死了,每当手机操作系统的一个小升级,都需要去升级一个好几G的新版本程序,这确实是有点坑爹!目前市面上有很多反编译的工具,比如IDA、Hopper Disassembler等还有操作系统自带的工具诸如otool、lldb。这些工具里面有的擅长静态分析有的擅长调试的,这里就不展开分析了。如果在程序运行时去窥探一些系统内部实现以及做实时调试分析我觉得XCODE本身也非常的棒,既然深入系统我们必须要了解和学习一些关于汇编的东西,那么就必须要了解和掌握一些工具,而XCODE其实就是你手头上最方便的工具之一。 XCODE的汇编模式切换 你是否在联机运行时因为系统崩溃而出现过如下的画面: 不要慌!它其实就是XCODE的汇编模式的界面。我们不仅在程序崩溃时可以看到它,我们也可以人为的进入到这个界面模式里面。这篇文章更像是一个XCODE工具使用上的一些介绍,您可以经常在使用它们,也可能还从来没有接触和了解过它们。对于汇编代码和源代码之间的切换可以通过菜单:Debug -
  • 在 iphone 上编写 ARM 汇编代码的工作流程(Workflow for writing ARM assembly code on the iphone)
    问题 我想开始编写 ARM 汇编程序并在 iPhone 上运行它。 这不是为了在要发布到应用程序商店的应用程序中使用 - 基本上我想使用 ARM 和 iPhone 解决 ProjectEuler 上的问题,只是出于爱好和教育目的。 我该怎么做呢? 我一直无法想出一种使用任何手写臂来运行项目的方法。 回答1 我找不到有关如何专门为 iPhone 编写汇编代码的任何信息,但就像这里其他人所说的那样,您可以: 1) 在 C/C++/ObjC 代码中编写内联 asm 语句,或 2) 在 '.s' 文件中编写独立的汇编函数并将其添加到您的 XCode 源中,或 3) 为外部汇编程序编写独立的汇编函数,例如纳姆。 您在“.s”文件中编写汇编代码并使用 NASM 生成“.o”目标文件,并将目标文件与 XCode 中的项目链接。 因此,如果您只是尝试编写一些汇编指令,那么内联汇编程序将是最简单的方法,但是如果您打算编写多个汇编函数,那么我建议您使用独立的汇编文件。 如果您计划使用宏编写许多汇编函数并希望跨平台兼容性等,那么我建议使用 NASM 将您的汇编代码编译成目标文件。 因为我使用的是 XCode gcc 汇编器,与 NASM 相比它非常缺乏。 您可以在 http://www.nasm.us/ 免费获得 NASM 设置好汇编环境后,您需要学习如何编写 ARM 汇编代码! 因为 iPhone
  • 在Objective C程序(Xcode)中使用汇编代码(using assembly code inside Objective c program (Xcode))
    问题 有没有一种方法可以在Objective C程序中使用汇编代码。 我正在为OSX开发应用程序,并希望将汇编代码与Objective C代码一起使用。 我搜索了互联网,发现了这一点,但是我无法成功实现任何这些方法。 任何帮助将不胜感激。 回答1 是的当然。 您可以像在C语言中一样在Objective-C中使用GCC风格的内联汇编。您还可以在汇编源文件中定义函数,然后从Objective-C调用它们。 这是内联汇编的一个简单示例: int foo(int x, int y) { __asm("add %1, %0" : "+r" (x) : "r" (y)); return x; } 还有一个关于如何使用独立程序集文件的类似的最小示例: ** myOperation.h ** int myOperation(int x, int y); ** myOperation.s ** .text .globl _myOperation _myOperation: add %esi, %edi // add x and y mov %edi, %eax // move result to correct register for return value ret ** foo.c ** #include "myOperation.h" // include header for
  • 设置断点后,为什么我的xcode跳到程序集视图?(Why is my xcode jump to assembly view when break point set?)
    问题 当我尝试使用断点进行调试时,无论哪一行代码,它都会跳到这样的程序集视图。 我想要当前源代码行的亮点! 我该如何配置呢? 回答1 有时这是一个有用的功能,但是很容易关闭: Debug > Debug Workflow > Always Show Disassembly 在旧版本的Xcode(<6.1)中: Product > Debug Workflow > Show Disassembly When Debugging 回答2 我在Xcode 6.1中遇到了相同的问题,并通过以下操作解决了该问题: 调试->调试工作流程->取消检查始终显示反汇编 确保未选中“始终显示反汇编” 回答3 你可以试试这个 产品>调试>创建符号断点 回答4 我同意humphriesj关于Xcode 6.1中的“ Always Show Disassembly”(始终显示反汇编)的观点,并且确实起作用了一段时间。 但是对我来说,即使菜单中仍未选中它,它似乎也已重新打开。 我先打开它,然后再关闭它,最后我可以再次看到源代码。
  • Xcode 和 NASM 编码(Xcode and NASM coding)
    问题 我如何在 Xcode 中用汇编语言编写和构建程序? 我搜索它,但我没有成功。 你能帮助我吗? 如果无法在 xcode 中编写 NASM,请推荐一些好的 IDE。 回答1 自从您提出这个问题以来,这可能已经发生了变化,但目前,安装 Xcode 命令行工具(安装 Xcode 后)会安装NASM (Netwide Assembler)和GASM (GNU Assembler)。 要开始在汇编中编码,您有几个选项,具体取决于您在做什么:即,在 Xcode 中构建,或直接使用NASM或GASM在终端中构建。 Xcode 9.4.1 如果您想使用 IDE,您可以通过单击“文件 > 新文件”将程序集文件添加到 Xcode,然后搜索“程序集”,您将看到程序集文件类型。 或者,您可以添加一个空白文件,然后从文件检查器的“类型”下拉菜单中手动选择文件类型。 除非您的应用程序需要 Cocoa 框架,否则您应该在项目/目标创建期间创建命令行应用程序而不是 Cocoa 应用程序。 作为示例命令行程序: hello.asm(来自参考资料中列出的教程站点): global _start section .text _start: mov rax, 0x02000004 ; system call for write mov rdi, 1 ; file handle 1 is stdout mov rsi
  • Xcode4.5 汇编器无法编译 Xcode4.4 完美处理的文件(Xcode4.5 assembler fails to compile files that Xcode4.4 handled perfectly)
    问题 将 xcode 更新到 4.5 版本后出现错误 命令 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang 失败,退出代码为 1 更新后我读到了这样的错误,但在目标的构建设置中更改架构无济于事。 它可以在模拟器上运行,但不能在设备上运行。 整个错误 CompileC /Users/psitkowski/Library/Developer/Xcode/DerivedData/Jasiu2-gskaidiujznurtdqnebvtogjtdnd/Build/Intermediates/Jasiu2.build/Debug-iphoneos/Jasiu2.build/Objects-normal/armv7/maxvid_decode_armator.o_armator.o.普通armv7 assembler-with-cpp com.apple.compilers.llvm.clang.1_0.compiler cd /Users/psitkowski/Xcode/ksiazki/kopie/Jasiu2 setenv LANG en_US.US-ASCII setenv PATH "/Applications/Xcode.app/
  • 为什么Xcode断点不起作用?(Why aren't Xcode breakpoints functioning?)
    问题 我设置了断点,但是Xcode似乎忽略了它们。 回答1 首先,我100%同意较早的人说Load Symbols Lazily关闭“ Load Symbols Lazily 。 我还有两件事要补充。 (我的第一个建议听起来很明显,但是当有人第一次向我建议时,我的反应是这样的:“来吧,请,您真的以为我不会更好……哦。”) 确保您没有意外地将“ Active Build Configuration”设置为“ Release”。 在项目的图形树显示中的“目标”下,右键单击目标并执行“获取信息”。 查找一个名为“ Generate Debug Symbols”(或类似名称)的属性,并确保已选中该属性(也称为“ ON”)。 另外,您可以尝试查找(也在Target >> Get Info中)名为“ Debug Information Format”的属性,并将其设置为“带有dsym文件的小矮人”。 在目标>>获取信息下还有许多其他属性可能会影响您。 寻找诸如优化或压缩代码之类的东西,然后将其关闭(我假设您正在调试模式下工作,因此这不是不好的建议)。 另外,查找诸如剥离符号之类的内容,并确保其也处于关闭状态。 例如,对于调试目标,应将“ Strip Linked Product”设置为“ No”。 回答2 在Xcode 7中,对我有用的是: 确保“ Target > Scheme > Run
  • 使用 Xcode/LLDB 打印/调试 libc++ STL(Printing/Debugging libc++ STL with Xcode/LLDB)
    问题 我正在尝试在 Xcode 8 中使用 LLDB 来调试非常基本的 STL。 我曾经能够打印这样的矢量: p myvector[0] 查看第一个向量索引中的内容。 现在,当我这样做时,我收到此错误: error: Couldn't lookup symbols: __ZNSt3__16vectorI9my_classNS_9allocatorIS1_EEEixEm 相反,我必须输入: p myvector.__begin_[0] 以获得任何输出。 我尝试从 LLDB svn 存储库导入 libcxx.py 和 unordered_multi.py 脚本,但这似乎没有任何改变。 有没有人能够使用 libc++ 从 LLDB 获得任何有用的输出? 回答1 []是std::vector上的运算符方法,因此要打印您想要的表达式,lldb 必须能够调用[]方法。 这里的问题是 OS X 上的 STL 积极地内联它所能做的一切,而不是浪费空间来生产相同功能的外联副本。 这对于优化代码来说非常有用,但对于调试来说并不是那么好,因为它使调试器没有[]运算符可以调用。 这就是您看到的错误消息。 如果您只想查看此向量中的元素,可以使用 lldb “STL 数据格式化程序”为您完成这项工作。 他们知道大多数 STL 类型是如何布局的,并且可以打印大多数容器类型的元素。 例如: (lldb) expr
  • 如何使用Visual C ++查看代码背后的程序集?(How to view the assembly behind the code using Visual C++?)
    问题 我正在阅读另一个与两行代码的效率有关的问题,OP表示他查看了代码后面的汇编,并且这两行在汇编中是相同的。 除了题外话,我该如何查看在编译程序时创建的汇编代码。 我正在使用Microsoft的Visual C ++,但我也想知道是否可以查看用Visual Basic编写的代码背后的程序集。 因此,如何查看用高级语言(如C ++和Visual Basic)编写的程序背后的汇编代码? 回答1 有几种方法: 您通常可以在Visual Studio中调试C ++时(也可以在Eclipse中)看到汇编代码。 为此,在Visual Studio中,在有问题的代码上放置一个断点,当调试器命中它时,请单击并找到“转到程序集”(或按CTRL + ALT + D)。 第二种方法是在编译时生成程序集列表。 为此,请转到项目设置-> C / C ++->输出文件-> ASM列表位置,然后填写文件名。 还要选择“汇编输出”到“用源代码汇编”。 编译程序并使用任何第三方调试器。 您可以为此使用OllyDbg或WinDbg。 您也可以使用IDA(交互式反汇编程序)。 但这是做到这一点的硬性方法。 回答2 补充说明:Debug汇编程序输出与Release 1的输出之间有很大差异。 第一个很好的方法是学习编译器如何从C ++生成汇编代码。 第二篇是学习编译器如何优化各种C ++结构的好方法。 在这种情况下,从C
  • 如何在 Xcode 中查看 PhoneGap 应用程序的 javascript 错误?(How to see the javascript errors of PhoneGap app in Xcode?)
    问题 我想在 Xcode 中调试我的 PhoneGap 应用程序,但它的控制台无法显示 javascript 错误。 回答1 在 Cordova/PhoneGap 应用程序中查看和调试 JavaScript 错误的最优雅方法是将 Safari 浏览器中的 Web Inspector 附加到 iOS 应用程序中的 Web 视图(但是,就像 Tom Clarkson 已经提到的,您至少需要 iOS 6 )。 在 iPad 或 iPhone 上,使用设置应用程序在 Safari 的高级设置中启用 Web Inspector 通过 USB 将您的设备连接到 Mac(然后它会出现在 Safari 的“开发”菜单下) 启动您的应用程序导航到要调试的 Web 视图在 Mac 上,从 Safari 开发菜单中,从其子菜单中选择您的设备和应用程序(其 HTML 页面)的名称将打开一个 Web Inspector 窗口,使您能够浏览 DOM、设置断点等。 关于设置的 Apples 文档 一个彻底的第三方教程 或者,您可以在安装 iOS WebKit 调试代理后将 Chrome 的 Web Inspector 连接到 iOS 设备。 这也开启了从 Linux 或 Windows 进行检查的能力。 如今,远程访问 iOS 的 HTML、CSS 和 JavaScript 变得更加灵活
  • 文件中的Xcode 8断点不起作用(Xcode 8 Breakpoint in file not working)
    问题 我的 Xcode 项目中有一个文件SignInViewController.swift ,它突然开始没有在断点处停止。 我在viewDidLoad()有一个断点,在viewDidAppear()有一些断点。 我在两个函数中都有几个print()调用以确保它们正在执行。 断点在包括AppDelegate.swift在内的其他文件中工作正常。 有一点,当我试图弄清楚出了什么问题时,我注意到在构建项目时会出现一个错误,指出Invalid redeclaration of 'signInViewController.swift' ,然后在构建完成之前消失,应用程序将正常运行,文件中的断点除外。 signInViewController.swift是几个月前文件的旧名称,然后我将其重命名为SignInViewController.swift 。 在断点问题发生之前我还没有看到它,并且自从我清理了项目的构建文件夹和 Xcode 的派生数据以来,我一直无法复制。 我有一种感觉,它正在考虑问题,但我不确定如何/为什么。 无论如何,这是我已经尝试过的事情。 它们中的大多数只是用于一般情况下不起作用的断点,但我想我应该列出它们,即使情况并非如此: 清洁工程清理构建文件夹清除 Xcode 的 DerivedData 确保断点已启用(Cmd Y)
  • 如何查看我使用的是哪个版本的Swift?(How do I see which version of Swift I'm using?)
    问题 我刚刚在Xcode中创建了一个新的Swift项目。 我想知道它正在使用哪个版本的Swift。 如何在Xcode或终端中查看我在项目中使用的Swift的哪个版本? 回答1 项目构建设置有一个块“ Swift Compiler-Languages”,该块以键值格式存储有关Swift语言版本的信息。 它将显示您Xcode的所有可用(受支持的)Swift语言版本和活动版本(同时带有一个勾号)。 项目►(选择项目目标)►构建设置►(在搜索栏中键入'swift_version')Swift编译器语言►Swift语言版本►单击“语言”列表将其打开(列表中的任何一个都会出现一个勾号) -item,它将是当前的快速版本)。 查看此快照,以方便理解: 借助以下代码,您可以以编程方式找到您的项目支持的Swift版本。 #if swift(>=5.3) print("Hello, Swift 5.3") #elseif swift(>=5.2) print("Hello, Swift 5.2") #elseif swift(>=5.1) print("Hello, Swift 5.1") #elseif swift(>=5.0) print("Hello, Swift 5.0") #elseif swift(>=4.2) print("Hello, Swift 4.2") #elseif swift
  • 如何在没有扩展内联 asm 的情况下在 gcc 内联汇编中声明和初始化局部变量?(How to declare and initialize local variables in gcc inline assembly without extended inline asm?)
    问题 我知道这是一个非常基本的问题,但我真的很坚持。 事实上,我绝对是 GCC 语法的新手。 我想在不使用扩展内联汇编的情况下拥有局部变量(带标签的堆栈地址)。 类似于以下英特尔语法中的代码: DATA1 DB 100 MOV AL, DATA1 这是我猜可以在 GCC 中替代的代码: int someFunction(int x) { __asm__ volatile( "function1:" ".data;" ".2byte $4 data1 ;" ".text;" "pushq %rbp;" "movq %rsp , %rbp ;" "movl var , %eax;" // this is source of error "popq %rbp;" "leaveq;" "retq ; " ); } 但此代码导致此错误: 找不到架构 x86_64 的符号 我可以在 x86 中使用全局变量,但在 x64 或 x86_x64 中出现相同的结果。 设置:LLVM 4.1; Xcode 4 中使用的可可 什么是正确的语法? 回答1 GCC 内联汇编器不支持局部变量,使用 GCC 的扩展语法。 如果您对 AT&T 语法感到不舒服,有一些方法可以在 GCC 上使用 Intel 语法。 这是关于 GCC asm 的极好指南。
  • 如何在 Xcode 6 中获得代码覆盖率?(How to get code coverage in Xcode 6?)
    问题 我的测试是 XCTests,我使用的是 Objective-C 而不是 Swift。 我看过一些解决这个话题的文章,但似乎专注于旧版本的 Xcode,例如: 使用 Xcode 可视化代码覆盖率 Xcode 5.1 的代码覆盖率已修复 在 Xcode 6 上获得代码覆盖率的推荐方法是什么? Apple 是否有内置的代码覆盖功能,也许是通过 OSX Server 的 Xcode CI? 回答1 看看 frankencover.it 可以从开发人员的 cmd-line 或 CI 构建服务器运行的简单脚本。 生成控制台输出以及 HTML 格式的详细报告。 这可以在本地查看或由构建服务器作为工件发布。 可选地包括一个检查器,如果不满足要求的覆盖率,它将“失败”构建。 (仅反馈。这是查看覆盖率并寻找可以添加或减少所需数量的有用测试的提示。任一选项都可能是正确的。) 免费用于商业和开源项目。 无需托管、赞助或订阅。 用法: FTW,它有一个易于记忆的 dogue-speak-esque 命令行界面: groovy http://appsquickly.github.io/frankencover.it/with --source-dir MyProject/Source 终端输出: HTML 报告: 回答2 我们为此使用 Xcoverage ..检查下面的链接,如果这有帮助
  • 如何在xcode控制台上查看phonegap javascript日志消息(how to see phonegap javascript log messages on xcode console)
    问题 我正在尝试在Xcode上使用phonegap开发一个基本的hello world应用程序。 但是我在Xcode控制台上看不到日志消息。 我已经尝试过console.log和debug.log,但是它们对我没有用? 如何在xcode控制台上查看javascript日志消息? 回答1 在Phonegap 3.0中,您必须为console.log添加一个插件才能在xcode控制台中工作。 $ phonegap local plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-console.git 更多信息:http://docs.phonegap.com/zh-CN/edge/guide_cli_index.md.html#The%20Command-line%20Interface 回答2 在实际的iDevice上或在iOS模拟器中,转到Settings > Safari > Advanced ,然后打开“ Web Inspector 。 桌面Safari: Safari > Preferences > Advanced然后选中“ Show develop menu in menu bar复选框。 现在,您已经打开iOS模拟器或将iDevice连接到Mac,然后开始使用网站上的Web
  • 如何在iPhone上进行内联汇编?(How do I do inline assembly on the IPhone?)
    问题 怎么做? 我需要采取什么步骤,要考虑哪些陷阱和陷阱? 回答1 由于Apple Devforums提供了一些内部帮助,因此我已经做到了这一点,如果您是专门的iPhone开发人员,则应该注册。 首先是__asm __() ,而不是普通的asm() 。 其次,默认情况下,XCode生成一个编译目标,该目标针对ARM Thumb指令集编译内联汇编,因此usat未被识别为适当的指令。 要解决此问题,请在目标服务器上执行“获取信息”。 向下滚动到“ GCC 4.0-代码生成”部分,然后取消选中“为Thumb编译”。 然后,如果将Active SDK设置为“ Device”,则下面的代码片段将可以正常编译 inline int asm_saturate_to_255 (int a) { int y; __asm__("usat %0, #8, %1\n\t" : "=r"(y) : "r"(a)); return y; } 自然,现在它无法与iPhone Simulator一起使用。 但是TargetConditionals.h定义了您可以#ifdef针对。 即TARGET_OS_IPHONE和TARGET_IPHONE_SIMULATOR 。 回答2 我写了很多ARM Cortex-A8汇编代码。 iPhone上的CPU是ARM11(afaik),因此核心指令集相同。 您到底在找什么?
  • iOS开发你不知道的事-编译&链接!
    对于平常的应用程序开发,我们很少需要关注编译和链接过程。我们平常Xcode开发就是集成的的开发环境(IDE),这样的IDE一般都将编译和链接的过程一步完成,通常将这种编译和链接合并在一起的过程称为构建,即使使用命令行来编译一个源代码文件,简单的一句gcc hello.c命令就包含了非常复杂的过程!正是因为集成开发环境的强大,很多系统软件的运行机制与机理被掩盖,其程序的很多莫名其妙的错误让我们无所适从,面对程序运行时种种性能瓶颈我们束手无策。我们看到的是这些问题的现象,但是却很难看清本质,所有这些问题的本质就是软件运行背后的机理及支撑软件运行的各种平台和工具,如果能深入了解这些机制,那么解决这些问题就能够游刃有余。作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS开发交流群:130595548,不管你是小白还是大牛都欢迎入驻 ,让我们一起进步,共同发展!(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!)编译流程分析现在我们通过一个C语言的经典例子,来具体了解一下这些机制:#include <stdio.h>int main(){ printf("Hello World"); return 0; }在linux下只需要一个简单的命令(假设源代码文件名为hello.c):$ gcc hello.c $ ./a.out Hello