Prévia do material em texto
1 Fundamentos de Arquiteturas de Computadores UCP Execução de Instruções Profa. Débora Christina Muchaluat Saade debora@midiacom.uff.br Departamento de Ciência da Computação - UFF http://www.midiacom.uff.br/debora 9 Fundamentos de Arquiteturas de Computadores Nosso Processador Hipotético … 32 bits Endereço de 16 bits 216 endereços 0 1 2 216 - 1 Memória Principal 00000000000..000 0 1 2 UCP Conjunto de 8 Registradores de Dados 32 bits 3 4 5 6 7 UCP Registradores de Controle • PC – Program Counter – Contador de Instruções – 16 bits • armazena o endereço da próxima instrução em memória • IR – Instruction Register – Registrador de Instrução – 32 bits • armazena a instrução a ser executada 10 Fundamentos de Arquiteturas de Computadores Linguagem de Montagem Departamento de Ciência da Computação - UFF 11 Fundamentos de Arquiteturas de Computadores Nosso Processador Hipotético ü O conjunto de instruções desta máquina é composto de 7 instruções: ü Linguagem de Montagem • add regA regB destreg • addi regA regB imediato • lw regA regB deslocamento • sw regA regB deslocamento • beq regA regB deslocamento • halt • noop 13 Fundamentos de Arquiteturas de Computadores Linguagem de Montagem - SOMA ü add regA regB destreg • soma o conteúdo do registrador regA com o conteúdo de regB e armazena resultado no registrador destreg ü Programa em C: • a=b+c ü Programa em Linguagem de montagem: • add b c a ü Supondo variável a alocada para registrador 1, variável b alocada para registrador 2, variável c alocada no registrador 3 • add 2 3 1 15 Fundamentos de Arquiteturas de Computadores Linguagem de Montagem - SOMA ü addi regA regB imediato • soma o conteúdo do registrador regA com o valor imediato e armazena resultado no registrador regB • regB = regA + imediato ü Programa em C: • i=j+5 ü Programa em Linguagem de montagem: • addi j i 5 ü Supondo variável i alocada para registrador 1, variável j alocada para registrador 2 • addi 2 1 5 17 Fundamentos de Arquiteturas de Computadores Linguagem de Montagem – LEITURA DA MEMÓRIA ü lw regA regB deslocamento • carrega no registrador regB o conteúdo da palavra da memória cujo endereço é a soma do conteúdo do registrador regA com o valor deslocamento Endereço de 16 bits 216 endereços … 32 bits 0 1 2 216 - 1 Memória Principal Endereço base => regA regA + deslocamento …deslocamento regB 21 Fundamentos de Arquiteturas de Computadores Linguagem de Montagem – ESCRITA EM MEMÓRIA ü sw regA regB deslocamento • armazena o conteúdo do registrador regB na palavra da memória cujo endereço é a soma do conteúdo do registrador regA com o valor deslocamento Endereço de 16 bits 216 endereços … 32 bits 0 1 2 216 - 1 Memória Principal Endereço base => regA regA + deslocamento …deslocamento regB 24 Fundamentos de Arquiteturas de Computadores Etapa 1 – LEITURA DA MEMÓRIA ü Programa em C • A[12]=h+A[8] ü Programa em linguagem de montagem, supondo h alocada no registrador 2 e endereço inicial do vetor A no registrador 4 (lw regA regB deslocamento): • lw 4 1 8 • add 1 2 1 • sw 4 1 12 Endereço de 16 bits 216 endereços … 32 bits 0 1 2 216 - 1 Memória Principal Reg 4 end. A[0] endereço do A[8] …deslocamento=8 Reg 1 = A[8] 25 Fundamentos de Arquiteturas de Computadores Etapa 2 – SOMA ü Programa em C • A[12]=h+A[8] ü Programa em linguagem de montagem, supondo h alocada no registrador 2 e endereço inicial do vetor A no registrador 4: • lw 4 1 8 - lê A[8] da memória e armazena no reg 1 • add 1 2 1 - soma reg 1(A[8]) e reg 2(h) • sw 4 1 12 - escreve na memória para atualizar o A[12] ü Lembrete: • add regA regB destreg – soma o conteúdo do registrador regA com o conteúdo de regB e armazena resultado no registrador destreg 28 Fundamentos de Arquiteturas de Computadores Etapa 1 – LEITURA DA MEMÓRIA ü Programa em C • A[300]=h+A[300] ü Programa em linguagem de montagem, supondo h alocada no registrador 2 e endereço inicial do vetor A no registrador 6 (lw regA regB deslocamento): • lw 6 5 300 • add 5 2 5 • sw 6 5 300 Endereço de 16 bits 216 endereços … 32 bits 0 1 2 216 - 1 Memória Principal Reg 6 end. A[0] endereço do A[300] …deslocamento=300 Reg 5 = A[300] 32 Fundamentos de Arquiteturas de Computadores Linguagem de Montagem – DESVIO CONDICIONAL ü beq regA regB Label • Caso o conteúdo de regA seja igual ao conteúdo de regB, vai para instrução no endereço indicado por Label, caso contrário executa a próxima instrução. ü Programa em C: if (x!=y) f=g+x; else f=g+y; ü Supondo x alocada no registrador 1, y em reg 2, f em reg 3 e g em reg 4, teremos o seguinte código: beq 1 2 ELSE add 4 1 3 beq 1 1 EXIT ELSE add 4 2 3 EXIT halt 33 Fundamentos de Arquiteturas de Computadores Linguagem de Montagem – FIM DO PROGRAMA ü halt • incrementa o valor de PC (Program Counter) e para execução do programa ü Programa em C: if (x!=y) f=g+x; else f=g+y; ü Supondo x alocada no registrador 1, y em reg 2, f em reg 3 e g em reg 4, teremos o seguinte código: beq 1 2 ELSE add 4 1 3 beq 1 1 EXIT ELSE add 4 2 3 EXIT halt 34 Fundamentos de Arquiteturas de Computadores Linguagem de Montagem – LOOP ü beq regA regB Label • Caso o conteúdo de regA seja igual ao conteúdo de regB, vai para instrução no endereço indicado por Label, caso contrário executa a próxima instrução. ü Programa em C: while (A[i] != k) i=i+j; ü Supondo i alocada no registrador 1, j em reg 2, k em reg 3 e endereço inicial do vetor A em reg 4: LOOP add 4 1 5 lw 5 5 0 beq 5 3 EXIT add 1 2 1 beq 1 1 LOOP EXIT halt 35 Fundamentos de Arquiteturas de Computadores Linguagem de Montagem – LOOP ü Programa em C: for (i=0; i< 9; i++) A[i]=A[i+1]; A[9]=0; ü Tradução para linguagem de montagem: ü Supondo i alocada no registrador 1 e endereço inicial do vetor A no registrador 2: addi 0 1 0 inicializa i com o valor 0 addi 0 3 9 inicializa variável de controle do loop com valor 9 FOR beq 1 3 SAI verifica se i < 9 add 1 2 4 obtém endereço de A[i] addi 4 5 1 obtém endereço de A[i+1] lw 5 5 0 obtém valor de A[i+1] sw 4 5 0 armazena A[i+1] em A[i] addi 1 1 1 incrementa I beq 0 0 FOR volta para FOR SAI sw 2 0 9 armazena 0 em A[9] 36 Fundamentos de Arquiteturas de Computadores Linguagem de Montagem – NO OPERATION ü noop • incrementa o valor de PC (Program Counter) e vai para próxima instrução ü Vai ser útil para execução em pipeline