Ett maskinspråkprogram skrivet för en dator kommer inte att köras på en annan med en annan CPU eftersom maskinspråket är
direkt bundet till den specifika arkitekturen för CPU . Detta innebär att instruktionerna är kodade på ett sätt som endast den specifika CPU:s hårdvara kan förstå och köra. Skillnaderna faller inom flera viktiga områden:
* Instruktionsset Architecture (ISA): Detta är den grundläggande uppsättningen av instruktioner som en CPU förstår. Olika CPU:er (även från samma tillverkare) har olika ISA:er. Vad är en enkel tilläggsinstruktion på en CPU kan vara en komplex flerstegsoperation på en annan eller kanske inte ens finns. Kodningen av dessa instruktioner (de specifika bitmönstren som representerar varje instruktion) varierar vilt mellan ISAS.
* Antal register: CPU:er har interna register för tillfällig datalagring. Antalet och storleken på dessa register skiljer sig mellan CPU:er. Ett program skrivet för att använda ett specifikt nummer och typ av register fungerar inte på en CPU med en annan konfiguration.
* Minnesadresseringslägen: Hur CPU kommer åt minnet (t.ex. direkt adressering, indirekt adressering, etc.) varierar mellan arkitekturer. Maskinkoden återspeglar dessa adresseringslägen, vilket gör den oförenlig med CPU:er med olika metoder.
* Datarepresentationer: Hur datatyper (heltal, flytande punktnummer etc.) representeras i binärt format kan skilja sig åt. Ett program sammanställt för en CPU:s datarepresentation kan ge felaktiga resultat eller till och med kraschar på en CPU med en annan representation.
* Systemsamtal: Program interagerar ofta med operativsystemet genom systemsamtal. Hur dessa samtal görs och de specifika koderna som används är CPU och operativsystemspecifika, vilket lägger till ytterligare ett lager av inkompatibilitet.
I huvudsak är maskinkod extremt låg nivå och tätt kopplad till den fysiska hårdvaran. Att försöka köra maskinkod sammanställt för en CPU på en annan är som att försöka spela en skiva avsedd för en 33⅓ varv / min -skivspelare på en 45 varv / min skivspelare - hastigheterna är olika och resultatet är gibberish. Språk på högre nivå (som C ++, Java, Python) löser detta problem genom att använda kompilatorer eller tolkar för att översätta koden till ett formulär som är lämpligt för mål CPU:s arkitektur.