64-битный непосредственный адрес NASM для movlps дает «данные dword превышают границы» - PullRequest
2 голосов
/ 02 сентября 2010

Мне нужна инструкция movlps с непосредственным адресом шириной 64 бита, что в соответствии с инструкциями Intel должно быть вполне возможным.Итак, что-то вроде этого:

movlps xmm0, [0x7fffffffffa0]

Но все, что я получаю, это NASM, усекающий размер операнда до 32 бит и печатающий соответствующее предупреждение:

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

Я пробовал с разными формамипрефикса qword безуспешно.

Ответы [ 2 ]

4 голосов
/ 02 сентября 2010

большинство инструкций x64 не требуют 64-битного immed.

если я не очень ошибаюсь, вы должны пройти через регистр rax.

4 голосов
/ 02 сентября 2010

Я не думаю, что вы можете сделать это. movlps загружает или сохраняет значение шириной 64 бита, но непосредственные адреса и смещения по-прежнему ограничены 32 битами. Лучшее, что вы можете сделать, это

mov rax, 0x7fffffffffa0
movlps xmm0, [rax]

(первое mov может потребоваться movabs; я не знаю синтаксическую сборку Intel)

...