Was ist der Unterschied zwischen ARM, Thumb-und Thumb-2 instruction Codierungen?
Ich bin ein bisschen verwirrt über den Befehl setzt. Es gibt Daumen, ARM und Thumb-2. Von was ich gelesen habe-Daumen-Anleitung sind alle 16-bit -, sondern innerhalb der ARMv7M Benutzerhandbuch (Seite vi) es gibt Thumb 16-bit-und Daumen-32-bit-Anweisungen erwähnt.
Jetzt habe ich zu überwinden, diese Verwirrung. Es wird gesagt, dass Thumb-2 unterstützt 16-bit und 32-bit-Anweisungen. So ist ARMv7M in der Tat Unterstützung von Thumb-2-Anweisungen und nicht nur Daumen?
Eine weitere Sache. Kann ich sagen, dass die Daumen (32-bit) ist das gleiche wie ARM-Anweisungen, die allso 32-bit?
- Kann ich sagen, dass die Daumen (32-bit) ist das gleiche wie ARM-Anweisungen, die auch 32-bit? Die Antwort ist Nein. Thumb2 ist eine Mischung von 32/16-bit (mit anderen encodings als gerader ARM-32bit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Oh, ARM und Ihre dumme Namensgebung...
Es ist ein verbreiteter Irrtum, aber offiziell gibt es keine solche Sache wie ein "Thumb-2 instruction set".
Ignorieren ARMv8 (wo alles umbenannt und AArch64 die Dinge verkompliziert), von der ARMv4T zur ARMv7-A es gibt zwei Befehlssätze: ARM und Daumen. Sie sind beide "32-bit" in dem Sinne, dass Sie funktionieren auf 32-bit-breiten Daten in 32-bit-breiten Registern mit 32-bit-Adressen. In der Tat, wo Sie sich überschneiden Sie stellen die exakt gleichen Anweisungen - es ist nur die Anweisung Codierung die sich unterscheidet, und die CPU effektiv nur zwei verschiedene decode-front-ends, um die pipeline, die es Umschalten können zwischen. Für die Klarheit, ich werde jetzt bewusst nicht die Begriffe "32-bit" und "16-bit"...
ARM-Anweisungen haben eine Feste Breite 4-byte-Kodierungen, die benötigen 4-byte-Ausrichtung. Daumen Anweisungen variabler Länge (2 oder 4 byte, jetzt bekannt als "schmal" und "breit") Codierungen erfordert 2-byte-Ausrichtung - die meisten Befehle haben 2-byte-Kodierungen, aber
bl
undblx
hatte immer 4-byte-Codierungen*. Die wirklich verwirrend, immerhin kam in ARMv6T2 vorgestellt, dass die "Thumb-2-Technologie". Thumb-2 umfasste nicht nur das hinzufügen einer Last mehr Hinweise auf den Daumen (meist mit 4-byte-Kodierungen) bringen es fast auf Parität mit ARM -, sondern auch die Erweiterung der ausführungszustand zu ermöglichen, für die bedingte Ausführung der meisten Daumen Anweisungen, und schließlich die Einführung einer ganz neuen assembly-syntax (UAL, "Einheitliche Assembly-Sprache") an die Stelle der bisherigen getrennten ARM-und Thumb-Syntax und erlaubt das schreiben von code einmal und Montage entweder Befehlssatz ohne änderung.Den Cortex-M-Architekturen implementieren nur den Thumb-Befehlssatz - ARMv7-M (Cortex-M3/M4/M7) unterstützt die meisten "Thumb-2-Technologie", einschließlich der bedingten Ausführung und Codierungen für VFP-Anweisungen, in der Erwägung, dass ARMv6-M (Cortex-M0/M0+) verwendet nur den Daumen-2 in form einer Handvoll von 4-byte-system-Anweisungen.
So, der neue 4-byte-Kodierungen (und diejenigen, die später in ARMv7-Revisionen) sind noch Daumen Anweisungen - die "Daumen-2" - Aspekt von Ihnen ist, dass Sie kann 4-byte-Kodierungen, und dass Sie (meistens) bedingt ausgeführt, die über
it
(und, ich nehme an, dass Ihre menmonics sind nur definiert UAL).* Vor ARMv6T2, es war tatsächlich eine komplizierte Implementierung detail, ob
bl
(oderblx
) ausgeführt wurde, als eine 4-byte-Anweisung oder als paar von 2-byte-Anweisungen. Die architektonische definition war die letztere, aber da konnten Sie immer nur ausgeführt werden, wenn ein paar in der Folge gab es wenig zu verlieren, (andere als die Fähigkeit, einen interrupt auf halbem Weg durch) und verbindet Sie zu einem einzigen Anweisung aus performance-Gründen. ARMv6T2 nur neu definiert, Dinge in Bezug auf die fusionierte single instruction execution-mthumb-interwork
eigentlich alows die Kombination von (a) Thumb16 mit Thumb32 oder (b) Thumb16&32 mit ARM? Curently ich die Montage mit-mthumb
parameter und in der Quell-Datei, die ich mit.syntax unified
um für assembler zu alow Nutzung von Thumb16 und Thumb32 Codierungen. Aber könnte ich entfernen.syntax unified
von meiner Quell-Datei und verwenden Sie-mthumb-interwork
parameter im assemble-Zeit statt? Dokumentation ist nicht vollkommen klar darüber, dass...armv7e-m
Neben Notlikethat Antwort, und wie angedeutet, ARMv8 führt einige neue Begriffe, um zu versuchen, zu reduzieren die Verwirrung (natürlich indem noch mehr neue Terminologie):
Es ist ein 32-bit-Ausführung-Zustand (AArch32) und eine 64-bit-Ausführung-Zustand (AArch64).
Den 32-bit-Ausführung Staat unterstützt zwei verschiedene Befehlssätze: T32 ("Daumen") und A32 ("ARM"). Die 64-bit-Ausführung Staat unterstützt nur eine Anweisung set - A64.
Alle A64, wie alle A32, Instruktionen sind 32 bit (4 byte) in der Größe, erfordert 4-byte-Ausrichtung.
Viele/die meisten A64-Anweisungen können arbeiten sowohl mit 32-bit und 64-bit-Register (oder wohl 32-bit-oder 64-bit-Aussicht auf die gleichen zugrunde liegenden 64-bit-register).
Alle ARMv8-Prozessoren (wie alle ARMv7-Prozessoren) unterstützt Thumb-2-Anweisungen in der T32 Befehlssatz.