ARM-Befehlssatz

Ich versuche, in die Welt von ARM einzusteigen, und eine Sache, auf die ich sehr oft stoße, ist, dass ARM-Prozessoren ARM- und Thumb-Befehlssätze unterstützen. Dies bedeutet also, dass der Compiler Thumb-Anweisungen verwendet, die 16-Bit sind, um die Codedichte zu verbessern, und ARM-Anweisungen nur dann verwendet, wenn dies unbedingt erforderlich ist. Habe ich recht? Aber jetzt gibt es neuere Prozessoren, die Thumb 2 unterstützen, der sowohl 16-Bit- als auch 32-Bit-Befehle hat. Aber was macht diese neueren Prozessoren mit Thumb 2 denen überlegen, die ARM und THUMB verwenden? Ich meine, im Grunde haben beide Familien sowohl 16-Bit- als auch 32-Bit-Befehle zur Verfügung, oder gibt es einen Vorteil von Thumb 2 im Vergleich zu Arm- und Thumb-Befehlssätzen.

Antworten (2)

Ein ARM-Prozessor kann keine willkürlichen Sequenzen von verschachtelten ARM- und Thumb-Befehlen ausführen. Es muss von einem Befehlssatz zum anderen umgeschaltet werden, zB durch einen Verzweigungsbefehl. In den meisten Fällen weisen Sie den Compiler also an, in Ihrem Projekt entweder ARM- oder Thumb-Anweisungen zu verwenden. Das Beste, was der Compiler wahrscheinlich tun kann, ist, von Funktion zu Funktion zu entscheiden, welcher Befehlssatz am besten passt. Der Thumb2-Befehlssatz soll die Vorteile von ARM und Thumb ohne die Nachteile vereinen.

Bearbeiten:

Die Antwort auf die Frage, mit der @Kynit verknüpft ist, besagt im Grunde auch das Obige.

Es gibt einige Arten von Code, bei denen 32-Bit-ARM-Code die neueren Alternativen übertreffen könnte. Die neueren Alternativen erlauben beispielsweise nicht, dass eines der Register in einem Speicheroperanden nach rechts verschoben wird . Darüber hinaus könnte ein Code, der Bedingungen sehr stark verwendet, davon profitieren, dass das 4-Bit-Bedingungsfeld in jeder Anweisung vorhanden ist, anstatt eine spezielle „Wenn/Dann“-Anweisung verwenden zu müssen.

Thumb2 gibt Ihnen ein paar zusätzliche Anweisungen, mit denen Sie den ARM-Funktionssatz auf eine Weise nutzen können, die Thumb nicht konnte. Thumb2 unterstützt auch 16-Bit-Thumb-Anweisungen, sodass es bei den neuen 32-Bit-Anweisungen keinen großen Nachteil in der Codegröße gibt. Insgesamt sieht es so aus, als hätten Sie die richtige Idee.

Siehe diese Frage für weitere Informationen.