3

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

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

编辑: 上下文是 x86 处理器的开发。我想确保我符合规范。

4

6 回答 6

5

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

所以,指令

mov rbx,$100[rip]

确实存在于 x86-64 中,而

mov ebx,$100[eip]

在 x86 中没有。

于 2009-10-05T13:10:09.877 回答
4

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

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

...

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

...

搜索表格,以下说明与该上标一起出现:

  1. REX 前缀(不是真正的指令,但仍然)
  2. MOVSXD
  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
于 2012-09-17T10:50:02.353 回答
3

抛开现在在 64 位寄存器上运行的旧指令(它们是真正的新指令,因为它们使用不同的二进制表示),我可以想到至少两条仅 64 位的指令:syscallsysret指令。

于 2009-10-08T21:30:23.597 回答
-1

相反的更容易想出;)像 cmpxchg8b .... 你永远不会在 64 位模式下使用那个。

于 2009-10-17T03:32:57.593 回答
-1

您可以随时查看http://www.intel.com/products/processor/index.htm?iid=dev_center+tech_hw_design+prods+processors上的不同手册以找到此类说明。会很辛苦;)

于 2009-10-05T14:16:01.063 回答
-1

PUSHA 仅存在于 32 位模式中。它在 64 位模式下不存在

于 2012-09-16T15:21:06.087 回答