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

时间:2009-10-05 10:49:30

标签: assembly x86 x86-64 protected-mode

在64位模式下,某些旧的x86指令未定义。例如LDSLESLSS,或INC r1640 + rw)和INC r3240 + rd)的短操作码指令。

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

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

6 个答案:

答案 0 :(得分:5)

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

所以,指令

mov rbx,$100[rip]

确实存在于x86-64中,而

mov ebx,$100[eip]

不在x86中。

答案 1 :(得分:3)

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

答案 2 :(得分:3)

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

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

...

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

...

搜索表格时,会出现以下说明:

  1. REX前缀(不是真正的指令,但仍然是)
  2. MOVSXD
  3. SYSCALL,SYSRET
  4. SWAPGS
  5. 第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 Store RAX at address RDI

答案 3 :(得分:-1)

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

答案 4 :(得分:-1)

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

答案 5 :(得分:-1)

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