x86程序集中是否有任何仅在64位模式下存在的指令?

Nat*_*man 3 x86 assembly x86-64 protected-mode

某些旧的x86指令在64位模式下未定义.例如LDS,LES和()和()指令的LSS短操作码.INC r1640 + rwINC r3240 + rd

是否有任何仅在64位模式下定义的指令,而不是在32位保护模式下?

编辑: 上下文是x86处理器的开发.我想确保我与规范兼容.

Gun*_*iez 5

有一种寻址模式,它在32位中没有对应物:指令指针相对寻址.在32位模式下,这仅适用于分支(也称为分支偏移),在64位模式下,您可以为相对于(r)ip的任何内存操作数形成有效地址.

所以,指令

mov rbx,$100[rip]
Run Code Online (Sandbox Code Playgroud)

确实存在于x86-64中,而

mov ebx,$100[eip]
Run Code Online (Sandbox Code Playgroud)

在x86中没有.


Igo*_*sky 5

来自英特尔架构软件开发人员手册,第 2C 卷附录 A(操作码映射):

表 A-1。操作码表中使用的上标

...

o64指令仅在 64 位模式下可用

...

搜索表格,会出现带有该上标的以下说明:

  1. REX 前缀(不是真正的指令,但仍然是)
  2. 移动式XD
  3. 系统调用、系统返回
  4. 互换全球服务

第 5.16 节(64 位模式指令)列出了一些附加指令,它们是现有指令的变体:

  1. CDQE 将双字转换为四字
  2. CMPSQ 比较字符串操作数
  3. CMPXCHG16B 将 RDX:RAX 与 m128 进行比较
  4. LODSQ 将地址 (R)SI 处的 qword 加载到 RAX 中
  5. MOVSQ 将 qword 从地址 (R)SI 移至 (R)DI
  6. MOVZX(64 位)将双字移动到四字,零扩展
  7. STOSQ 将 RAX 存储在地址 RDI 处