- ¿Qué
rep; nopsignifica? - ¿Es lo mismo que la
pauseinstrucción? - ¿Es lo mismo que
rep nop(sin el punto y coma)? - ¿Cuál es la diferencia con la
nopinstrucción simple ? - ¿Se comporta de manera diferente en procesadores AMD e Intel?
- (bonificación) ¿Dónde está la documentación oficial de estas instrucciones?
Motivación para esta pregunta
Después de una discusión en los comentarios de otra pregunta , me di cuenta de que no sé qué rep; nop;significa en el ensamblaje x86 (o x86-64). Y tampoco pude encontrar una buena explicación en la web.
Sé que repes un prefijo que significa "repetir los siguientes cxtiempos de instrucción " (o al menos lo era, en el antiguo ensamblaje x86 de 16 bits). De acuerdo con esta tabla resumen en la Wikipedia , parece que repsólo se puede utilizar con movs, stos, cmps, lods, scas(pero tal vez esta limitación se eliminó en los procesadores más recientes). Por lo tanto, pensaría rep nop(sin punto y coma) repetir una nopoperación cxveces.
Sin embargo, después de buscar más, me confundí aún más. Parece que rep; nopy se pause asignan exactamente al mismo código de operación , y pausetiene un comportamiento un poco diferente al de solo nop. Algún correo antiguo de 2005 decía cosas diferentes:
- "intenta no quemar demasiada energía"
- "es equivalente a 'nop' solo con codificación de 2 bytes".
- "es mágico en Intel. Es como 'nop, pero deja que el otro hermano HT corra'"
- "es una pausa en Intel y un relleno rápido en Athlon"
Con estas opiniones diferentes, no pude entender el significado correcto.
Se está utilizando en el kernel de Linux (tanto en i386 como en x86_64 ), junto con este comentario: /* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */También se está utilizando en BeRTOS , con el mismo comentario.