Intels 80x86-CPUs und AMDs 80x86-CPUs sind "größtenteils gleich", aber einige Dinge sind völlig unterschiedlich (z.B. Erweiterungen für virtuelle Maschinen - SVM vs. VT-x) und einige Dinge (Erweiterungen) können unterstützt werden oder auch nicht. Einige Dinge sind jedoch auch auf verschiedenen CPUs desselben Herstellers unterschiedlich (z.B. unterstützen einige Intel-Chips AVX2 und andere nicht).
Es gibt mehrere Möglichkeiten, mit diesen Unterschieden umzugehen:
-
nur die gemeinsame Untermenge verwenden, damit derselbe Code auf allen 80x86-CPUs läuft (z. B. wie ein 8086-Chip behandeln).
-
eine Teilmenge von Merkmalen verwenden, die für eine Reihe von CPUs gemeinsam sind, so dass derselbe Code auf allen 80x86-CPUs in diesem Bereich läuft. Dies ist sehr häufig der Fall (z. B. "diese Software erfordert eine 80x86-CPU (und ein Betriebssystem), das 64-Bit-Erweiterungen unterstützt").
-
Tests zur Installationszeit verwenden. Zum Beispiel könnte es 4 verschiedene Kopien von Software geben (kompiliert für 4 verschiedene CPU-Bereiche), wobei das Installationsprogramm entscheidet, welche Kopie für den Computer, auf dem die Software installiert wird, sinnvoll ist.
-
Laufzeittests verwenden. Zum Beispiel kann der Code die CPUID
Handlungsanweisung if( AVX2_is_supported() ) { set_function_pointers_so_AVX2_is_used(); } else {set_function_pointers_so_AVX2_is_not_used(); }
. Hinweis: Einige Compiler (Intels ICC) können automatisch Code erzeugen, der Laufzeittests durchführt.
Diese Optionen schließen sich nicht gegenseitig aus. Beispielsweise könnte das Installationsprogramm beschließen, eine 64-Bit-Version (und nicht eine 32-Bit-Version) zu installieren, und dann könnte die 64-Bit-Version prüfen, welche Funktionen zur Laufzeit unterstützt werden, und unterschiedlichen Code für die Verwendung verschiedener Funktionen haben.
Beachten Sie auch, dass verschiedene Teile eines Betriebssystems getrennt behandelt werden können. So könnte ein Betriebssystem beispielsweise 6 verschiedene Bootloader, 4 verschiedene "HALs", 4 verschiedene Kernel und 3 verschiedene "Kernel-Module" zur Unterstützung der Virtualisierung haben, wobei einige dieser Teile möglicherweise Laufzeittests durchführen und andere nicht.
Haben Intel- und AMD-Prozessoren denselben Assembler?
Fast alle Assembler für 80x86 unterstützen fast alle Erweiterungen (von allen CPU-Herstellern - z.B. Intel, AMD, VIA, Cyrix, SiS, ...). Im Allgemeinen liegt es am Programmierer (oder Compiler) sicherzustellen, dass er nur Dinge verwendet, von denen er weiß, dass sie existieren. Einige Assembler bieten Funktionen, die dies erleichtern (z.B. bietet NASM eine CPU ...
Anweisung, damit der Programmierer den Assembler anweisen kann, Fehler zu erzeugen, wenn er Anweisungen sieht, die auf der angegebenen CPU nicht unterstützt werden).
2 Stimmen
Erinnert sich noch jemand an die K5-Serie von AMD :)
0 Stimmen
Jetzt, da AMD an ARM64 arbeitet, ist diese Frage zweideutig :-)
1 Stimmen
AMD hat schon immer CPUs hergestellt, die mit Intel kompatibel sind...