rep; nop
означает? pause
? rep nop
(без точки с запятой)? nop
? После некоторого обсуждения в комментариях к другому вопросу я понял, что не знаю, что представляет ; nop;
означает в сборке x86 (или x86-64). А также я не смог найти хорошего объяснения в Интернете.
Я знаю, что rep
- это префикс, который означает «повторить следующую инструкцию cx
раз» (по крайней мере, в старой 16-битной сборке x86). Согласно сводной таблице в Википедии , кажется, что rep
может использоваться только с movs
, stos
, cmps
], lods
, scas
(но, возможно, это ограничение было снято на новых процессорах). Таким образом, я думаю, что rep nop
(без точки с запятой) повторит nop
операцию cx
раз.
Однако после дальнейшего поиска я получил еще больше запутались. Похоже, что rep; nop
и pause
отображаются в один и тот же код операции , а pause
имеет немного другое поведение, чем просто nop
. В некоторых старых письмах от 2005 г. говорилось о другом:
С этими разными мнениями,Я не понял правильного значения.
Он используется в ядре Linux (на i386 и x86_64 ) вместе с этим комментарием: / * REP NOP (PAUSE) хорошо вставлять в циклы «занято-ожидание». * /
Он также используется в BeRTOS с тем же комментарием.