Krik schrieb:
Komplexe und einfache Befehle kann man sich in etwa so vorstellen:
ARM hat Befehle, um zwei Zahlen zu multiplizieren und zu addieren.
x86 hat Befehle, um zwei Zahlen zu multiplizieren und danach sofort zu addieren. Also zwei in eins.
Bezogen auf den ARM stimmt das so nicht (Beispiel kommt weiter unten).
In den 90er Jahren hatte ich einen Desktop-Rechner mit ARM-Prozessor (vom damaligen Hersteller Acorn). Die Fans (ich war auch einer) kauften sich Acorn-Rechner vor allem wegen des innovativen, sehr performten Desktops und zum Programmieren in BASIC und ARM-Assembler.
Die Prozessoren waren zu der Zeit noch reine 32 Bit-CPUs. Das heißt, auch die Befehle waren allesamt 32 Bit breit. Ich fragte mich zunächst, wie man denn eine 32-Bit-Konstante zusätzlich in einen 32-Bit-Opcode quetschen kann.
Nun, die ARM-Kommandos reservierten 12 Bit für integrierte Zahlenwerte. Einige ARM-Kommandos nutzen dies, um einen Wert im Bereich von 0-4095 zu codieren.
Die meisten Kommandos unterteilen jedoch die 12 Bit in 8 Bit für die Ziffernfolge und 4 Bit für den Verschiebewert. Genauer gesagt, handelt es sich um den Wert für die Rechtsrotation multipliziert mit 2. Damit läßt sich eine beliebig große, aber nicht beliebig komplexe Zahl bilden. Also wenn man beispielsweise im Extremfall die Zahl &23456789 (Hex) in ein Register laden wollte, braucht es dazu 4 Befehle. In der Praxis werden allerdings meist nur kleine bzw. unkomplexe Zahlen benötigt. &FF, &3FC0 oder &C000003F brauchen z.B. allesamt nur einen Befehl. Mittels Negation lassen sich auch negative Zahlen vereinfachend so erzeugen; z.B.:
&FFFFFFFE =-2 = NOT 1.
Natürlich erzeugt der Assembler selbständig die Codierung bzw. die Anzahl der benötigten Kommandos.
Eine Multiplikation kombiniert mit einer Addition erledigt eine 32-Bit-ARM-CPU auf diese Weise. Beispiel:
MLAEQS R3,R0,R12,R5
Das heißt, die Register R0 und R12 werden miteinander multipliziert und das Register R5 wird hinzuaddiert. Das Ergebnis landet in R3. Der Befehl wird aber nur ausgeführt wenn das Zeroflag gesetzt ist (EQ). Im Fall der Ausführung werden zudem die Flags dem Ergebnis entsprechend aktualisiert (S-Option). Ohne 'S' bleiben die Flags unverändert.
An so einem Beispiel erkennt man in etwa schon, was die Stärken des ARM-Prozessors ausmachen.
Er kennt zwar nur wenige Grundbefehle; aber diese sind äußerst mächtig und variantenreich gestaltet. Praktisch alle Befehle erledigen in nur einem Rutsch mehre Aktionen zugleich und zudem meist in nur einem einzigen Taktzyklus. Dazu kommt, dass sich fast alle Befehle bedingt ausführen lassen und man auf diese Weise eine Menge Sprungbefehle einsparen kann. 15 gleichwertige Register (+ PC-Register) vereinfachten die Assemblerprogrammierung zudem ungemein.
Die ARM-Prozessoren waren bis Mitte der 90er Jahre noch sehr niedrig getaktet (mein Rechner kam gerade mal auf 16 Mhz). Aufgrund des sehr effizienten Prozessors konnte er dennoch mit deutlich höher getakteten PC-Prozessoren mithalten.
Der ARM-Prozessor wurde ursprünglich von der britischen Computerfirma ACORN entwickelt (ARM = ACORN Risc Machine). Bevor ACORN pleite ging, hatte es noch Investoren mit ins Boot geholt (das A steht seitdem für 'Advanced').
Wie es dann mit den ARM-CPUs weiterging, habe ich nicht weiter mehr groß verfolgt. Klar ist mir nur, dass die Prozessoren - aufbauend auf dem Grundkonzept - immer weiter entwickelt wurden und heute mittlerweile im GHz-Bereich angekommen, das Rückgrat der mobilen Rechner sind.
Von einem um Jahrzehnte verspäteten Wiedereinstieg der ARM-CPUs in die Welt der Desktop-Rechner verspreche ich mir persönlich allerdings nichts.
Windows nutze ich eigentlich nur noch wegen ein paar Programmen, auf die ich ungern verzichten möchte. Wenn Windows aufgrund des immer wieder von den Technik-Freaks geforderten Abschneidens alter Zöpfe nicht mehr kompatibel zu diesen älteren Programmen sein sollte, gibt es endgültig nichts mehr, was mich noch an Windows bindet. (Schon seit Jahren bin ich am Desktop weitestgehend nur noch mit Linux unterwegs.)
Von daher stehe ich heute eher im Lager von 'x86'. Und ich glaube auch nicht, dass ARM (aus Gründen der Kompatibilität) die klassische Architektur der PC-Prozessoren so schnell wird verdrängen können.