x64 指令

大多数 x86 指令在 64 位模式下仍对 x64 有效。 64 位模式下不再支持某些很少使用的操作,例如:

  • 二进制编码的十进制算术指令:AAA、AAD、AAM、AAS、DAA、DAS

  • 绑定

  • PUSHAD 和 POPAD

  • 处理段寄存器的大多数操作,例如 PUSH DS 和 POP DS。 使用 FS 或 GS 段寄存器的 (操作仍然有效。)

x64 指令集包括 x86 的最新新增内容,例如 SSE 2。 为 x64 编译的程序可以自由使用这些说明。

数据传输

x64 提供了 MOV 指令的新变体,可以处理 64 位即时常量或内存地址。

MOV

r,#n

r = #n

MOV

rax,m

将 64 位地址处的内容移动到 rax

MOV

m、 rax

rax 的内容移动到 64 位地址。

x64 还提供了将 32 位操作数签名为 64 位签名的新指令。

MOVSXD

r1r/m

将带符号扩展名的 DWORD 移动到 QWORD。

32 位子注册表中的普通 MOV 操作会自动零扩展到 64 位,因此没有 MOVZXD 指令。

可以使用两个 SSE 指令将 128 位值 ((例如) GUID)从内存移动到 xmmn 寄存器,反之亦然。

MOVDQA

r1/m、 r2/m

将 128 位对齐值移动到 xmmn 寄存器,反之亦然。

MOVDQU

r1/m、 r2/m

移动 128 位值 (不一定) 进行注册,反之亦然。

数据转换

CDQE

将 dword (eax) 转换为 qword (rax) 。

CQO

将 qword (rax) 转换为 oword (rdxrax) 。

字符串操作

MOVSQ

将 qword 从 rsi 移动到 rdi。

CMPSQ

比较 rsi 处的 qword 与 rdi。

SCASQ

rdi 处扫描 qword。 将 rdi 处的 qword 与 rax 进行比较。

LODSQ

将 qword 从 rsi 加载到 rax中。

STOSQ

将 qword 存储到 rax 中的 rdi