x86-64上是否可以使用64位直接内存操作数?

时间:2017-01-21 20:06:51

标签: assembly x86-64

我想知道是否可以对如下指令进行编码:

  

添加rax,[地址]

其中< address>是一个指向64位值的完整64位地址。 NASM似乎只是简单地截断地址并将其编码为32位地址。 64位寻址(带有直接地址)似乎有效的唯一形式是:

  

mov rax,[qword address]

由NASM使用REX.W = 1和具有直接寻址的MOV特殊操作码进行编码。将REX.W与add指令一起使用只会使目标地址解释为包含64位值,但不允许指定64位地址。但是如果有另一种方法,我很好奇。

(顺便说一句,由于这个问题,我现在使用RIP相对寻址)。

任何人都可以确认直接的64位寻址形式是不可能的吗?

1 个答案:

答案 0 :(得分:3)

除某些特殊情况外,amd64架构没有64位位移的寻址模式。相反,使用rip相对寻址,如果二进制文件的大小小于2 GB,则应该没问题。