- O que isso
rep; nopsignifica? - É o mesmo que
pauseinstrução? - É o mesmo que
rep nop(sem o ponto e vírgula)? - Qual é a diferença para a
nopinstrução simples ? - Ele se comporta de maneira diferente nos processadores AMD e Intel?
- (bônus) Onde está a documentação oficial para essas instruções?
Motivação para esta questão
Depois de alguma discussão nos comentários de outra pergunta , percebi que não sei o que rep; nop;significa em x86 (ou x86-64) assembly. E também não consegui encontrar uma boa explicação na web.
Eu sei que repé um prefixo que significa "repetir as próximas instruções cxvezes" (ou pelo menos era, no antigo conjunto x86 de 16 bits). De acordo com esta tabela de resumo na Wikipedia , parece repsó pode ser usado com movs, stos, cmps, lods, scas(mas talvez essa limitação foi removida em processadores mais recentes). Assim, eu acho rep nop(sem ponto-e-vírgula) repetiria nopos cxtempos de uma operação .
No entanto, depois de mais pesquisas, fiquei ainda mais confuso. Parece que rep; nope pause mapeia exatamente para o mesmo opcode e pausetem um comportamento um pouco diferente do que apenas nop. Alguns e-mails antigos de 2005 diziam coisas diferentes:
- "tente não queimar muita energia"
- "é equivalente a 'nop' apenas com codificação de 2 bytes."
- "é mágico na inteligência. É como 'não, mas deixe o outro irmão HT correr'"
- "é uma pausa na inteligência e preenchimento rápido no Athlon"
Com essas opiniões diferentes, eu não conseguia entender o significado correto.
Ele está sendo usado no kernel Linux (em ambos i386 e x86_64 ), junto com este comentário: /* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */Ele também está sendo usado no BeRTOS , com o mesmo comentário.