在64位模式下,某些旧的x86指令未定义。例如LDS
,LES
和LSS
,或INC r16
(40 + rw
)和INC r32
(40 + rd
)的短操作码指令。
是否有任何仅在64位模式下定义的指令,而不是在32位保护模式下?
编辑:上下文是x86处理器的开发。我想确保我与规范兼容。
答案 0 :(得分:5)
有一种寻址模式,它在32位中没有对应物:指令指针相对寻址。在32位模式下,这仅适用于分支(也称为分支偏移),在64位模式下,您可以为相对于(r)ip的任何内存操作数形成有效地址。
所以,指令
mov rbx,$100[rip]
确实存在于x86-64中,而
mov ebx,$100[eip]
不在x86中。
答案 1 :(得分:3)
抛开现在在64位寄存器上运行的旧指令(它们实际上是新指令,因为它们使用不同的二进制表示),我可以想到至少两条仅64位的指令:syscall
和sysret
说明。
答案 2 :(得分:3)
来自英特尔架构软件开发人员手册,第2C卷附录A(操作码映射):
表A-1。在操作码表中使用的上标
...
o64 指令仅在64位模式下可用
...
搜索表格时,会出现以下说明:
第5.16节(64位模式指令)中列出了一些现有变量的附加说明:
答案 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位模式下不存在