skip to content

Search

x86-64 基础

3 min read Updated:
蓝色海洋与银色沙滩

关于x86-64指令集的基础知识,包括寄存器命名,数据格式,传输指令,算数指令

寄存器命名

寄存器命名

x86-64架构寄存器可以分为两种:

  • rax - rsp
    • 前缀r表示64位,e表示32位
    • 无前缀表示16位,l分别表示低8位
  • r8 - r15
    • 无后缀表示64位,后缀d表示32位,w表示16位,b表示8位

数据格式

操作大小:

数据格式
  • b - byte (8 bits)
  • w - word (16 bits)
  • l - long (32 bits)
  • q - quad (64 bits)

表示方法:

  • 寄存器: %rax, %r8d, %eax, %al
  • 内存地址: (%rax), 8(%rbx), -4(%rcx, %rdx, 4)
  • 立即数: $0x10, $42

比例寻址:

Imm(%Reg1, %Reg2, Scale)

得到的地址为: Imm + Reg1 + Reg2 * Scale

传输指令

mov指令要求源和目的操作数必须具有相同的数据位数,例如movq %rax, %rbx,但不允许movq %rax, %ebx。

mov指令

movz和movs指令允许小位向大位的传输,分别进行零扩展和符号扩展。

movz和movs指令

pushq和popq指令分别将寄存器的值压入栈顶和从栈顶弹出到寄存器。

pushq和popq指令

算数指令

基础算数指令 乘除指令