foofoobar schrieb:
Du hast den den Byte-Sex und das unterschiedliche Memory-Ordering vergessen.
Ach, hab ich das? ... ARM versteht sowohl Big- als auch Little-Endian. IA32/x86 ist Little-Endian.
Das ist alles aber überhaupt kein Problem und kann auch von einem Decoder gelöst werden. Weder IA32 noch ARM werden heute wirklich noch "nativ" in die CPU-Kerne gegossen, da auch mit der Pipeline gearbeitet wird.
foofoobar schrieb:
Und es gibt mit Sicherheit noch weitere fiese Fallstricke.
Und welche sollen das sein, die man nicht per Decoder lösen kann? Big- und Little-Endian kann durch den Decoder gelöst werden. Dem Programm ist es vollkommen egal, ob die CPU intern Big oder Little-Endian arbeitet. Das lässt sich quasi on-the-fly übersetzen.
Ein Fallstrick könnte man noch bei den Datentypen sehen, aber diese wurden nicht umsonst weitgehend standardisiert.
IEEE 754 für alles was mit "Komma" zutun hat. Für INT/WORD/CHAR und Co gilt das Little-Big-Endian-Problem, lässt sich konvertieren. Zeichensätze - Unicode und eine Subarten oder früher sowas wie
ISO-8859-x sowie
ASCII - geben genau vor, wie etwas interpretiert werden muss und Dateiformate - JPEG und Co - schreiben auch fest, wie die Bits und Bytes zu lesen sind.
Fragen nach Big- als Little-Endian, nach den Datentypen und Co hat man sich vor 20 - 30 Jahren gestellt, weil damals noch sehr viel nebeneinander konkurriert hat. Diese Probleme hat man aber heute weitgehend ausgemerzt. Ein Programm lässt sich heute - sofern man auf plattformspezifischen Code verzichtet - relativ einfach zwischen ARM, IA32 und Co hin und her kompilieren.
Und selbst Bytecode für ARM, IA32 und Co kann man heute in Echtzeit mit "relativ" einfachen Leistungsverlusten transformieren - Rosetta 2 bei Apple oder selbst in Windows 10/11 damit das unter ARM läuft.
Da die Decoder in der CPU heute auch nicht mehr die meisten Befehle "fest" verdrahtet bekommen, sondern anhand der "Firmware" übersetzen - deswegen funktionieren so Sachen wie Mikrocode-Updates - muss man nur eine entsprechende Firmware schaffen, die entweder ARM oder IA32 versteht.
Das einzige, was hier ein "Problem" darstellen könnte, wäre bestimmte Eigenheiten, die in der ISA beschrieben werden, was Register angeht, nicht aber der Befehle.