- Що це
rep; nopозначає? - Це те саме, що
pauseінструкція? - Це те саме, що
rep nop(без крапки з комою)? - Яка різниця від простої
nopінструкції? - Чи поводиться він по-різному на процесорах AMD та Intel?
- (бонус) Де знаходиться офіційна документація до цих інструкцій?
Мотивація цього питання
Після обговорення в коментарях до іншого питання я зрозумів, що не знаю, що rep; nop;означає збірка x86 (або x86-64). А також я не міг знайти хорошого пояснення в Інтернеті.
Я знаю, що repце префікс, що означає "повторити наступні інструкції cx" (або, принаймні, так було в старій 16-бітовій збірці x86). Відповідно до цієї зведеної таблиці в Вікіпедії , здається , repможуть бути використані тільки з movs, stos, cmps, lods, scas(але , можливо , це обмеження було знято на нових процесорах). Таким чином, я міг би думати rep nop(без крапки з комою) повторити nopоперацію cxразів.
Однак після подальших пошуків я ще більше розгубився. Здається, rep; nopі pause map, і той самий код операції , і pauseмає трохи іншу поведінку, ніж просто nop. Деякі старі листи від 2005 року говорили різні речі:
- "намагайся не спалювати занадто багато енергії"
- "це еквівалентно" nop "лише з 2-байтовим кодуванням."
- "це магія для Intel. Це як" nop, але нехай інший брат HT працює "
- "це пауза на Intel і швидке заповнення на Athlon"
З такими різними думками я не міг зрозуміти правильного значення.
Він використовується в ядрі Linux (і на i386, і на x86_64 ), разом із цим коментарем: /* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */Він також використовується в BeRTOS , з тим самим коментарем.