- Was heißt
rep; nopdas - Ist es dasselbe wie
pauseAnweisung? - Ist es dasselbe wie
rep nop(ohne das Semikolon)? - Was ist der Unterschied zu der einfachen
nopAnweisung? - 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 repein 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 repnur 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 nopOperation cxmal wiederholen .
Nach weiterer Suche wurde ich jedoch noch verwirrter. Es scheint, dass rep; nopund pause Karte auf genau den gleichen Opcode und pausehat 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.