Ein für einen Computer geschriebenes Maschinensprachenprogramm wird mit einer anderen CPU nicht auf einem anderen ausgeführt, da die Maschinensprache
direkt an die spezifische Architektur der CPU gebunden ist . Dies bedeutet, dass die Anweisungen so codiert sind, dass nur die Hardware der CPU verstehen und ausführen kann. Die Unterschiede fallen in mehrere Schlüsselbereiche:
* Anweisungssatz Architektur (ISA): Dies ist die grundlegende Anweisungen, die eine CPU versteht. Unterschiedliche CPUs (sogar von demselben Hersteller) haben unterschiedliche ISAs. Was eine einfache Anweisung für eine CPU ist, könnte eine komplexe Mehrstufungsoperation auf einer anderen sein oder nicht einmal existieren. Die Codierung dieser Anweisungen (die spezifischen Bitmuster, die jede Anweisung darstellen) variiert stark zwischen IsAs.
* Anzahl der Register: CPUs haben interne Register für die temporäre Datenspeicherung. Die Anzahl und Größe dieser Register unterscheiden sich zwischen CPUs. Ein Programm, das zur Verwendung einer bestimmten Anzahl und Art der Register geschrieben wurde, funktioniert auf einer CPU nicht mit einer anderen Konfiguration.
* Speicheradressierungsmodi: Wie der CPU auf den Speicher zugreift (z. B. direkte Adressierung, indirekte Adressierung usw.), variiert zwischen Architekturen. Der Maschinencode spiegelt diese Adressierungsmodi wider und so dass er mit CPUs mit verschiedenen Methoden nicht kompatibel ist.
* Datenrepräsentationen: Die Art und Weise, wie Datentypen (Ganzzahlen, Floating-Punkt-Zahlen usw.) im binären Format dargestellt werden. Ein für die Datendarstellung der CPU zusammengestelltes Programm kann zu falschen Ergebnissen führen oder sogar auf einer CPU mit einer anderen Darstellung abfällt.
* Systemaufrufe: Programme interagieren häufig mit dem Betriebssystem über Systemaufrufe. Die Art und Weise, wie diese Anrufe getätigt werden und die spezifischen Codes verwendet werden, sind CPU und Betriebssystemspezifisch, wodurch eine weitere Inkompatibilitätsschicht hinzugefügt wird.
Im Wesentlichen ist der Maschinencode extrem niedrig und eng mit der physischen Hardware gekoppelt. Der Versuch, den Maschinencode für eine CPU auf einem anderen auszuführen, ist wie der Versuch, einen Rekord für einen Plattenteller mit 33 ° C auf einem Plattenspieler von 45 U / min zu spielen - die Geschwindigkeiten sind unterschiedlich und das Ergebnis ist Kauderwelsch. Übergeordnete Sprachen (wie C ++, Java, Python) lösen dieses Problem, indem sie Compiler oder Dolmetscher verwenden, um den Code in ein für die Architektur der Ziel-CPU geeignetes Formular zu übersetzen.