Por que um programa em linguagem assembly não é diretamente executável pelo processador?

Processadores de linguagem -  

Compiladores, intérpretes, traduzem programas escritos em linguagens de alto nível em código de máquina que um computador entende. E os montadores traduzem programas escritos em linguagem de baixo nível ou assembly em código de máquina. No processo de compilação, existem várias etapas. Para ajudar os programadores a escrever código sem erros, existem ferramentas disponíveis.

A linguagem assembly é dependente da máquina, mas os mnemônicos usados ​​para representar as instruções nela não são diretamente compreensíveis pela máquina e a linguagem de alto nível é independente da máquina. Um computador entende as instruções em código de máquina, ou seja, na forma de 0s e 1s. É uma tarefa tediosa escrever um programa de computador diretamente em código de máquina. Os programas são escritos principalmente em linguagens de alto nível como Java, C++, Python etc. e são chamados de código-fonte. Este código-fonte não pode ser executado diretamente pelo computador e deve ser convertido em linguagem de máquina para ser executado. Conseqüentemente, um software de sistema tradutor especial é usado para traduzir o programa escrito em uma linguagem de alto nível em código de máquina, denominado Processador de Linguagem e o programa depois de traduzido em código de máquina (programa objeto / código objeto).  

Os processadores de linguagem podem ser qualquer um dos três tipos a seguir:  

1. Compilador: 
O processador de linguagem que lê o programa fonte completo escrito em linguagem de alto nível como um todo de uma vez e o traduz em um programa equivalente em linguagem de máquina é chamado de Compilador. Exemplo: C, C++, C#, Java.   

Em um compilador, o código-fonte é convertido em código-objeto com êxito, se estiver livre de erros. O compilador especifica os erros no final da compilação com números de linha quando há algum erro no código-fonte. Os erros devem ser removidos antes que o compilador possa recompilar com sucesso o código-fonte novamente

Por que um programa em linguagem assembly não é diretamente executável pelo processador?

2. Assembler:
O Assembler é usado para traduzir o programa escrito em linguagem Assembly em código de máquina. O programa de origem é uma entrada de um assembler que contém instruções em linguagem assembly. A saída gerada pelo montador é o código-objeto ou código de máquina compreensível pelo computador. Assembler é basicamente a 1ª interface capaz de comunicar humanos com a máquina. Precisamos de um montador para preencher a lacuna entre o homem e a máquina para que eles possam se comunicar. o código escrito em linguagem assembly é algum tipo de mnemônica (instruções) como ADD, MUL, MUX, SUB, DIV, MOV e assim por diante. e o montador é basicamente capaz de converter esses mnemônicos em código binário. Aqui, esses mnemônicos também dependem da arquitetura da máquina. 

Por exemplo, a arquitetura do intel 8085 e do intel 8086 são diferentes.
 

Por que um programa em linguagem assembly não é diretamente executável pelo processador?

3. Intérprete: 
A tradução de uma única instrução do programa-fonte em código de máquina é feita por um processador de linguagem e executada imediatamente antes de passar para a próxima linha é chamada de interpretador. Se houver um erro na instrução, o interpretador encerrará seu processo de tradução nessa instrução e exibirá uma mensagem de erro. O intérprete passa para a próxima linha para execução somente após a remoção do erro. Um intérprete executa diretamente as instruções escritas em uma linguagem de programação ou script sem convertê-las previamente em um código-objeto ou código de máquina.            

Exemplo: Perl, Python e Matlab.

Por que um programa em linguagem assembly não é diretamente executável pelo processador?

Diferença entre compilador e intérprete - 
 

CompiladorIntérprete
Um compilador é um programa que converte todo o código-fonte de uma linguagem de programação em código de máquina executável para uma CPU.  
 
Um intérprete pega um programa fonte e o executa linha por linha, traduzindo cada linha conforme ela chega
O compilador leva muito tempo para analisar todo o código-fonte, mas o tempo de execução geral do programa é comparativamente mais rápido. 
 
Um intérprete leva menos tempo para analisar o código-fonte, mas o tempo de execução geral do programa é mais lento.
O compilador gera a mensagem de erro somente após a varredura de todo o programa, portanto, a depuração é comparativamente difícil, pois o erro pode estar presente em qualquer parte do programa.   Sua depuração é mais fácil, pois ele continua traduzindo o programa até que o erro seja encontrado.
O compilador requer muita memória para gerar códigos de objeto. Requer menos memória do que um compilador porque nenhum código-objeto é gerado.
Gera código de objeto intermediário.  Nenhum código de objeto intermediário é gerado.
Para fins de segurança, o compilador é mais útil. O intérprete fica um pouco vulnerável em caso de segurança.
Exemplos: C, C++, Java   Exemplos: Python, Perl, JavaScript, Ruby

Quando se programa em linguagem Assembly o que é necessário fazer para ter um programa executável?

Para que um programa possa ser executado, é preciso que seja transferido para a memória principal. A maioria dos programas ficam armazenados em disco, mas a CPU não pode executar nenhum programa diretamente a partir do disco. O programa precisa ser antes lido do disco e carregado na memória principal.

O que é linguagem Assembly é qual a sua relação direta com a arquitetura do processador?

Assembly ou linguagem de montagem é uma notação legível por humanos para o código de máquina que uma arquitetura de computador específica usa, utilizada para programar códigos entendidos por dispositivos computacionais, como microprocessadores e microcontroladores.

Como executar um código Assembly?

Para usar é bastante simples, basta abrir o terminal e alterar o nome do arquivo, digitar as linhas seguidas apertando a tecla [enter] no final de cada linha. Atenção não coloque #, coloque apenas os comandos as hello. s -o hello.

Por que é difícil programar em Assembly?

Desvantagens. Programar em Assembly consome muito tempo para o programador; A linguagem é portável apenas dentro de uma família de processadores. Como é uma linguagem especifica para processadores de cada máquina, é necessário desenvolver um programa para cada máquina.