Estou um pouco confuso entre o nível de microprogramação e o nível de linguagem de máquina. Por exemplo:
- Onde os dois tipos de programas residem durante a execução?
- Você tem um mapeamento 1: 1 para instruções true-op da linguagem assembly?
- O formato é definido pela arquitetura do processador?
Respostas:
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.
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.
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 do código da máquina e do microcódigo é definido pela arquitetura do processador.
fonte
Basicamente, o microcódigo expande um conjunto limitado de instruções da CPU para conter instruções de nível superior que seriam difíceis de implementar no hardware, mas relativamente fáceis de construir com as instruções existentes. O microcódigo permite que um processador com um pequeno conjunto de instruções funcione como um com um conjunto maior de instruções.
Digamos que você esteja trabalhando com um conjunto de instruções MARIE e deseje uma função Add x, y, mas a arquitetura permite apenas um Add x (que apenas adiciona o que está atualmente no registro em x) para adicionar uma instrução de microcódigo:
Agora, quando o código do idioma da máquina indicar:
procura a função ADICIONAR que você adicionou à ROM (seu microcódigo) e a executa. Isso é ótimo porque aumenta o seu conjunto de instruções, o que permite um código de máquina mais legível e, como o microcódigo é armazenado na ROM, também é um pouco mais rápido do que chamar LOAD e ADD da RAM.
Eu trabalhava em uma empresa que realmente escreveu microcódigo para realizar medições personalizadas em velocidades muito altas em seus sistemas mais antigos. No entanto, com os avanços nos FPGAs, eles mudaram para aqueles que são muito mais rápidos (já que você realmente implementa as "instruções personalizadas" no hardware, em vez da ROM).
fonte
Muitos processadores são acionados por uma máquina de estado cuja sequência de transição é afetada pelas instruções que estão sendo executadas. As "instruções" do microcódigo geralmente especificam as interações entre vários registradores e barramentos de uma maneira que não seria visível para um programador.
Por exemplo, uma instrução de microcódigo para uma CPU de 8 bits no estado # 1 pode especificar que a saída que permite que ambas as metades do contador de programa estejam ativas (fazendo com que o contador de programa seja gerado no barramento de endereço interno superior e inferior), o o sinal de incremento do contador de programa deve estar ativo, os sinais de trava de endereço externo devem estar ativos (para que o barramento de endereço externo rastreie o interno) e o sinal de leitura de RAM esteja ativo e o controlador mude para o estado # 2.
No estado # 2, o barramento de dados externo deve alimentar o barramento de dados primário interno e o registro de instruções, que lê esse barramento, deve ser carregado. O contador do programa deve, como antes, ser emitido nas duas metades do barramento de endereços e em outra leitura de RAM emitida. Os bits 5-7 do registro de instruções devem ser carregados nos bits 0-2 do controlador de estado, o bit 3 do registro de estado deve ser definido, a menos que os bits 1-7 do registro de instruções estejam todos definidos e outros bits do registro de estado deve ficar claro, o resultado líquido é que o próximo estado será # 7- # 15.
Observe que o microcódigo não é realmente definido em termos de instruções, mas em termos de combinações de sinais de controle. O hardware não será configurado para permitir instruções de uso geral em microcódigo, mas para carregar ou emitir vários registros de / para os barramentos nos quais eles se sentam ou conectar barramentos diferentes entre si e usar vários bits ou combinações para selecione estados diferentes. Muitos aspectos do design serão conectados com fio (por exemplo, os códigos de operação FE e FF podem ter uma caixa especial em hardware e não em microcódigo). A idéia com microcódigo não é executar programas, mas substituir a lógica.
fonte