wake-up-neo.com

Was ist der Zweck der Anweisungen zum Drehen (ROL, RCL auf x86)?

Ich habe mich immer gefragt, welchen Zweck die Anweisungen zum Drehen einiger CPUs haben (ROL, RCL bei x86 zum Beispiel). Welche Art von Software verwendet diese Anweisungen? Ich dachte zuerst, sie könnten für die Verschlüsselung/Berechnung von Hash-Codes verwendet werden, aber diese Bibliotheken sind normalerweise in C geschrieben, wo es keine Operatoren gibt, die diesen Anweisungen entsprechen.
Hat jemand eine Verwendung für sie gefunden? Warum fügten sie dem Anweisungssatz hinzu?

25
Gratian Lup

Drehungen sind für Bitverschiebungen über mehrere Wörter erforderlich. Wenn Sie das untere Wort SHL anzeigen, wird das Bit höherer Ordnung in den Carry überführt. Um die Operation abzuschließen, müssen Sie das (die) höhere Wort (e) verschieben, während Sie den Carry auf das niederwertige Bit bringen. RCL ist die Anweisung, die dies bewerkstelligt.

 High Word Low Word CF 
 Anfang 0110 1001 1011 1001 1100 0010 0000 1101? 
 SHL Low Word 0110 1001 1011 1001 1000 0100 0001 1010 1 
 RCL High Word 1101 0011 0111 0011 1000 0100 0001 1010 1 

ROL und ROR sind nützlich, um einen Wert bitweise auf eine (letztlich) nicht destruktive Weise zu untersuchen. Sie können auch verwendet werden, um eine Bitmaske umzuleiten, ohne Abfallstücke mitzubringen.

23
Nietzche-jou

Die Rotationsverschiebungs-Opcodes (ROL, RCL, ROR, RCR) werden fast ausschließlich für Hash- und CRC-Berechnungen verwendet. Sie sind ziemlich geheimnisvoll und werden sehr selten benutzt.

Die Shift Opcodes (SHL, SHR) werden zur schnellen Multiplikation mit Potenzen von 2 verwendet oder um ein Low-Byte in ein High-Byte eines großen Registers zu verschieben.

Der Unterschied zwischen ROL und SHL ist, dass ROL das High-Bit nimmt und es in die Low-Bit-Position rollt. SHL wirft das High-Bit weg und füllt die Low-Bit-Position mit Null.

16
dthorpe

ROR ROL sind "historisch", aber in vielerlei Hinsicht nützlich.

Vor dem 80386 (und dem Opcode BT) würde ROL viel verwendet werden, um ein wenig zu testen (SHL wird nicht zum Übertragsflag weitergeleitet) - tatsächlich würden sich ROR/ROL in 8088 nur jeweils um 1 Bit verschieben !!! !

Wenn Sie eine Richtung und dann die andere Richtung verschieben möchten, ohne die Bits zu verlieren, die außerhalb des Bereichs verschoben wurden, verwenden Sie ROR/ROL anstelle von SHR/SHL

8
Alain Pannetier

Wenn ich Sie richtig verstehe, lautet Ihre Frage:

"Angesichts der Tatsache, dass Rotationsanweisungen sehr speziell zu sein scheinen und nicht von Compilern ausgegeben werden, wann werden sie tatsächlich verwendet und warum werden sie in CPUs eingeschlossen?".  

Die Antwort ist zweifach:

  1. CPU sind nicht speziell für die Ausführung von C-Programmen ausgelegt. Sie sind vielmehr als Allzweckmaschinen konzipiert, die eine Vielzahl von Problemen mit einer Vielzahl unterschiedlicher Werkzeuge und Sprachen lösen sollen.

  2. Die Entwickler einer Sprache sind nicht verpflichtet, jeden Opcode in der CPU zu verwenden. In den meisten Fällen ist dies jedoch nicht der Fall, da einige CPU-Anweisungen hochgradig spezialisiert sind und der Sprachdesigner sie nicht zwingend verwenden muss.

Weitere Informationen zu bitweisen Operatoren (und deren Beziehung zur C-Programmierung) finden Sie hier: http://en.wikipedia.org/wiki/Bitwise_operation

2
Robert Harvey

Als Mikroprozessoren zum ersten Mal erstellt wurden, wurden die meisten Programme in Assembly geschrieben und nicht kompiliert. Die Mehrheit der CPU-Anweisungen wird wahrscheinlich nicht von Compilern ausgegeben (was der Anstoß für die Erstellung von RISC ist), ist aber oft relativ einfach in Hardware zu implementieren.

Viele Algorithmen in der Grafik- und Kryptographie verwenden Rotation, und ihre Einbeziehung in CPUs ermöglicht das Schreiben sehr schneller Algorithmen in Assembly.

1
Gabe