常用寄存器
- 常用寄存器通常有以下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位;