寄存器、汇编指令

汇编初识

寄存器 与 内存

寄存器:

1. sp寄存器:热议时刻会保存栈底的地址。
2. fp寄存器:也称为x29寄存器,属于通用寄存器,在某些时刻我们利用它保存栈顶的地址。
3. x30寄存器:存放是函数的返回地址;当ret指令执行时刻,会寻找x30寄存器保存的地址值。
4. 浮点寄存器:
  D0 - D31(64位) ,S0 - S31存放的是低地址
  S0 - S31(32位)
5. 向量寄存器 128位:V0-V31
6. 状态寄存器CPSR(current program status register):
    * CPSR的低8位(包括I、F、T和M[4:0])称为控制位,程序无法修改,除非CPU运行于特权模式下,程序才能修改控制位!
    * N、Z、C、V均为条件码标志位。它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行! 

状态寄存器链接:https://www.jianshu.com/p/9e0d8d6199e6

函数参数:

1. 函数的参数存放位置:X0到X7(W0到W7)这8个寄存器里面,如果超过8个参数,就会入栈。
2. 函数的局部变量存放位置:存放在栈里面。
3. cup变量临时存放位置:
ARM64,X0-X30, XZR(零寄存器) --- 64位
ARM64,W0-W30, WZR(零寄存器) --- 32位
8086,CS,DS,SS,ES四个寄存器

注意点:

1、ARM64开始,取消32位的 LDM,STM,PUSH,POP指令! 取而代之的是ldr\ldp  str\stp
2、ARM64里面 对栈的操作是16字节对齐的

st指令:

  • stur指令,把寄存器的值(32位)写进内存
  • stp/str指令,把寄存器的值(128位/64位)写进内存

ld指令:

  • ldr指令,从内存地址取一个单个的32位值
  • dlp指令,从内存地址取一个单个的64位值

bl指令:

  1. 将下一条指令的地址放入lr(x30)寄存器
  2. 转到标号处执行指令

ret指令:

  • 在xcode中,lr代表的是x30寄存器的值,通过底层指令提示CPU此处作为下条指令地址
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容