寄存器命名
x86-64架构寄存器可以分为两种:
rax-rsp- 前缀
r表示64位,e表示32位 - 无前缀表示16位,
l分别表示低8位
- 前缀
r8-r15- 无后缀表示64位,后缀
d表示32位,w表示16位,b表示8位
- 无后缀表示64位,后缀
数据格式
操作大小:
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。
movz和movs指令允许小位向大位的传输,分别进行零扩展和符号扩展。
pushq和popq指令分别将寄存器的值压入栈顶和从栈顶弹出到寄存器。
算数指令