O endereço imediato do NASM 64 bit para movlps fornece "dados do DWORD excedem os limites"

StackOverflow https://stackoverflow.com/questions/3623899

  •  26-09-2019
  •  | 
  •  

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.

Foi útil?

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)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top