我想知道是否可以对如下指令进行编码:
添加rax,[地址]
其中< address>是一个指向64位值的完整64位地址。 NASM似乎只是简单地截断地址并将其编码为32位地址。 64位寻址(带有直接地址)似乎有效的唯一形式是:
mov rax,[qword address]
由NASM使用REX.W = 1和具有直接寻址的MOV特殊操作码进行编码。将REX.W与add指令一起使用只会使目标地址解释为包含64位值,但不允许指定64位地址。但是如果有另一种方法,我很好奇。
(顺便说一句,由于这个问题,我现在使用RIP相对寻址)。
任何人都可以确认直接的64位寻址形式是不可能的吗?
答案 0 :(得分:3)
除某些特殊情况外,amd64架构没有64位位移的寻址模式。相反,使用rip
相对寻址,如果二进制文件的大小小于2 GB,则应该没问题。