大多数 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. |