最近准备学习汇编,而后在B站上看到叫iOS小贤的做者发的视频挺不错,打算跟着学,文章是看视频的笔记,最后有原视频连接,想看视频的能够看看经过连接查看视频。程序员
ARM64拥有有31个64位的通用寄存器 x0 到 x30,这些寄存器一般用来存放通常性的数据,称为通用寄存器(有时也有特定用途)xcode
模拟器是X86架构,因此用真机测才能看到ARM62的寄存器缓存
**注:**为何是64位寄存器,由于CPU是64位的,总线是64位的,一次通电能够传递64位的数据给CPU,也就是8个字节,这个数据CPU存在寄存器中,因此寄存器是64位的。bash
问: 每次计算完又开辟内存空间存放结果?
答:汇编里面不存在开辟空间,销毁空间,直接经过内存地址访问,和高级语言不同。架构
0x102aaa928 <+0>: sub sp, sp, #0x10
左边是指令地址,右边是指令。less
Debug -> Debug Workflow -> View Memory 或者经过快捷键:shift+command + m 来调用内存查看界面ide
0x102aaa92c - 0x102aaa928 = 4
,因此每一个指令战4个字节。函数
FF 43 00 D1
就是指令sub sp, sp, #0x10
的二进制表现形式。性能
能够在LLDB输入ni
单步往下走,发现依然断点地址依然和pc寄存器同样的。学习
输入register write pc 0x102aaa92c
改写pc寄存器,能够看到跳转到改写后地址的下一个寄存器位置。
注:#
后面跟个数字,叫当即数,
如今有两段代码!假设程序先执行A,请写出指令执行顺序.最终寄存器x0的值是多少?
_A:
mov x0,#0xa0
mov x1,#0x00
add x1, x0, #0x14
mov x0,x1
bl _B
mov x0,#0x0
ret
_B:
add x0, x0, #0x10
ret
复制代码
咱们来写试试看,在xcode中建立文件,格式选择Assembly File
.text
告诉编译器在text段,也就是代码段,.global
表示是全局的。 在.m文件中须要加上方法声明int A();
,这样编译才能经过,由于asm.s是源文件,编译的会连接到全局函数_A。
在A()打断点
输入s进入函数A
咱们能够看到x0就是a0,此时x1是50输入ni
单步往下走,x1变成0
add x1, x0, #0x14
是把x0加上14而后赋值给x1,这样x1就变成b4。
mov x0, x1
是把x1的值赋值给x0,这样x0和x1都是b4。
接下来bl 0x102df2c00
跳转到B函数。
而后一直输入ni,会发现死循环了,至于为何以后会解释。
CPU除了有控制器、运算器还有寄存器。其中寄存器的做用就是进行数据的临时存储。
CPU的运算速度是很是快的,为了性能CPU在内部开辟一小块临时存储区域,并在进行运算时先将数据从内存复制到这一小块临时存储区域中,运算时就在这一小快临时存储区域内进行。咱们称这一小块临时存储区域为寄存器。
对于arm64系的CPU来讲, 若是寄存器以x开头则代表的是一个64位的寄存器,若是以w开头则代表是一个32位的寄存器,在系统中没有提供16位和8位的寄存器供访问和使用。其中32位的寄存器是64位寄存器的低32位部分并非独立存在的。
**注:**若是你改了x0寄存器,w0寄存器也会改,由于32位的寄存器是64位寄存器的低32位部分并非独立存在的。
iPhoneX上搭载的ARM处理器A11它的1级缓存的容量是64KB,2级缓存的容量8M.
CPU每执行一条指令前都须要从内存中将指令读取到CPU内并执行。而寄存器的运行速度相比内存读写要快不少,为了性能,CPU还集成了一个高速缓存存储区域.当程序在运行时,先将要执行的指令代码以及数据复制到高速缓存中去(由操做系统完成).CPU直接从高速缓存依次读取指令来执行.
数据地址寄存器 数据地址寄存器一般用来作数据计算的临时存储、作累加、计数、地址保存等功能。定义这些寄存器的做用主要是用于在CPU指令中保存操做数,在CPU中当作一些常规变量来使用。 ARM64中
注意: 有一种特殊的寄存器段寄存器:CS,DS,SS,ES四个寄存器来保存这些段的基地址,这个属于Intel架构CPU中.在ARM中并无
**注:**之前内存使用段划分的,如今是平滑状态,从0到最后,只是文件里面分段,内存中再也不有段了。
由于浮点数的存储以及其运算的特殊性,CPU中专门提供浮点数寄存器来处理浮点数
浮点寄存器 64位: D0 - D31 32位: S0 - S31
如今的CPU支持向量运算.(向量运算在图形处理相关的领域用得很是的多)为了支持向量计算系统了也提供了众多的向量寄存器.
向量寄存器 128位:V0-V31
参考:
寄存器
关于CPU&寄存器的补充
汇编(二)
汇编(三)