Quando devo usar diretivas de tamanho em x86?

Quando usar diretivas de tamanho no x86 parece um pouco ambíguo.Este guia de montagem x86 diz o seguinte:

Em geral, o tamanho pretendido do item de dados em um determinado endereço de memória pode ser inferido a partir da instrução de código de montagem na qual é referenciada. Por exemplo, em todas as instruções acima, o tamanho das regiões de memória pode ser deduzido do tamanho do operando do registrador. Quando estávamos carregando um registrador de 32 bits, o montador podia inferir que a região da memória à qual nos referíamos tinha 4 bytes de largura. Quando estávamos armazenando o valor de um registro de um byte na memória, o montador podia inferir que queríamos que o endereço se referisse a um único byte na memória.

Os exemplos que eles dão são bastante triviais, como mover um valor imediato para um registro.
Mas e as situações mais complexas, como as seguintes:

mov    QWORD PTR [rip+0x21b520], 0x1

Nesse caso, a diretiva de tamanho QWORD PTR não é redundante, pois, de acordo com o guia acima, pode-se presumir que queremos mover 8 bytes para o registro de destino devido ao fato de o RIP ser de 8 bytes? Quais são as regras definitivas para diretivas de tamanho na arquitetura x86? Não consegui encontrar uma resposta para isso em nenhum lugar, obrigado.

Atualização: Como Ross apontou, o destino no exemplo acima não é um registro. Aqui está um exemplo mais relevante:

mov    esi, DWORD PTR [rax*4+0x419260] 

Nesse caso, não se pode presumir que queremos mover 4 bytes porque ESI é de 4 bytes, tornando a diretiva DWORD PTR redundante?

questionAnswers(3)

yourAnswerToTheQuestion