用于movlps的NASM 64位立即地址给出“双字数据超出界限”

时间:2010-09-02 04:52:17

标签: x86-64 nasm sse assembly

我需要指令movlps,其地址为64位宽,根据英特尔手册应该是完全可能的。所以,像这样:

movlps xmm0, [0x7fffffffffa0]

但我得到的只是NASM将操作数大小截断为32位并打印相应的警告:

sample.s:6: warning: dword data exceeds bounds

我尝试过使用不同形式的qword前缀但没有成功。

2 个答案:

答案 0 :(得分:4)

我认为你不能那样做。 movlps加载或存储64位宽的,但是一般情况下,立即地址和位移仍限制为32位。你能做的最好的就是

mov rax, 0x7fffffffffa0
movlps xmm0, [rax]

(第一个mov可能需要movabs;我真的不知道英特尔语法汇编

答案 1 :(得分:4)

大多数x64指令不需要64位immed。

除非我非常错误,否则你必须通过rax寄存器。