汇编的种类:
-
8086(处理器是16bit的cpu)(16位)
-
Win32汇编:
-
Win64汇编
-
ARM汇编(嵌入式、MAC,iOS)
-
CUP架构:(CPU不同的型号)不同的cpu架构对应不同的cup指令集,M1系列同iPhone同架构(ARM)
-
iPhone使用的CPU架构,但是不同的设备是有差异的,因为CPU的架构不同
| 架构 | 设备 |
|---|---|
| armv6 | iPhone、iPhone2、iPhone3G、第一代、第二代iPod Touch |
| armv7 | iPhone3GS、iPhone4S、iPad、iPad2、IPad3(The New iPad)、iPad mini、IPad Touch3G、iPod Touch4 |
| armv7s | iPhone5、iPhone5C、iPad4(iPad withRetina Display) |
| arm64 | iPhone5S--iPhoneX,iPad Air,iPad mini2--- |
必备知识:
- CPU硬件结构:
- App执行、编译过程
- 硬件相关最为总要的是CPU/内存
- 在汇编中,大部分指令都是与CPU、内存相关的
CPU
总线:
CPU与内存的桥梁:是一根根导线的集合。每个cpu有很多针脚,通过这些针脚与外部链接,与外部交互。
总线的分类:
地址总线:功能是寻址,总线的宽度决定了寻址能力,每根导线可以表示(0和1),CPU跟内存是有关系滴,在早期的时候如果内存过大,CPU的寻址能力不够,内存访问不到。但是也有解决方案,CPU进行两次寻址,然后相加,但是这样的方式就注定了速度变慢。现在CPU寻址能力是饱和的,64位cpu。8086的地址总线宽度是20根,所以寻址能力是1M(2^20)
控制总线:它的宽度决定了CPU对其他控件的控制能力,能有多少控制
数据总线 :它的宽度决定了CPU的单次数据传送量,也就是数据传送速度,或者可以描述为CPU的吞吐量 通常讲32位CPU、64位CPU指的是CPU的数据总线宽度。对于一个引用数据对象,在编程过程中,一个指针8占用字节,一次放电就可以搞定(64位)
8086CPU数据总线宽度是16,单次传输数据2字节
32位CPU一次放电可以传递4字节
64位CPU一次放电可以传递8字节
CPU是如何工作的:
此图演示的是CPU从内存3号单元读取数据:
- cpu通过地址总线将3传输给内存(我将要访问地址3)
- cpu通过控制总线将命令传输给内存(我将要读/写操作)
- cpu通过数据总线如果是读操作:那么内存将3内的数据通过数据总线传输给CPU,如果是写操作,CPU将数据传递给内存3
App的加载流程:
App通过编译最后生成的Mach-o(二进制文件)文件要存放在本地磁盘中(硬盘),知道要运行的时候回将App加载进内存,这个时候叫Image(镜像文件),然后通过CPU对内存的读/写操作,通过控制指令对终端设备中的各个模块进行控制。
二进制文件与镜像文件的区别是什么? 在早期来讲是一样的,只是copy了一份放在了内存中,镜像是早期遗留下来的说法,方便CPU的使用。现在来讲区别我还不清楚,学习过之后进行补充