美文网首页
寄存器、汇编指令

寄存器、汇编指令

作者: natinalBoy | 来源:发表于2018-05-13 17:18 被阅读0次

    汇编初识

    寄存器 与 内存

    寄存器:

    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此处作为下条指令地址

    相关文章

      网友评论

          本文标题:寄存器、汇编指令

          本文链接:https://www.haomeiwen.com/subject/ujbldftx.html