O endereço imediato do NASM 64 bit para movlps fornece "dados do DWORD excedem os limites"
Pergunta
Preciso que as instruções sejam movidas com um endereço imediato com 64 bits de largura, o que, de acordo com os manuais da Intel, devem ser perfeitamente possíveis. Então, algo assim:
movlps xmm0, [0x7fffffffffa0]
Mas tudo o que eu recebo é Nasm truncando o tamanho do operando para 32 bits e imprimindo o aviso correspondente:
sample.s:6: warning: dword data exceeds bounds
Eu tentei com diferentes formas do prefixo QWORD sem sucesso.
Solução
A maioria das instruções X64 não leva 64 bits imediatos.
A menos que eu esteja muito enganado, você precisa passar pelo registro RAX.
Outras dicas
Eu não acho que você possa fazer isso. movlps
Carrega ou armazena um valor São 64 bits de largura, mas endereços e deslocamentos imediatos ainda estão limitados a 32 bits em geral. O melhor que você pode fazer é
mov rax, 0x7fffffffffa0
movlps xmm0, [rax]
(o primeiro mov
pode precisar ser movabs
; Eu realmente não conheço o conjunto da sintaxe da Intel)