ios汇编教程1

form http://www.raywenderlich.com/37181/ios-assembly-tutorial 

当你写objective-c代码的时候,它最终将会变成机器码,ARM CPU能理解的1和0,而在objective-c代码和机器码之间,还有一门人类可以读懂的语言——汇编。

理解汇编可以帮助你很好地调试和优化你的代码,帮助你计算objective-c的运行时间,当然也可以满足你想深入窥视底层的好奇心。
在本ios汇编教程内,你可以学习到:
汇编是神马——你为什么需要关注它。
如何读懂汇编——特别是从objective-c方法生成的汇编语句。
如何从汇编的角度来调试程序——这对洞悉程序的运行以及查找了解bug和crash是如何产生的有很大的帮助。
为了能够从本教程获得更多,你必须已经熟悉objective-c编程,你也必须了解一些简单的计算机科学的概念,比如栈,CPU以及他们是如何工作的。如果你对CPU不熟悉,你可能需要停下来先去 http://www.howstuffworks.com/microprocessor.htm 看看相关的知识。打开你的xcode,准备和我一起深入ARM内部一窥究竟吧。
起始:神马是汇编?
objective-c通常被认为是一门高级语言。你的objective-c代码被编译器编译成汇编代码:低级,但是不是最低级。
这个汇编代码会被汇编器汇编成机器码,也就是CPU可以读懂的1和0。幸运的是,你不需要担心机器码,但是深入理解汇编在某些时候是相当有用的。
每个汇编指令都被设计来告诉CPU执行一个命令,比如“把这两个数相加”或者“取出这部门内存中的内容”。
除了主要的内存——比如iphone5的1G内存、又或许你的Mac上面的可能有的8G(又或者是其他大小),CPUs同样也有一点点可以被快速访问的内存。这些内存被分给寄存器(registers),就像是可以存放某个值的常量。
所有的ios设备(事实上,几乎现在所有的移动设备)使用基于ARM架构的CPUs。幸运的是,这是一个很容易读懂的指令集,尤其是因为它属于精简指令集,这意味这它只需要使用很少的指令。不管如何,它比x86指令集要易读得多。
一个汇编指令(或者语句)就像下面这样:
mov r0 #42
汇编有很多的指令和操作码,mov是其中之一,负责move数据,在ARM汇编中,目标地址是放在前面的,所以上面的指令就是move 42 到寄存器ro中。思考下面这个例子:
ldr r2 , [ r0 ]
ldr     r3 , [ r1
add     r4 , r2 , r3
不用担心,我不是要你们现在就理解上面这段程序。但是你应该可以大概的揣摩出上面这段代码是做神马的。这段指令是从内存中加载两个值,将他们存储在寄存器r2和r3中,然后将他们两个相加,并将结果存在寄存器r4中。
现在你知道学习汇编并不恐怖了吧?让我们来再深入一点吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值