Что означает «rep; нет; " имеется ввиду в сборке x86? Это то же самое, что и инструкция «пауза»?

  • Что делает rep; nop означает?
  • Это то же самое, что и инструкция pause ?
  • Это то же самое, что rep nop (без точки с запятой)?
  • В чем разница с простой инструкцией nop ?
  • По-разному ли она работает на процессорах AMD и Intel?
  • (бонус) Где находится официальная документация к этим инструкциям?

  • Мотивация для этого вопроса

    После некоторого обсуждения в комментариях к другому вопросу я понял, что не знаю, что представляет ; nop; означает в сборке x86 (или x86-64). А также я не смог найти хорошего объяснения в Интернете.

    Я знаю, что rep - это префикс, который означает «повторить следующую инструкцию cx раз» (по крайней мере, в старой 16-битной сборке x86). Согласно сводной таблице в Википедии , кажется, что rep может использоваться только с movs , stos , cmps ], lods , scas (но, возможно, это ограничение было снято на новых процессорах). Таким образом, я думаю, что rep nop (без точки с запятой) повторит nop операцию cx раз.

    Однако после дальнейшего поиска я получил еще больше запутались. Похоже, что rep; nop и pause отображаются в один и тот же код операции , а pause имеет немного другое поведение, чем просто nop . В некоторых старых письмах от 2005 г. говорилось о другом:

    • «старайтесь не сжигать слишком много энергии»
    • «это эквивалентно« nop »только с двухбайтовой кодировкой»
    • «это это магия для интеллекта. Это похоже на «нет, но пусть другой брат HT работает» »
    • « это пауза в интеллекте и быстрое дополнение на Athlon »

    С этими разными мнениями,Я не понял правильного значения.

    Он используется в ядре Linux (на i386 и x86_64 ) вместе с этим комментарием: / * REP NOP (PAUSE) хорошо вставлять в циклы «занято-ожидание». * / Он также используется в BeRTOS с тем же комментарием.

80
задан Peter Cordes 27 October 2019 в 05:44
поделиться