Prova G2 Disciplina: Organização de Computadores-EC Professor: Ney Laert Vilar Calazans Aluno: 07/dezembro/2012 1. (3,0 pontos) Verdadeiro ou Falso. Abaixo aparem 10 afirmativas. Marque com V as afirmativas verdadeiras e com F as falsas. Se não souber a resposta correta, deixe em branco, pois cada resposta correta vale 0,3 pontos, mas cada resposta incorreta desconta 0,2 pontos do total positivo de pontos. Não é possível que a questão produza uma nota menor do que 0,0 pontos. a) (X) A diretiva de montagem.data aita pelo montador do ambiente MARS tem como efeito alocar um espaço na memória de dados exatamente do tamanho de uma palavra do prossador MIPS, ou seja 4 bytes. b) (X) Pseudo-instruções aitas como válidas pelo montador do ambiente MARS podem gerar uma ou duas instruções do MIPS como resultado de sua tradução durante o prosso de montagem de um programa. c) (X) Uma implementação de hardware completa do prossador MIPS R2000, ao executar uma instrução, deve ser capaz de produzir um dado imediato de 32 bits a partir do código objeto da instrução usando um de pelo menos quatro prossos distintos. d) (X) O bloco de controle de uma implementação de hardware completa do prossador MIPS R2000 precisa analisar apenas os seis bits mais significativos (31 a 26) do código objeto para identificar univocamente de que instrução se trata. e) (X) O modo de endereçamento pseudo-absoluto no MIPS é usado exclusivamente em instruções de salto para subrotina. f) (X) O código objeto 0x1E20FFF9 corresponde a uma instrução de salto condicional que, quando saltar, o faz para uma instrução que está exatamente seis palavras da memória de programa acima do salto. g) (X) A definição do número de portas de entrada e saída do banco de registradores do MIPS é estabelecida pela arquitetura do conjunto de instruções deste. Como existem instruções que manipulam até três registradores, o banco de registradores de qualquer organização do MIPS precisa ter no mínimo três portas de asso para leitura e/ou escrita. h) (X) A instrução SLT $t0, $t1, $t2 é uma instrução de controle de fluxo de execução de instruções. i) (X) O modo de endereçamento base-deslocamento é a única maneira que instruções do prossador MIPS usam para especificar endereços de asso à memória de dados. j) (X) Somente existem instruções na arquitetura MIPS R2000 que escrevem em 0 ou 1 registrador do banco. Nenhuma instrução escreve em 2 ou mais registradores. 2. (2,0 pontos) Considere as linhas abaixo, que contêm parte do VHDL da MIPS multiciclo/ Elas possuem a definição do sinal ads que corresponde ao conjunto de fios que gera o endereço da porta superior de leitura do banco de registradores. Pede-se: a) Assuma que as instruções da MIPS multiciclo são codificadas em 6 bits com valores na faixa de 000000 a 100000, na ordem dada na Questão 3 abaixo. A partir deste pressuposto, defina os códigos associados às instruções SLL, SRA e SRL. b) Usando os códigos definidos no item a), desenhe um diagrama que use apenas portas lógicas e multiplexadores, refletindo um circuito correto que pode resultar da compilação deste código VHDL. M3: ads <= IR(20 downto 16) when =SSLL or =SSRA or =SSRL else IR(25 downto 21);
3. (2,0 pontos) Considere o bloco de dados da MIPS multiciclo abaixo (sem multiplicação nem divisão), que implementa parte de um prossador que dá suporte a uma versão parcial da arquitetura do conjunto de instruções do prossador MIPS. Suponha que o multiplexador M4 estragou, e que seu defeito é, independente do valor do sinal de controle, sempre deixar passar sua entrada superior (IR(15 downto 11)) para a saída. Diga qual/quais das instruções deste prossador ainda executa(m) corretamente com esta falha atuando, e justifique sua resposta. Lembre-se que as instruções da MIPS multiciclo são as seguintes: ADDU, SUBU, AND, OR, XOR, NOR, SLL, SLLV, SRA, SRAV, SRL, SRLV, ADDIU, ANDI, ORI, XORI, LUI, LBU, LW, SB, SW, SLT, SLTU, SLTI, SLTIU, BEQ, BGEZ, BLEZ, BNE, J, JAL, JALR e JR. dtpc M1 D rpc Q uins.wpc 4 + pc=i_address address data Memória de Instruções incpc RNPC instruction uins.cy1 RIR uins.cy1 ir=ir_out 25..0 npc RIN 25..21 RD 20..16 M3 AdRs op1 R1 M6 RA R1 D 20..16 AdRt RS A 15..11 REGS L 20..16 M4 AdRd op2 U 11111 R2 RB R2 RT M7 wreg M7 ads add 0-extend s-extend s-extend*4 0000 & IR[25:0] & 00 M2 result uins.wreg M5 cte_im RIM npc IMED RA RB outalu C o salta m p RALU uins.walu RALU=d_address address data Memória de Dados uins. uins.bw uins.rw RB RALU uins. uins.rw data M8 mdr_int x 000000 & data[7:0] 4. (3,0 pontos) Abaixo é dado um programa em linguagem de montagem do MIPS. Para este programa, responda às questões que seguem: a) (1,0 ponto) Diga quantos bytes ocupa este programa (área de instruções, área de dados e total) e calcule seu tempo de execução em nanossegundos, supondo que se trata da implementação MIPS multiciclo executando em uma frequência de 400MHz. b) (1,0 ponto) Estude o programa e diga o que ele faz. De nada adianta descrever o que cada instrução do programa executa individualmente, pois isto não será avaliado, defina a semântica deste. c) (1,0 ponto) Com os dados fornecidos, que valor(es) será(ão) escrito(s) em memória quando este código executar até o fim? Assumindo que a área de dados inicia no endereço 0x10010000, que endereços de memória serão escritos pelo programa? 1.text 2.globl main 3 main: la $t0,text 4 addu $t3,$zero,$zero 5 turn: lb $t1,0($t0) 6 beq $zero,$t1,did 7 jal tl 8 addiu $t0,$t0,1 9 j turn 10 did: la $t2,no 11 sw $t3,0($t2) 12 li $v0,10 13 syscall 14 tl: addiu $t4,$zero,'b' 15 bne $t1,$t4,c 16 addiu $t3,$t3,1 17 jr $ra 18 c: addiu $t4,$zero,'b' 19 bne $t1,$t4,e 20 addiu $t3,$t3,1 21 e: jr $ra 22.data 23 No:.word 0 24 Text:.asciiz "Minha Babá gosta de me babar!!" RMDR uins.wmdr MDR result M9
Gabarito 1. (3,0 pontos) Verdadeiro ou Falso. Abaixo aparem 10 afirmativas. Marque com V as afirmativas verdadeiras e com F as falsas. Se não souber a resposta correta, deixe em branco, pois cada resposta correta vale 0,3 pontos, mas cada resposta incorreta desconta 0,2 pontos do total positivo de pontos. Não é possível que a questão produza uma nota menor do que 0,0 pontos. a) (X) A diretiva de montagem.data aita pelo montador do ambiente MARS tem como efeito alocar um espaço na memória de dados exatamente do tamanho de uma palavra do prossador MIPS, ou seja 4 bytes. b) (X) Pseudo-instruções aitas como válidas pelo montador do ambiente MARS podem gerar uma ou duas instruções do MIPS como resultado de sua tradução durante o prosso de montagem de um programa. c) (X) Uma implementação de hardware completa do prossador MIPS R2000, ao executar uma instrução, deve ser capaz de produzir um dado imediato de 32 bits a partir do código objeto da instrução usando um de pelo menos quatro prossos distintos. d) (X) O bloco de controle de uma implementação de hardware completa do prossador MIPS R2000 precisa analisar apenas os seis bits mais significativos (31 a 26) do código objeto para identificar univocamente de que instrução se trata. e) (X) O modo de endereçamento pseudo-absoluto no MIPS é usado exclusivamente em instruções de salto para subrotina. f) (X) O código objeto 0x1E20FFF9 corresponde a uma instrução de salto condicional que, quando saltar, o faz para uma instrução que está exatamente seis palavras da memória de programa acima do salto. g) (X) A definição do número de portas de entrada e saída do banco de registradores do MIPS é estabelecida pela arquitetura do conjunto de instruções deste. Como existem instruções que manipulam até três registradores, o banco de registradores de qualquer organização do MIPS precisa ter no mínimo três portas de asso para leitura e/ou escrita. h) (X) A instrução SLT $t0, $t1, $t2 é uma instrução de controle de fluxo de execução de instruções. i) (X) O modo de endereçamento base-deslocamento é a única maneira que instruções do prossador MIPS usam para especificar endereços de asso à memória de dados. j) (X) Somente existem instruções na arquitetura MIPS R2000 que escrevem em 0 ou 1 registrador do banco. Nenhuma instrução escreve em 2 ou mais registradores. Solução da Questão 1 a) (F) A diretiva de montagem.data aita pelo montador do ambiente MARS tem como efeito alocar um espaço na memória de dados exatamente do tamanho de uma palavra do prossador MIPS, ou seja 4 bytes. Justificativa: FALSO, a diretiva.data apenas define que as linhas após ela correspondem a definições de conteúdos da memória de dados; ela não resaerva espaço nesta memória. b) (V) Pseudo-instruções aitas como válidas pelo montador do ambiente MARS podem gerar uma ou duas instruções do MIPS como resultado de sua tradução durante o prosso de montagem de um programa. Justificativa: VERDADEIRO, pois foram vistos exemplos em aula destes dois casos, usando as pseudo-instruções li e la. A primeira, quando rebe um operando
imediato representável em até 16 bits produz apenas uma instrução ao ser traduzida para código objeto, enquanto la sempre produz duas instruções (lui+ori). c) (V) Uma implementação de hardware completa do prossador MIPS R2000, ao executar uma instrução, deve ser capaz de produzir um dado imediato de 32 bits a partir do código objeto da instrução usando um de pelo menos quatro prossos distintos. Justificativa: VERDADEIRO, pois como vimos por exemplo na descrição da organização da MIPS multiciclo, há quatro blocos distintos que podem gerar a entrada do registrador IMED. Os quatro prossos de geração de dado imediato vistos em aula foram: extensão de 0, extensão de sinal, extensão de sinal multiplicada por 4 (usado nas instruções de salto condicional) e geração de endereço a partir de pseudo-endereços de 26 bits (usado nas instruções J e JAL, por exemplo). d) (F) O bloco de controle de uma implementação de hardware completa do prossador MIPS R2000 precisa analisar apenas os seis bits mais significativos (31 a 26) do código objeto para identificar univocamente de que instrução se trata. Justificativa: FALSO, pois em alguns casos, como para as instruções tipo R, estes 6 bits tem o mesmo valor para diversas instruções (no caso 000000). Neste caso, este valor igual para diversas instruções implica que a análise deve ser estendida para mais bits, de forma a identificar a instrução de forma unívoca. No caso do exemplo dado aqui (instruções tipo R) analisa-se os bits 5 a 0 do código objeto. e) (F) O modo de endereçamento pseudo-absoluto no MIPS é usado exclusivamente em instruções de salto para subrotina. Justificativa: FALSO. Embora este modo seja usado na instrução JAL que é de salto para subrotina, existe pelo menos mais uma instrução onde ele é usado que não é de salto para subrotina, a instrução J. f) (V) O código objeto 0x1E20FFF9 corresponde a uma instrução de salto condicional que, quando saltar, o faz para uma instrução que está exatamente seis palavras da memória de programa acima do salto. Justificativa: VERDADEIRO. Os 6 primeiros bits do código objeto são, em binário, 000111, ou seja 7 em decimal/hexadecimal. Isto corresponde de fato ao código de uma instrução BGTZ (um tipo de salto condicional). Observando os 16 bits inferiores (0xFFF9), nota-se que se trata de um numeral que em complemento de 2 expressa o binário 1111111111111001 o número -7. Como este valor é somado ao valor do PC apontando para a palavra seguinte à instrução BGTZ, ao multiplicar -7 por 4 e somar ao PC, obtém-se o endereço da posição localizada exatamente 6 palavras acima da BGTZ. g) (F) A definição do número de portas de entrada e saída do banco de registradores do MIPS é estabelecida pela arquitetura do conjunto de instruções deste. Como existem instruções que manipulam até três registradores, o banco de registradores de qualquer organização do MIPS precisa ter no mínimo três portas de asso para leitura e/ou escrita.
Justificativa: FALSO. Como visto desde o início do semestre, o nível de abstração da arquitetura é mais alto que o da organização. Claro que se pode ter um banco de registradores com mais do que três portas de asso, mas isto seria inútil, dado que não existem instruções que manipulam mais do que 3 registradores. por outro lado, é possível usar menos que três portas, mas isto implica a serialização do asso ao hardware, tornando o hardware menos rápido. Ainda assim, isto pode ser interessante, pois reduz a quantidade de hardware para implementar o banco de registradores e a potência dissipada por este. h) (F) A instrução SLT $t0, $t1, $t2 é uma instrução de controle de fluxo de execução de instruções. Justificativa: FALSO. Trata-se de uma instrução que testa sem o valor em $t1 é menor que o valor em $t2, anotando o resultado do teste em $t0. Claro que isto pode depois ser usado com instruções de salto condicional para realizar controle de fluxo, mas SLT em si não se caracteriza como tal tipo de instrução. i) (V) O modo de endereçamento base-deslocamento é a única maneira que instruções do prossador MIPS usam para especificar endereços de asso à memória de dados. Justificativa: VERDADEIRO. Como a arquitetura do MIPS define que instruções não podem ocupar mais do que 32 bits e que endereços de memória ocupam 32 bits, é impossível armazenar um endereço inteiro em uma instrução. Além do mais a arquitetura do MIPS é do tipo LOAD-STORE. Embora haja outros modos de endereçamento para fazer asso à memória de instruções, somente o basedeslocamento está disponível para asso à memória de dados. j) (V) Somente existem instruções na arquitetura MIPS R2000 que escrevem em 0 ou 1 registrador do banco. Nenhuma instrução escreve em 2 ou mais registradores. Justificativa: VERDADEIRO. Embora existam no MIPS instruções que escrevem informação útil em mais de um registrador (como a instrução JAL), isto nunca é feito para dois registradores do banco. Fim da Solução da Questão 1 2. (2,0 pontos) Considere as linhas abaixo, que contêm parte do VHDL da MIPS multiciclo/ Elas possuem a definição do sinal ads que corresponde ao conjunto de fios que gera o endereço da porta superior de leitura do banco de registradores. Pede-se: a) Assuma que as instruções da MIPS multiciclo são codificadas em 6 bits com valores na faixa de 000000 a 100000, na ordem dada na Questão 3 abaixo. A partir deste pressuposto, defina os códigos associados às instruções SLL, SRA e SRL. b) Usando os códigos definidos no item a), desenhe um diagrama que use apenas portas lógicas e multiplexadores, refletindo um circuito correto que pode resultar da compilação deste código VHDL. M3: ads <= IR(20 downto 16) when =SSLL or =SSRA or =SSRL else IR(25 downto 21); Solução da Questão 2 Solução: a) Dado o pressuposto da questão, SLL, SRA e SRL são respectivamente a sétima, nona e décima primeira, na ordem dada. Como a codificação inicia-se em 000000
(para a primeira instrução), tem-se os seguintes códigos: SLL=000110, SRA=001000 e SRL=001010. b) Ver desenho abaixo: IR (25 downto 21) IR (20 downto 16) M3 ads SLL SRA SRL (5) (4) (3) (2) (1) Fim da Solução da Questão 2 (0) 3. (2,0 pontos) Considere o bloco de dados da MIPS multiciclo abaixo (sem multiplicação nem divisão), que implementa parte de um prossador que dá suporte a uma versão parcial da arquitetura do conjunto de instruções do prossador MIPS. Suponha que o multiplexador M4 estragou, e que seu defeito é, independente do valor do sinal de controle, sempre deixar passar sua entrada superior (IR(15 downto 11)) para a saída. Diga qual/quais das instruções deste prossador ainda executa(m) corretamente com esta falha atuando, e justifique sua resposta. Lembre-se que as instruções da MIPS multiciclo são as seguintes: ADDU, SUBU, AND, OR, XOR, NOR, SLL, SLLV, SRA, SRAV, SRL, SRLV, ADDIU, ANDI, ORI, XORI, LUI, LBU, LW, SB, SW, SLT, SLTU, SLTI, SLTIU, BEQ, BGEZ, BLEZ, BNE, J, JAL, JALR e JR. dtpc M1 D rpc Q uins.wpc 4 + pc=i_address address data Memória de Instruções instruction Solução da Questão 3 incpc RNPC uins.cy1 RIR uins.cy1 ir=ir_out 25..0 npc RIN 25..21 RD 20..16 M3 AdRs op1 R1 M6 RA R1 D 20..16 AdRt RS A 15..11 REGS L 20..16 M4 AdRd op2 U 11111 R2 RB R2 RT M7 wreg M7 ads add 0-extend s-extend s-extend*4 0000 & IR[25:0] & 00 M2 result uins.wreg M5 cte_im RIM npc IMED RA RB outalu C o salta m p RALU uins.walu RALU=d_address address data Memória de Dados uins. uins.bw uins.rw RB RALU uins. uins.rw data M8 mdr_int x 000000 & data[7:0] RMDR uins.wmdr MDR result M9
Solução: O conjunto de bits IR(15 downto 11) é usado basicamente nas instruções tipo R. Assim estas continuam funcionando normalmente e são: ADDU, SUBU, AND, OR, XOR, NOR, SLL, SLLV, SRA, SRAV, SRL, SRLV, SLT e SLTU. Além destas, como o mux M4 controla o endereço de escrita no banco, todas as instruções que não escrevem no banco continuam também funcionando normalmente e são: SB, SW, BEQ, BGEZ, BLEZ, BNE, J e JR. As demais instruções param de funcionar corretamente, pois ADDIU, ANDI, ORI, XORI, LUI, LBU, LW, SLTI, SLTIU, JAL e JALR escrevem no banco, mas usam um endereço de escrita que não vem de IR(15 downto 11). Fim da Solução da Questão 3 4. (3,0 pontos) Abaixo é dado um programa em linguagem de montagem do MIPS. Para este programa, responda às questões que seguem: a) (1,0 ponto) Diga quantos bytes ocupa este programa (área de instruções, área de dados e total) e calcule seu tempo de execução em nanossegundos, supondo que se trata da implementação MIPS multiciclo executando em uma frequência de 400MHz. b) (1,0 ponto) Estude o programa e diga o que ele faz. De nada adianta descrever o que cada instrução do programa executa individualmente, pois isto não será avaliado, defina a semântica deste. c) (1,0 ponto) Com os dados fornecidos, que valor(es) será(ão) escrito(s) em memória quando este código executar até o fim? Assumindo que a área de dados inicia no endereço 0x10010000, que endereços de memória serão escritos pelo programa? 1.text 2.globl main # bytes 3 main: la $t0,text # 8 Endereço de Text em $t0 4 addu $t3,$zero,$zero # 4 Zera contador de b s ou B s 5 turn: lb $t1,0($t0) # 4 Lê caracter de Text 6 beq $zero,$t1,did # 4 Se é o último, acabou, vai para did 7 jal tl # 4 Senão, chamada rotina ver se b ou B 8 addiu $t0,$t0,1 # 4 Depois, incrementa ponteiro de Text 9 j turn # 4 e volta a testar 10 did: la $t2,no # 8 No final, escreve contador de b/b s 11 sw $t3,0($t2) # 4 na memória, em No 12 li $v0,10 # 4 Agora cai fora do programa 13 syscall # 4 # Subrotina que vê se caracter= b ou B 14 tl: addiu $t4,$zero,'b' # 4 Gera código de b em $t4 15 bne $t1,$t4,c # 4 Se não é b, vai testar se é B 16 addiu $t3,$t3,1 # 4 Senão, incrementa contador 17 jr $ra # 4 e volta 18 c: addiu $t4,$zero,'b' # 4 Gera código de B em $t4 19 bne $t1,$t4,e # 4 Se não é B, volta sem incrementar 20 addiu $t3,$t3,1 # 4 Senão, incrementa contador 21 e: jr $ra # 4 e volta 22.data # 23 No:.word 0 # 4 Lugar onde guardar valor de contagem 24 Text:.asciiz "Minha Babá gosta de me babar!!" # 31 Text a analisar # Programa=84 bytes, Dados=35 bytes. # Total=119 bytes Solução da Questão 4 Solução: a) Como detalhado individualmente nos comentários acima, a área de programa ou instruções ocupa 84 bytes, a área de dados ocupa 35 bytes, gerando um total de 119 bytes de memória ocupados pelo programa. Com relação ao tempo de execução, primeiro computa-se o número de ciclos para executar este com a área de dados dada. Com esta área, as linhas 3 a 4 e 10 a 13 executam exatamente um vez, perfazendo um total de 8(la=lui+ori) + 4(addu) + 8(la) + 4(sw) + 4(li=addiu) + 4(syscall)=32 ciclos. O restante do código do programa é um laço executado tantas vezes quanto seja o tamanho da cadeia Text em bytes (31). A particularidade é que a última vez que o laço é executado ele sai do laço na segunda linha. Logo, sem considerar o tempo de execução da subrotina tl, o laço
gasta 30*(5(lb)+4(beq+4(jal)+4(addiu)+4(j))+(5(lb)+4(beq))ciclos= 30*21+9=639 ciclos. A subrotina tl, por sua vez, cada vez que for chamada pode executar de três formas distintas, cada uma com tempo de execução diferente: caso letra seja b - gasta 4(addiu)+4(bne não salta)+4(addiu)+4(jr retorna)=16 ciclos; caso letra não seja b nem B - gasta 4(addiu)+4(bne salta)+4(addiu)+4(bne salta)+4(jr retorna)=20 ciclos; caso letra seja B - gasta 4(addiu)+4(bne salta)+4(addiu)+4(bne não salta)+4(addiu)+4(jr retorna)=24 ciclos. Como a rotina é chamada exatamente 30 vezes, e deve prossar 3 bs e 1 B na cadeia fornecida, o total de ciclos gasto executando tl é 3*(16)+1*24(B)+(30-4)*20=592ciclos. Agora basta somar os montantes assim obtidos para obter o total de ciclos que o programa leva para executar, o que dá 32+639+592=1263 ciclos de relógio. Como a frequência de operação dada é 400MHz, o período de relógio é 1/(400*10 6 ) ou 2,5 nanossegundos. Logo o tempo de execução total do programa é 1263*2,5= 3157,5 nanossegundos. b) Este programa computa o número de letras `b (maiúsculas ou minúsculas) que ocorre em um texto contido na cadeia Text, e armazena este valor na posição de memória No. c) Só existe uma instrução SW no programa e ela é executada apenas uma vez (na linha 11) Esta instrução escreve uma palavra (SW) nas quatro primeiras posições da memória de dados, ou seja nos endereços 0x10010000 a 0x10010003. O dado escrito é o número de letras b (maiúsculas ou minúsculas) existente na cadeia Text, o que no caso resulta no valor 4. este é o único valor escrito na memória pelo programa. Fim da Solução da Questão 4