Um programa de linguagem de máquina escrito para um computador não será executado em outro com uma CPU diferente, porque a linguagem da máquina está diretamente ligada à arquitetura específica da CPU . Isso significa que as instruções são codificadas de uma maneira que apenas o hardware da CPU em particular pode entender e executar. As diferenças se enquadram em várias áreas -chave:
*
Conjunto de instruções Arquitetura (ISA): Este é o conjunto fundamental de instruções que uma CPU entende. Diferentes CPUs (mesmo do mesmo fabricante) têm ISAs diferentes. O que é uma instrução de adição simples em uma CPU pode ser uma operação complexa de várias etapas em outra, ou pode nem existir. A codificação dessas instruções (os padrões de bits específicos que representam cada instrução) varia muito entre as ISAs.
*
Número de registros: As CPUs possuem registros internos para armazenamento temporário de dados. O número e o tamanho desses registros diferem entre as CPUs. Um programa gravado para usar um número específico e o tipo de registro não funcionará em uma CPU com uma configuração diferente.
*
Modos de endereço de memória: Como a CPU acessa a memória (por exemplo, endereçamento direto, endereçamento indireto etc.) varia entre arquiteturas. O código da máquina reflete esses modos de endereçamento, tornando -o incompatível com as CPUs usando métodos diferentes.
*
Representações de dados: A maneira como os tipos de dados (números inteiros, números de ponto flutuante etc.) são representados em formato binário podem diferir. Um programa compilado para a representação de dados de uma CPU pode produzir resultados incorretos ou até travar em uma CPU com uma representação diferente.
*
Chamadas do sistema: Os programas geralmente interagem com o sistema operacional através de chamadas do sistema. A maneira como essas chamadas são feitas e os códigos específicos utilizados são a CPU e o sistema operacional específico, adicionando outra camada de incompatibilidade.
Em essência, o código da máquina é extremamente baixo e fortemente acoplado ao hardware físico. Tentar executar o código da máquina compilado para uma CPU em outra é como tentar tocar um recorde destinado a uma plataforma giratória de 33⅓ rpm em uma plataforma giratória de 45 rpm - as velocidades são diferentes e o resultado é sem sentido. Idiomas de nível superior (como C ++, Java, Python) resolvem esse problema usando compiladores ou intérpretes para traduzir o código em um formulário adequado para a arquitetura da CPU de destino.