大多数 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 |
r1、 r/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 (rdx:rax) 。 |
字符串操作
MOVSQ |
将 qword 从 rsi 移动到 rdi。 |
CMPSQ |
比较 rsi 处的 qword 与 rdi。 |
SCASQ |
在 rdi 处扫描 qword。 将 rdi 处的 qword 与 rax 进行比较。 |
LODSQ |
将 qword 从 rsi 加载到 rax中。 |
STOSQ |
将 qword 存储到 rax 中的 rdi。 |