O que significa (decodificar) no ciclo de execução?

6

Em um ciclo de instrução típico, buscar, decodificar e executar juntos formam um ciclo. Minha pergunta é sobre o passo da decodificação: qual é a parte que é decodificada, é o opcode da instrução? Em caso afirmativo, por que é codificado então?

Na verdade, eu entendo decodificação aqui de maneira semelhante ao que você decodifica uma mensagem dada uma chave no campo da segurança, que é o que me confunde um pouco.

    
por Steve 21.03.2016 / 22:48

4 respostas

3

Decode significa analisar a instrução para determinar seu significado.

Uma instrução típica consiste em um opcode e (geralmente) um ou mais argumentos. Esses argumentos podem se referir a registros específicos ou endereços de memória ou podem ser valores imediatos a serem usados diretamente durante a execução. Além disso, algumas instruções podem ter prefixos (como LOCK em x86) ou códigos de função (como o campo funct para algumas instruções do MIPS) que alteram sua funcionalidade.

Durante a decodificação, o processador precisa:

  • determine qual instrução é representada pelo opcode para que a instrução possa ser enviada para a unidade de execução correta e que o a operação correta é executada
  • interpreta corretamente os argumentos, prefixos e outros valores anexados à instrução e transmite as informações relevantes para o circuito relevante
  • (na maioria dos designs de processadores modernos), quebre as instruções em suas correspondentes micro-operações

Com processadores modernos, isso pode ser uma operação complexa que requer vários estágios no pipeline. Para acelerar este processo, um cache dedicado pode ser usado para armazenar micro-operações para instruções executadas com frequência.

Para saber mais sobre as técnicas usadas para fornecer alto desempenho em processadores modernos, convém ler esta resposta .

    
por 22.03.2016 / 03:36
7

As instruções de montagem, além de um código de operação, geralmente possuem campos de bits que indicam os modos de registro e endereçamento (absoluto, relativo, incremento automático e mais).

A decodificação é o ciclo que interpreta o opcode e outros campos de bit para determinar em que a instrução irá operar, ou de outra forma.

Resumo: descobre os detalhes opcionais de uma instrução

Exemplo: 0x90 (10010000 binário) é geralmente considerado um NOP , nenhuma operação, para o conjunto de instruções do 8086.

Mas há uma instrução XCHG , representada como 10010reg binária (reg = 3 bits), (0x90 + reg) que é um registrador de troca de 16 bits com a instrução AX . os 3 bits denotados por 'reg' definem com qual registrador trocar.

'reg' do binário 000, significa 'com registro AX '. Então 0x90 decodifica como "troca AX com AX ", o que não faz muito, AKA Nenhuma operação NOP

    
por 21.03.2016 / 22:56
6

Instruções e modos de endereçamento são o que é decodificado. As instruções + modos de endereçamento consistem em um código de operação e quaisquer dados imediatos (operandos) após o opcode.

If so, why it is encoded then?

Porque estamos usando valores na RAM para "suportar" instruções e modos de endereçamento. Existe um esquema pelo qual X = qualquer instrução + qualquer modo de endereçamento. Semelhante a como o ASCII / Unicode é um esquema que "representa" números, letras e códigos de controle de terminal.

A etapa de decodificação não seria necessária se você tivesse uma máquina que tivesse 1 comutador para cada instrução possível. O "RAM equivalente" disso seria 1 instrução por bit em um byte de 8 bits (ou outro), e se vários bits estivessem ativados, todas as instruções (e sim você seria limitado a 8 delas) "disparariam" em esse passo. Eu acredito que a montagem do PDP do final dos anos 60 / início dos anos 70 não está muito longe disso.

In fact, I understand decoding here in similar way as what you decode a message given a key in the field of security, which is what confuses me a bit.

Não, é mais como decodificar dados MPEG em dados brutos de vídeo - os dados brutos do MPEG não podem ser pintados diretamente na tela, precisam ser processados e "descompactados" para descobrir exatamente o que isso significa.

    
por 21.03.2016 / 23:32
0

O opcode é apenas um número, contendo n possibilidades diferentes em uma enumeração. Além de separar o código de operação dos modos e opções de endereçamento, você realmente decodifica esse ID de operação em um monte de bits de controle que possuem significado real no hardware de implementação. Os processadores modernos são ainda mais complexos, expandindo uma instrução de montagem, possivelmente em várias micro-operações.

Você pode encontrar vídeos no youtube para criar uma cpu "do zero".

    
por 22.03.2016 / 01:01