* Set di istruzioni Architecture (ISA): Questo è l'insieme fondamentale di istruzioni che una CPU comprende. CPU diverse (anche dallo stesso produttore) hanno ISA diversi. Ciò che è una semplice istruzione di addizione su una CPU potrebbe essere un'operazione in più fase complesse su un'altra, o potrebbe non esistere nemmeno. La codifica di queste istruzioni (i modelli di bit specifici che rappresentano ciascuna istruzione) varia selvaggiamente tra gli ISA.
* Numero di registri: Le CPU hanno registri interni per l'archiviazione dei dati temporanei. Il numero e le dimensioni di questi registri differiscono tra le CPU. Un programma scritto per utilizzare un numero e un tipo di registri specifici non funzionano su una CPU con una configurazione diversa.
* Modalità di indirizzamento della memoria: Il modo in cui la CPU accede alla memoria (ad es. Indirizzi diretti, indirizzi indiretti, ecc.) Varia tra le architetture. Il codice macchina riflette queste modalità di indirizzamento, rendendolo incompatibile con le CPU usando metodi diversi.
* Rappresentazioni di dati: Il modo in cui i tipi di dati (numeri interi, numeri a punta mobile, ecc.) Sono rappresentati in formato binario può differire. Un programma compilato per una rappresentazione dei dati di una CPU potrebbe produrre risultati errati o addirittura arresti crash su una CPU con una rappresentazione diversa.
* Chiamate di sistema: I programmi spesso interagiscono con il sistema operativo attraverso le chiamate di sistema. Il modo in cui vengono effettuate queste chiamate e i codici specifici utilizzati sono CPU e specifici del sistema operativo, aggiungendo un altro livello di incompatibilità.
In sostanza, il codice macchina è estremamente basso e strettamente accoppiato all'hardware fisico. Cercare di eseguire il codice macchina compilato per una CPU su una diversa è come provare a riprodurre un record destinato a un giradischi da 33⅓ giri / min su un giradischi da 45 giri / min:le velocità sono diverse e il risultato è incomprensibile. I linguaggi di livello superiore (come C ++, Java, Python) risolvono questo problema usando compilatori o interpreti per tradurre il codice in un modulo adatto all'architettura della CPU target.
Programmazione © www.354353.com