iOS x64汇编01 -- 寄存器与指令

常用寄存器

  • 常用寄存器通常有以下16个:
  • %rax,%rbx,%rcx,%rdx,%rdi,%rsi,%rbp,%rsp
  • %r8,%r9,%r10,%r11,%r12,%r13,%r14,%r15
  • %rax%rdx通常存储函数的返回值;
  • %rdi,%rsi,%rcx,%rdx,%r8,%r9通常用来存储函数的参数;
  • %rbp,%rsp通常用于栈操作,函数栈的内存分配,局部变量的内存分配;
  • 以%r开头的寄存器,能存储8个字节64位的数据;
  • 以%e开头的寄存器,能存储4个字节32位数据;
  • %ax,%bx,%cx寄存器,能存储2个字节16位数据;
  • %ah,%al,%bh,%bl寄存器,能存储1个字节8位数据;
  • 注意存储高字节的寄存器是向下兼容低字节寄存器的;

指令

  • movp %rax,%rdx -->将rax寄存器中的值,赋值给rdx寄存器;
  • movp $3,%rax --> 将立即书3,以8字节的方式,放入rax寄存器中;
  • movp $0xa,0x4ab6(%rip) --> 将立即数0xa,以8字节的方式,放入内存地址(rip + 0x4ab6)中,寄存器rip中存储的是内存地址;
  • leaq -0x18(%rbp),%rax --> 将(rip - 0x18)的内存地址,存储到rax寄存器中,寄存器rip中存储的是内存地址;
  • jmp 0x10101010 --> 跳转到地址0x10101010,一般是函数的内存地址;当当前函数执行完成时,不会返回到原来跳转之前地址的下一个内存地址,会一直往下执行;
  • jmp *%rdx --> 跳转到寄存器rdx存储的内存地址;
  • call 0x10101010 --> 也是跳转到地址0x10101010,当当前函数执行完成时,会返回到原来跳转之前地址的下一个内存地址;
  • 操作数长度:
    • b -- 表示1字节8位;
    • w -- 表示2字节16位;
    • l -- 表示4字节32位;
    • q -- 表示8字节64位;

你可能感兴趣的:(iOS x64汇编01 -- 寄存器与指令)