O microcódigo é outro nível de abstração além do código da máquina. A CPU real está executando o microcódigo e um mecanismo de tradução converte o código da máquina em microcódigo em tempo real. Isso é feito por vários motivos, incluindo processadores menores e mais rápidos, mais fáceis de criar um processador complexo com menos depuração e compatibilidade retroativa. Por exemplo, o conjunto de instruções x86 contém algumas instruções de processamento de sequência que raramente são usadas. No entanto, para permanecer compatível com versões anteriores, eles ainda devem estar disponíveis nos modernos processadores x86. Em vez de conectar um caminho de execução a essas instruções, elas são convertidas em microcódigo e executadas. Isso economiza silício, enquanto permanece compatível com versões anteriores.
Onde os dois tipos de programas residem durante a execução?
O código da máquina reside no cache (após ser extraído da RAM). O microcódigo reside em um cache de microcódigo, dependendo da arquitetura da máquina em particular. O cache pode ser grande o suficiente para armazenar microcódigo suficiente para reter o microcódigo convertido da maior instrução de código de máquina possível, ou pode ser um cache maior que armazena os resultados convertidos de muitos códigos de máquina para que não seja necessário reconverter todos o código da máquina em cada iteração para pequenos loops.
Em algumas arquiteturas, o microcódigo convertido não é armazenado em nenhum lugar - a unidade de busca / conversão simplesmente fornece uma série de instruções de microcódigo com base no código da máquina em execução no momento. Nesse caso, o microcódigo está sendo executado a partir de uma ROM de algum tipo, e o código da máquina é essencialmente um índice da ROM - apontando para a série de instruções do microcódigo que devem ser executadas para executar completamente a instrução do código da máquina.
Você tem um mapeamento 1: 1 para instruções true-op da linguagem assembly?
Código de máquina e código de montagem, em geral são 1: 1 mapeados para as instruções de montagem. Depende do montador. Montadores de alto nível podem ter um grande conjunto de macros que permitem escrever uma linha de código de montagem e o montador produzirá vários códigos de máquina.
Mas, em geral, a linguagem assembly "pura" pode ser convertida diretamente em código de máquina usando a tabela de conjunto de instruções no manual do processador.
Não sei ao certo o que você quer dizer com "instruções de operação verdadeira". Talvez você possa explicar a referência.
O formato é definido pela arquitetura do processador?
O formato do código da máquina e do microcódigo é definido pela arquitetura do processador.