x64 Instructions

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

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

  • BOUND

  • PUSHAD 和 POPAD

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

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

数据传输

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

MOV

r,#n

r = #n

MOV

rax, m

Move contents at 64-bit address to rax.

MOV

m, rax

Move contents of rax to 64-bit address.

x64 还提供了一个新指令,用于将 32 位作数签名为 64 位。

MOVSXD

r1, r/m

将具有签名扩展的 DWORD 移动到 QWORD。

将普通 MOV作自动零扩展到 64 位,因此没有 MOVZXD 指令。

Two SSE instructions can be used to move 128-bit values (such as GUIDs) from memory to an xmmn register or vice versa.

MOVDQA

r1/m, r2/m

Move 128-bit aligned value to xmmn register, or vice versa.

MOVDQU

r1/m, r2/m

移动 128 位值(不一定对齐),以注册,反之亦然。

数据转换

CDQE

Convert dword (eax) to qword (rax).

CQO

convert qword (rax) to oword (rdx:rax).

字符串作

MOVSQ

Move qword from rsi to rdi.

CMPSQ

Compare qword at rsi with rdi.

SCASQ

Scan qword at rdi. Compares qword at rdi to rax.

LODSQ

Load qword from rsi into rax.

STOSQ

Store qword to rdi from rax.