- Was heißt
rep; nop
das - Ist es dasselbe wie
pause
Anweisung? - Ist es dasselbe wie
rep nop
(ohne das Semikolon)? - Was ist der Unterschied zu der einfachen
nop
Anweisung? - Verhält es sich auf AMD- und Intel-Prozessoren anders?
- (Bonus) Wo ist die offizielle Dokumentation für diese Anweisungen?
Motivation für diese Frage
Nach einigen Diskussionen in den Kommentaren einer anderen Frage wurde mir klar, dass ich nicht weiß, was rep; nop;
in x86- (oder x86-64-) Assembly bedeutet. Außerdem konnte ich im Web keine gute Erklärung finden.
Ich weiß, dass dies rep
ein Präfix ist, das "die nächsten Befehlszeiten wiederholen cx
" bedeutet (oder zumindest in einer alten 16-Bit-x86-Assembly). Nach dieser Übersichtstabelle auf Wikipedia , scheint es rep
nur mit verwendet werden movs
, stos
, cmps
, lods
, scas
(aber vielleicht diese Begrenzung auf neueren Prozessoren entfernt wurde). Daher würde ich denken rep nop
(ohne Semikolon) würde eine nop
Operation cx
mal wiederholen .
Nach weiterer Suche wurde ich jedoch noch verwirrter. Es scheint, dass rep; nop
und pause
Karte auf genau den gleichen Opcode und pause
hat ein etwas anderes Verhalten als nur nop
. Einige alte Mails aus dem Jahr 2005 sagten verschiedene Dinge:
- "Versuche nicht zu viel Strom zu verbrennen"
- "Es ist gleichbedeutend mit 'nop', nur mit 2-Byte-Codierung."
- "Es ist Magie auf Intel. Es ist wie 'Nein, aber lassen Sie die anderen HT-Geschwister laufen'"
- "Es ist eine Pause für Informationen und eine schnelle Polsterung für Athlon."
Mit diesen unterschiedlichen Meinungen konnte ich die richtige Bedeutung nicht verstehen.
Es wird im Linux-Kernel (sowohl auf i386 als auch auf x86_64 ) zusammen mit diesem Kommentar verwendet: /* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
Es wird auch in BeRTOS mit demselben Kommentar verwendet.