iOS汇编研究-1-初识汇编 一、什么是汇编语言 二、汇编语言的特点 三、iOS设备与汇编语言的版本 四、内存 五、学习汇编需要了解的几个内容

一、什么是汇编语言

        人类操作计算的能力需要使用一种方式来表达、需要使用一种方式来实现。目前,都是通过编程来实现的,简单来说,就是告知计算机要遇到什么情况怎么处理。既然是告知,那么就需要使用语言。计算能够直接听懂的语言就是机器语言,什么是机器语言?其实就是一大堆的01序列。例如,01010101011000。那么这句话表达的是什么意思呢?人类是不是很难看懂!
        所以人类就对机器语言进行了一些简化。例如,机器语言01000000,就使用add来代替;例如,机器语言01000000,就使用sub来代替。这种把机器能沟听懂的只包含01序列的语言,使用助记符来优化的语言就是汇编语言。
        虽然汇编语言相对于机器语言来说更加易懂,但是对人类依然不是很友好。所以,人类就对汇编语言进行优化,进而发展出高级语言,像C、C++、Java、OC、Swift等。


二、汇编语言的特点

        与高级语言相比,汇编语言具有以下特点:

  • 高级语言操作的是内存
  • 汇编语言可以操作内存和寄存器
  • 汇编语言不可移植(其与具体的芯片相关,所以不可移植)

三、iOS设备与汇编语言的版本

编号 汇编语言的版本 适用设备
1 armv6 iPhone、iPhone2、iPhone3G,第一代iPod Touch、第二代iPod Touch
2 armv7 iPhone3GS、iPhone4、iPhone4S,iPad、iPad2,iPad3、iPad mini,iPod Touch 3G、iPod Touch 4
3 armv8 iPhone5、iPhone 5C,iPad 4
4 armv64 iPhone5S 以后,iPad 4以后

备注
本文的汇编只包含Arm64

四、内存

        一个进程可用的地址空间如下图所示。



        对于程序员来说,其看到的内存空间是连续的,实际内存的空间是破碎的——由于同时有多个进程存在,每个进程都会占用不同的内存空间,但是这个问题由操作系统为我们解决——它提供了虚拟内存。一般情况下,在程序员眼中,内存作为一个连续的内存空间使用即可。

五、学习汇编需要了解的几个内容

5.1 寄存器

        对于日常使用高级语言的程序员来说,其看到的是连续的内存空间。但是对于使用汇编的程序原来说,其面对的主要是寄存器。事实上,CPU内部也是分为运算器、控制器、寄存器、多级缓存。对于基于汇编语言的程序开发来说,寄存器是必须了解的一个概念,下文会对寄存器进行详细解释。

5.2 汇编指令

        高级语言一般使用if、for等关键字来表达;对于汇编语言来说,我们使用汇编指令来进行表达,例如sub、mov、add等。我们所学习的arm系列汇编是精简指令集的,其比intel系列的汇编要件的多。对于汇编指令可以先学习简单的几个,然后再碰到不理解的,就去查资料。
        ARM汇编开发指用ARM提供的汇编指令,进行ARM程序的开发。ARM汇编开发,有两种开发方式,一种是使用ARM汇编,一种是使用ARM GNU汇编。两种汇编开发,使用的汇编指令是完全一样的,区别是宏指令,伪指令,伪操作不一样。其实两种开发方式的区别在于所使用的编译工具不一样。对于ARM汇编,使用的是ARM公司开发的编译器,而ARM GNU汇编,是使用GNU为ARM指令集开发的编译器,也就是arm-gcc。不过这些差异一般都集中在宏指令,伪指令,伪操作几方面,对于我们入门学习影响不大。

5.3 堆栈

        我们都知道函数调用涉及到堆栈的管理,理解函数调用、嵌套函数等需要了解堆栈。下图展示了函数A调用函数B后的堆栈示意图。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章