Arquitetura e organização de computadores Ciclo de instrução Aula 08 Prof. Diovani Milhorim Ciclo de instrução CICLO DE INSTRUÇÃO Para se executar um programa, primeiramente ele precisa ser carregado (armazenado) na MP, o que é feito pelo Sistema Operacional, que também se encarrega de informar à UCP onde o programa começa. O Sistema Operacional faz isto "setando" o Contador de Instruções (isto é, colocando no CI o endereço da MP onde está localizada a primeira instrução daquele programa). Ciclo de instrução CICLO DE INSTRUÇÃO A partir do carregamento do programa se realiza o processamento automático, executando-se as instruções seqüencialmente uma a uma, o que é obtido através do incremento automático do CI. Obs: Se o programa inclui uma instrução de desvio, o fluxo seqüencial pode ser alterado. Ciclo de instrução CICLO DE INSTRUÇÃO A UCP não diferencia um dado de uma instrução. A UCP não "executa" dados devido ao conteúdo do CI, que é incrementado pelo tamanho da instrução e fica sempre apontando para a próxima instrução. Mas se em um programa houver uma instrução de desvio para um endereço em que esteja contido um dado, a UCP interpretaria o valor binário do dado como se fosse o código de uma instrução, tentaria executar e o resultado seria imprevisível. Ciclo de instrução Ciclo de instrução Ciclo de Instrução Primeiro passo A UCP busca o código de operação na MP e armazena no Registrador de Instrução da UC Fase: Busca da instrução - (Instruction Fetch) ciclo de busca RI <--- (CI) Ciclo de instrução Ciclo de Instrução – Busca de instrução Micro-operações: - a UC lê o conteúdo do CI (endereço da próxima instrução ) e coloca o endereço no REM; - a UC envia um sinal à memória de operação de leitura (memory read), via barramento de controle; - a memória lê o endereço que está no REM, via barramento de endereços, e busca o conteúdo da célula referenciada; - a memória coloca no RDM, via barramento de dados, o conteúdo da célula lida; - a memória envia à UC, via barramento de controle, um sinal de "leitura concluída"; - a UC transfere o código de operação (o conteúdo do RDM) ao RI. Ciclo de instrução Ciclo de Instrução Segundo passo A UC (decodificador de instruções) decodifica o Código de Operação. Fase: Busca da instrução - (Instruction Fetch) - ciclo de busca Ciclo de instrução Ciclo de Instrução Segundo passo Micro-operações: - o Decodificador de Instruções decodifica o opcode; - o Decodificador de Instruções determina quantas células a instrução ocupa; - a UC incrementa o CI para apontar para a próxima instrução: CI <--- (CI + n), onde n = nº de células que a instrução ocupa. - a UC incrementa o REM para apontar para o operando: REM <--- (REM + 1); Ciclo de instrução Ciclo de Instrução Terceiro passo A UC busca (se houver) o(s) operando(s). Fase: Busca de operandos (Operand Fetch) - ciclo de execução RI <--- (Op) Ciclo de instrução Ciclo de Instrução Terceiro passo Micro-operações: - a UC envia um sinal à memória de operação de leitura (memory read), via barramento de controle; - a memória lê o endereço que está no REM, via barramento de endereços, e busca o conteúdo da célula referenciada; - a memória coloca no RDM, via barramento de dados, o conteúdo da célula lida; - a memória envia à UC, via barramento de controle, um sinal de "leitura concluída"; Ciclo de instrução Ciclo de Instrução Terceiro passo Micro-operações: - a UC transfere o operando (o conteúdo do RDM) ao RI. * Se o operando é o próprio dado: -- a UC transfere o dado (o conteúdo do RDM) ao ACC. -- vai para operação 4; caso contrário: (continua) Ciclo de instrução Ciclo de Instrução Terceiro passo Micro-operações: caso contrário: * Se o operando é um ponteiro para onde o dado está armazenado: -- a UC coloca no REM o endereço de onde o dado está armazenado; -- Repete-se o processo de leitura da memória. -- a UC transfere o dado (o conteúdo do RDM) ao ACC; -- vai para operação 4. Ciclo de instrução Ciclo de Instrução Quarto passo A UC comanda a execução da instrução (a operação é executada sobre o dado). Fase: Execução da instrução - ciclo de execução - UAL executa a instrução. Ciclo de instrução Ciclo de Instrução Quinto passo Se o programa tiver terminado, Para; senão, volta ao passo 1. Ciclo de instrução Ciclo de Instrução Exemplo 1: Observe o formato da instrução e o conteúdo da memória principal na máquina hipotética a seguir: Ciclo de instrução Ciclo de Instrução Exemplo 1: formato de instrução: Ciclo de instrução Ciclo de Instrução Exemplo 1: Conteúdo da memória principal Ciclo de instrução Ciclo de Instrução Exemplo 1: Solução: O CI tem 8 bits porque o operando tem 8 bits; o mapa de memória também mostra isso, com os endereços ocupando 2 dígitos hexadecimais (cada dígito hexadecimal requer 4 bits). A célula de memória tem 8 bits, conforme vemos pelo mapa de memória, em que os conteúdos das células ocupam 2 dígitos hexadecimais. O RI tem 16 bits porque a instrução tem 16 bits. ACC - não daria para assegurar porque depende do tamanho da palavra; vamos assumir 8 bits, de vez que como o operando, o opcode e a célula têm 8 bits, o RDM e o Acumulador provavelmente também terão 8 bits A instrução ocupará 2 células, logo o incremento do CI = n = 2 Ciclo de instrução Ciclo de Instrução Exemplo 1: Nesta máquina, considere que o código de operação 2A significa LDA Op ==> ACC <--- (Op) Obs.: A instrução do exercício LDA Op (LDA é um mnemônico para "load accumulator") significa "carrega no acumulador o conteúdo da posição de memória indicada no operando". Ciclo de instrução Ciclo de Instrução Exemplo 1: Vamos acompanhar o processamento da instrução: LOAD (2A neste exemplo) => colocar o conteúdo do endereço indicado pelo operando no ACC (carrega dado no acumulador); T0, T1 e T2 representam os diversos estados dos registradores (nos respectivos tempos do ciclo de busca da instrução). n=2 (2 acessos à MP para buscar instrução) Ciclo de instrução Ciclo de Instrução Exemplo 1: Ciclo de instrução Ciclo de Instrução Exemplo 2: Considerando a mesma máquina do exemplo anterior, qual seria o processamento da instrução: LDIA Op ==> ACC <--- ((Op)) Obs.: A instrução do exercício LDIA Op (LDIA é um mnemônico para "load accumulator indirect") significa "carrega no acumulador o conteúdo da posição de memória apontada pela posição indicada no operando". Portanto, a posição de memória indicada pelo Operando é um ponteiro para a posição onde está o dado e existe uma indireção. Ciclo de instrução Ciclo de Instrução Exemplo 2: