instruction uins.i add AdWP instruction Memória de ext_sinal ext_0

Documentos relacionados
Disciplina: Organização de Computadores Professor: Ney Laert Vilar Calazans

1. uins.ce <= '1' when i=sw or i=lw else '0'; 2. uins.rw <= '0' when i=sw else '1'; 3. uins.wreg <= '0' when i=sw else '1';

datapath adrt adrd uins.i ext_sinal ext_0

Disciplina: Organização de Computadores Professor: Ney Laert Vilar Calazans

Disciplina: Organização de Computadores Professor: Ney Laert Vilar Calazans

Prova G2 Disciplina: Organização de Computadores-EC Professor: Ney Laert Vilar Calazans .data 0x1E20FFF9 seis palavras da memória de programa

Disciplina: Organização de Computadores Professor: Ney Laert Vilar Calazans

1: 2: 2, [1] [2] 0x x001f8021 $16,$0,$31 13 [3] 0x x

Disciplina: Organização de Computadores-EC Professor: Ney Laert Vilar Calazans

Disciplina: Organização de Computadores-EC Professor: Ney Laert Vilar Calazans

Número de Linha. Código objeto

Disciplina: Organização de Computadores-EC Professor: Ney Laert Vilar Calazans

Disciplina: Organização e Arquitetura de Computadores II Professores: Fabiano Hessel e Ney Calazans 22/abril/2009

Dicas: Nas linhas 7 e 8 as constantes imediatas são especificadas como caracteres ASCIIE, o que é aceito pelo montador MARS.

Disciplina: Organização de Computadores Professor: Ney Laert Vilar Calazans. Lista de associação de números e mnemônicos para os registradores do MIPS

[1] $2,$0,$3 105 [2] 0x004000e8

Disciplina: Organização e Arquitetura de Computadores II Professores: Fabiano Hessel e Ney Calazans 07/outubro/2009

66 [2] 0x x c

Implementação de um Subconjunto Multi-Ciclo do Processador MIPS

1: 2: 2, [1] [2] 0x x3c011001

Disciplina: Organização de Computadores Professor: Ney Laert Vilar Calazans

Disciplina: Organização de Computadores Professor: Ney Laert Vilar Calazans

MIPS_Monociclo. instruction instr add AdWP. wreg instruction. Memória de

ALU. Ciclo de Relógio. de Dados. Memória. Instruções. Memória de. Máquina de Estados DIV. Decodificação M11 NPC MDR RESULT. npc=npc_out=npc.

Operações de Controle de Fluxo e Acesso a Memória. Na Aula Anterior... Nesta Aula. Instruções de Controle de Fluxo. if then - else.

1. A pastilha do processador Intel possui uma memória cache única para dados e instruções. Esse processador tem capacidade de 8 Kbytes e é

Guia Rápido MIPS. Tipos de Dados e Formatações

ção de Computadores II

SSC510 Arquitetura de Computadores 1ª AULA

Arquitectura de Computadores ARQC MIPS. Serviços de Sistemas Exemplos. Serviços de Sistema

Infraestrutura de Hardware. Implementação Multiciclo de um Processador Simples

Infraestrutura de Hardware. Implementação Monociclo de um Processador Simples

Sistemas Processadores e Periféricos Aula 2 - Revisão

SSC0114 Arquitetura de Computadores

Questionário Arquitetura e Organização de Computadores

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I

AULA 05: LINGUAGEM DE MONTAGEM: SUPORTE A PROCEDIMENTOS

Prova P4/PS Disciplina: Organização de Computadores-EC Professor: Ney Laert Vilar Calazans lui+ori syscall 1. .text 2. main: $s0, string 3.

Organização de Computadores μarquitetura. Na Aula Anterior... Introdução. Nesta Aula. MIPS-Monociclo. Formas de Organização 17/10/2016

LABORG. Parte 4 Programação em Linguagem de Montagem do MIPS. Fernando Gehm Moraes Matheus Trevisan Moreira

a) Calcule o valor médio de CPI apresentado na execução deste programa P, utilizando-se C1 sem e com otimização. Resposta:

PARTE II - CONJUNTO DE INSTRUÇÕES ARQUITETURA DE COMPUTADORES ANTONIO RAMOS DE CARVALHO JÚNIOR

Escreva um programa em código assembly correspondente ao seguinte programa C.

Implementação Multi-Ciclo

Sistemas de Computação Gabarito - Lista 2

Registradores na Arquitetura MIPS. 29/4/2016 MIPS - Instruction Set Architecture

MIPS Implementação. sw) or, slt. Vamos examinar uma implementação que inclui um subconjunto de instruções do MIPS

UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO

Faculdade de Computação

Disciplina: Organização de Computadores Professor: Ney Laert Vilar Calazans

Organização de Computadores

Arquitetura de Computadores

Sistemas de Computação. Instruções de Linguagem de Máquina

Microprocessadores I ELE Aula 7 Conjunto de Instruções do Microprocessador 8085 Desvios

Exercícios de Fixação

Lista de Revisão para a Primeira Avaliação

SSC0611 Arquitetura de Computadores

UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO

Arquiteturas de Computadores

X Y Z A B C D

Organização e Arquitetura de Computadores I

Infraestrutura de Hardware. Instruindo um Computador Subrotinas, Tipos de Dados e Modos de Endereçamento

ARQUITECTURA DE COMPUTADORES

Sumário. Aula Anterior. Exercício 7.1 Contagem de bits a 1 numa palavra Exercício 7.2 Deslocamento de n bits num operando de 64 bits.

a) Calcule o valor médio de CPI apresentado na execução deste programa P, utilizando-se C1 sem e com otimização.

ARQUITECTURA DE COMPUTADORES CAPÍTULO II AULA VII

Especificação do Projeto de Processador RISC

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4

O Processador: Via de Dados e Controle

Tiago Alves de Oliviera

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2

CPU Implementação. Multiciclo. Prof. Carlos Bazilio

TCC Organização de Computadores I Turma :A1 Lista 3-GABARITO. 1. A figura abaixo mostra o diagrama da implementação para a UCP estudada em sala.

Organização e Arquitetura de Computadores I

Operações Aritméticas e Lógicas e Avaliação de Condições

Exercícios Referentes à Prova P2

Computador Cleópatra

Expoente Mantissa Frac. UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO

Python 3.x Estrutura de Repetição while

Estruturas de Repetição

Aula 7: Portas Lógicas: AND, OR, NOT, XOR, NAND e NOR

Organização de Unidades de Processamento

Arquitetura de Computadores I

Conjunto de Instruções. Prof. Leonardo Barreto Campos 1

Pipeline. Prof. Leonardo Barreto Campos 1

Computador Cleópatra

Unidade Central de Processamento UCP (CPU)

Arquitetura de Computadores I. Prof. Ricardo Santos (Cap 2)

UCP: Construindo um Caminho de Dados (Parte I)

lw, sw add, sub, and, or, slt beq, j

Arquitetura e Organização de Processadores. Aula 4. Pipelines

Implementação da UCP. Construção do caminho de dados Controle Implementação monociclo. Organização de Computadores

Figura 1. Datapath do MIPS Superescalar Especulativo CES SE

Microprocessadores I. Aula 6 Arquitetura do Microprocessador Pinagem e Diagrama de Temporização

CAPÍTULO 4 CAMINHO DE DADOS E CONTROLE

Organização e Arquitetura de Computadores I

Microcontroladores e Interfaces

Aula 16: UCP: Conceitos Básicos e Componentes

Transcrição:

Prova P2 Disciplina: Organização Computadores Professor: Ney Laert Vilar Calazans Aluno: 18/novembro/2016 Para realizar a prova, refira-se à proposta organização MIPS monociclo vista em aula. O diagrama blocos ste prossador apare abaixo, e talha o Bloco Dados (path) e o Bloco Controle (control_unit). Assuma que as instruções às quais esta organização monociclo dá suporte execução são apenas as seguintes (exto se a questão particular especificar outra forma): ADDU, SUBU, AND, OR, XOR, NOR, LW, SW e ORI. MIPS_V0 control_unit incpc D +4 PC rst clo reset pc=i_address i_address Q Decodificação Instruções Geração Sinais Controle address Instruções i uins wreg uins. uins. 25..21 add AdWP AdRP1 AdRP2 15..11 DataWP DataRP1 Banco Registradores rst 15..0 clo reset ext32 ext_sinal ext_0 DataRP2 reg_st R1 op2 U L A zero uins. uins. result=d_address d_address Dados path uins. uins. 1. [3,0 pontos] Consire o prossador MIPS monociclo apresentado acima. Observe os trechos VHDL abaixo, copiados da scrição ste prossador: I. uins. <= '1' when i=sw or i=lw else '0'; II. uins. <= '0' when i=sw else '1'; III. <= '0' when i=sw else '1'; a) Suponha que existe uma falha no hardware que produz a linha II. acima. A falha é que o sinal uins. está eternamente grudado em 0. A pergunta aqui é se esta falha modificará o comportamento uma ou mais instruções. Se sim, diga qual(is) instrução(ões) é(são) afetada(s), justificando sua resposta. Se não, justifique porque a falha não afeta a operação do hardware. b) Observe na documentação do MIPS a funcionalida da instrução SLTIU e diga como o hardware acima veria ser alterado para ser capaz executar esta instrução. Especifique os módulos do código VHDL que precisariam ser alterados e diga como estes vem ser alterados. Diga também se algum módulo hardware adicional é nessário e porquê. Se achar nessário, ilustre as alterações com senhos esclaredores. 2. [3,0 pontos] Observe a linha código VHDL abaixo, parte da scrição do prossador monociclo MIPS_V0. reg_st <= when =LW else result; a) (1,5 pontos) Desenhe um hardware correto que seria gerado por uma ferramenta síntese ao prossar esta linha, assumindo o seguinte: é um sinal que codifica com o mínimo número bits possível os símbolos associados ao nome cada instrução do prossador e o símbolo invalid_. A codificação parte do menor valor possível, e segue em orm cresnte para os símbolos ornados conforme apare na claração do tipo inst_type (ou seja, ADDU, SUBU, AAND, OOR, XXOR, NNOR, LW, SW, ORI, invalid_). b) (1,5 pontos) Quer-se modificar o prossador MIPS_V0 para lhe dar capacida executar as instruções LBU e LHU do MIPS. Estu a funcionalida stas duas instruções no Apêndi A, e diga como a scrição VHDL do hardware associado ao sinal reg_st teria ser modificada. O objetivo, claro, é que no sinal reg_st a execução stas instruções gere o dado correto a ser armazenado no banco registradores. Dica 1: A interfa com a memória dados não ve ser alterada, ou seja, uma leitura da memória sempre traz para ntro do prossador o valor 32 bits armazenado a partir do enreço gerado na saída da ULA.

Dica 2: O formato do resultado é o seguinte: reg_st <= when =LW else X when =LHU else - diga que código VHDL é X Y when =LBU else - diga que código VHDL é Y result; 3. [4,0 pontos] Dada uma frequência operação 600 MHz para o prossador MIPS monociclo, assuma que a organização original foi alterada para dar suporte a todas as instruções do programa abaixo, mantendo a característica monociclo. Com estes pressupostos, calcule e diga: a) (1,5 pontos) O número ciclos relógio que leva p/ executar o programa, com a área dados fornecida; b) (1 ponto) O tempo execução do programa em segundos (1ns=10-9 segundos); c) (1 ponto) O que faz este programa, do ponto vista semântico. Diga o que ele gera como saída; d) (0,5 pontos) Se este programa possui subrotina(s). Se sim, diga on esta(s) se encontra(m), finindo o intervalo linhas que ela(s) ocupa(m). Dica: A chamada do sistema número 11, usada neste programa, executa a impressão exatamente um caractere ASCII na tela, aquele caractere cujo código está contido nos 8 bits menos significativos do registrador $a0 no momento da execução do syscall. 1.. 2. n:.word 0xab83ef 3. 4..text 5. main: li $a0,'0' 6. li $v0,11 7. syscall 8. li $a0,'x' 9. li $v0,11 10. syscall 11. li $t0,8 12. la $t1,n 13. lw $a1,0($t1) 14. c: jal imsh 15. sll $a1,$a1,4 16. addiu $t0,$t0,-1 17. beq $t0,$zero,ed 18. j c 19. ed: li $v0,10 20. syscall 21. imsh: srl $t2,$a1,28 22. addiu $t3,$t2,-10 23. bltz $t3,no 24. ori $t2,$t2,0x40 25. addiu $t2,$t2,-9 26. j pr 27. no: ori $t2,$t2,0x30 28. pr: move $a0,$t2 29. li $v0,11 30. syscall 31. jr $ra

Gabarito Para realizar a prova, refira-se à proposta organização MIPS monociclo vista em aula. O senho da versão monociclo apare abaixo, com talhamento do Bloco Dados. Assuma que as instruções às quais esta organização monociclo dá suporte execução são apenas as seguintes (exto quando a questão particular especificar outra forma): ADDU, SUBU, AND, OR, XOR, NOR, LW, SW e ORI. MIPS_V0 control_unit incpc D +4 PC rst clo reset pc=i_address i_address Q Decodificação Instruções Geração Sinais Controle address Instruções i uins wreg uins. uins. 25..21 add AdWP AdRP1 AdRP2 15..11 DataWP DataRP1 Banco Registradores rst 15..0 clo reset ext32 ext_sinal ext_0 DataRP2 reg_st R1 op2 U L A zero uins. uins. result=d_address d_address Dados path uins. uins. 1. [3,0 pontos] Consire o prossador MIPS monociclo apresentado acima. Observe os trechos VHDL abaixo, copiados da scrição ste prossador: I. uins. <= '1' when i=sw or i=lw else '0'; II. uins. <= '0' when i=sw else '1'; III. <= '0' when i=sw else '1'; a) Suponha que existe uma falha no hardware que produz a linha II. acima. A falha é que o sinal uins. está eternamente grudado em 0. A pergunta aqui é se esta falha modificará o comportamento uma ou mais instruções. Se sim, diga qual(is) instrução(ões) é(são) afetada(s), justificando sua resposta. Se não, justifique porque a falha não afeta a operação do hardware. b) Observe na documentação do MIPS a funcionalida da instrução SLTIU e diga como o hardware acima veria ser alterado para ser capaz executar esta instrução. Especifique os módulos do código VHDL que precisariam ser alterados e diga como estes vem ser alterados. Diga também se algum módulo hardware adicional é nessário e porquê. Se achar nessário, ilustre as alterações com senhos esclaredores. Solução: a) A análise sta falha leva à conclusão que a instrução SW continuará funcionando sem alteração, pois a falha fixa uins. no valor que faz com que SW execute. Quanto às instruções que não operam com a memória (todas as mais, exto LW) estas vem continuar operando normalmente, pois para elas uins. será igual a 0, fazendo com que o valor uins. seja irrelevante. Já a instrução LW irá sofrer alteração na sua operação. Ela ativa o sinal (uins.=1), mas uins. grudado em 0 forca uma escrita na memória. Ou seja, a ULA calcula o enreço leitura corretamente, mas neste enreço será feita uma escrita e não uma leitura. O valor escrito (erradamente) na posição rta memória é o que há no sinal, que será o conteúdo do registador que veria ser sobre-escrito com o dado vindo da memória (que apare no sinal ). Ao mesmo tempo este registrador vai ser escrito com seu próprio valor, que chegará no sinal reg_st via o mux mais à direita no senho. Em resumo, a falha afeta apenas a operação da instrução LW. b) A instrução SLTIU possui a seguinte sintaxe em linguagem montagem: SLTIU $Rt, $Rs, imm. Sua semântica consiste em escrever a constante 0 ou a constante 1 (representada em 32 bits) no registrador $Rt, penndo do resultado do teste $Rs < ext_sinal(imm)? Este teste consira o conteúdo $Rs e ext_sinal(imm) como números sem sinal. Se $Rs for menor que ext_sinal(imm), $Rt rebe 1, senão rebe 0. Existem várias formas realizar esta funcionalida, dá-se a seguir um dos mais simples conjuntos alterações na MIPS_V0 que faz com que o prossador possa executar a instrução SLTIU. A idéia é que trata-se uma instrução tipo I. Assim, cria-se uma nova operação na

ULA (SLTIU) que gera na saída sta ULA ou a constante 0 ou a constante 1, pois testar se a entrada superior da ULA é menor que a entrada inferior. As alterações são: Alterações no Paage acresntar o valor SLTIU ao conjunto valores que o tipo inst_type po assumir, ou seja: type inst_type is (ADDU, SUBU, AAND, OOR, XXOR, NNOR, LW, SW, ORI, SLTIU, invalid_); Alterações no Bloco Controle acresntar o hardware codificação da SLTU, ou seja: i <= ADDU when (31 downto 26)="000000" and (10 downto 0)="00000100001" else SUBU when (31 downto 26)="000000" and (10 downto 0)="00000100011" else AAND when (31 downto 26)="000000" and (10 downto 0)="00000100100" else OOR when (31 downto 26)="000000" and (10 downto 0)="00000100101" else XXOR when (31 downto 26)="000000" and (10 downto 0)="00000100110" else NNOR when (31 downto 26)="000000" and (10 downto 0)="00000100111" else SLTIU when (31 downto 26)="001011" else ORI when (31 downto 26)="001101" else LW when (31 downto 26)="100011" else SW when (31 downto 26)="101011" else invalid_ ; -- IMPORTANTE: condicao "fault" eh invalid ; Alterações no Bloco Dados Os multiplexadores que geram o sinal add, op2 e reg_st e o controle tristate do sinal não precisam ser alterados, pois SLTIU usa seus valores fault e não faz asso à memória dados. No entanto, a extensão sinal não é o valor fault saída do mux que correspon ao sinal ext32. Assim, é nessário alterar seu código, que fica: ext32 <= x"ffff" & (15 downto 0) when ((15)='1' and (=LW or =SW or =SLTIU)) else x"0000" & (15 downto 0); Alterações na ULA - finir instrução SLTIU com a funcionalida nessária, por exemplo (note que isto funcionará se e somente se na entida da ULA houver a inclusão do pacote IEEE.std_logic_unsigned.all, o que já é o caso na ULA da MIPS_V0): int_alu <= op1 - op2 when op_alu=subu else op1 and op2 when op_alu=aand else op1 or op2 when op_alu=oor or op_alu=ori else op1 xor op2 when op_alu=xxor else op1 nor op2 when op_alu=nnor else x 00000001 when op_alu=sltiu and op1 < op2 else x 00000000 when op_alu=sltiu else op1 + op2; --- fault eh a soma 2. [3,0 pontos] Observe a linha código VHDL abaixo, parte da scrição do prossador monociclo MIPS_V0. reg_st <= when =LW else result; a) (1,5 pontos) Desenhe um hardware correto que seria gerado por uma ferramenta síntese ao prossar esta linha, assumindo o seguinte: é um sinal que codifica com o mínimo número bits possível os símbolos associados ao nome cada instrução do prossador e o símbolo invalid_. A codificação parte do menor valor possível, e segue em orm cresnte para os símbolos ornados conforme apare na claração do tipo inst_type (ou seja, ADDU, SUBU, AAND, OOR, XXOR, NNOR, LW, SW, ORI, invalid_). b) (1,5 pontos) Quer-se modificar o prossador MIPS_V0 para lhe dar capacida executar as instruções LBU e LHU do MIPS. Estu a funcionalida stas duas instruções no Apêndi A, e diga como a scrição VHDL do hardware associado ao sinal reg_st teria ser modificada. O objetivo, claro, é que no sinal reg_st a execução stas instruções gere o dado correto a ser armazenado no banco registradores. Dica 1: A interfa com a memória dados não ve ser alterada, ou seja, uma leitura da memória sempre traz para ntro do prossador o valor 32 bits armazenado a partir do enreço gerado na saída da ULA. Dica 2: O formato do resultado é o seguinte: Solução: reg_st <= when =LW else X when =LHU else - diga que código VHDL é X Y when =LBU else - diga que código VHDL é Y result; a) Como se têm 10 valores possíveis para o tipo inst_type, do qual é uma instância, é nessário usar um mínimo 4 bits para codificar estes. Com isto, a codificação em orm cresnte códigos para os valores só po ser a dada abaixo:

ADDU-0000, SUBU-0001, AAND-0010, OOR-0011, XXOR-0100, NNOR-0101, LW-0110, SW-0111, ORI-1000, invalid_-1001 A solução para o hardware é que reg_st será a saída um multiplexador (mux) 2:1 com duas entradas 32 bits e saída 32 bits. Assumindo que a condição verdaira correspon à entrada 1 do mux e que a condição falsa correspon a entrada 0 do mux, o controle resume-se a apenas um tector LW implementável com uma porta AND 4 entradas, conforme ilustra a Figura abaixo: result Multiplexador 2x32bits:1x32 bits 1 0 S1 S2 C D ENB reg_st 1 =LW (3) (2) (1) (0) b) As instruções LBU e LHU funcionam forma similar à instrução LW. Ambas calculam o enreço leitura exatamente da mesma forma que LW (via a soma do enreço base em Rs e do slocamento com sinal estendido) e escrevem um valor 32 bits no registrador stino (Rt). Contudo, ao invés ler dados 32 bits da memória, leem respectivamente 8 e 16 bits apenas. Como o valor escrito ve ser 32 bits, estas instruções preveem que se complete os 32 bits com zeros suficientes à esquerda do valor vindo da memória. Como o pressuposto do hardware estabelecido na questão é que sempre se leem 32 bits da memória, os bits adicionais lidos vem ser scartados. Dada esta discussão, os valores X e Y são dados abaixo: reg_st <= when =LW else x 0000 & (15 downto 0) when =LHU else - X = 16 zeros x 000000 & (7 downto 0) when =LBU else - Y = 24 zeros result; 3. [4,0 pontos] Dada uma frequência operação 600 MHz para o prossador MIPS monociclo, assuma que a organização original foi alterada para dar suporte a todas as instruções do programa abaixo, mantendo a característica monociclo. Com estes pressupostos, calcule e diga: a) (1,5 pontos) O número ciclos relógio que leva p/ executar o programa, com a área dados fornecida; b) (1 ponto) O tempo execução do programa em segundos (1ns=10-9 segundos); c) (1 ponto) O que faz este programa, do ponto vista semântico. Diga o que ele gera como saída; d) (0,5 pontos) Se este programa possui subrotina(s). Se sim, diga on esta(s) se encontra(m), finindo o intervalo linhas que ela(s) ocupa(m). Dica: A chamada do sistema número 11, usada neste programa, executa a impressão exatamente um caractere ASCII na tela, aquele caractere cujo código está contido nos 8 bits menos significativos do registrador $a0 no momento da execução do syscall. 1..

2. n:.word 0xab83ef 3. 4..text 5. main: li $a0,'0' # (1) $a0 contém o caracter ASCIIE 0 6. li $v0,11 # (1) prepara chamada print char 7. syscall # (1) chama print char 8. li $a0,'x' # (1) $a0 contém o caracter ASCIIE x 9. li $v0,11 # (1) prepara chamada print char 10. syscall # (1) chama print char 11. li $t0,8 # (1) $t0 rebe contador nibbles 12. la $t1,n # (2) 13. lw $a1,0($t1) # (1) lê n para $a1, parâmetro a passar 14. c: jal imsh # (1) chama sub-r que imprime valor hexa mais significativo 15. sll $a1,$a1,4 # (1) gera novo nibble mais significativo 16. addiu $t0,$t0,-1 # (1) crementa contador nibbles 17. beq $t0,$zero,ed # (1) sai do laço se chegou ao fim 18. j c # (1) senão repete o laço 19. ed: li $v0,10 # (1) Depois do laço, cai fora 20. syscall # (1) do programa 21. imsh: srl $t2,$a1,28 # (1) Primeira linha da subrotina, coloca nibble no fim 22. addiu $t3,$t2,-10 # (1) subtrai 10 para ver se é dígito ou letra em hexa 23. bltz $t3,no # (1) salta se for número 24. ori $t2,$t2,0x40 # (1) Senão é letra entre A e F, duas linhas 25. addiu $t2,$t2,-9 # (1) que geram o ASCIIE da letra em $t2 26. j pr # (1) e pula para imprimir 27. no: ori $t2,$t2,0x30 # (1) no caso número, uma linha que gera seu ASCIIE 28. pr: move $a0,$t2 # (1) $a0 contém o caracter ASCIIE a imprimir (letra/dígito) 29. li $v0,11 # (1) prepara chamada print char 30. syscall # (1) chama print char 31. jr $ra # (1) e retorna para quem chamou.

Solução: a) O programa principal tem uma parte com instruções que só executam uma vez (linhas 5-13 e linhas 19-20). Estas linhas tomam um total 12 ciclos. Além stas, existe um laço entre as linhas 14-18, executado exatamente 8 vezes, uma para cada nibble (4 bits) da palavra n 32 bits. Cada execução do laço, com exção da última, passa por todas suas linhas, gastando 5 ciclos, o que correspon a 5*7=35 ciclos. Na última passagem pelo laço, executam-se apenas as linhas 14-17, gastando-se 4 ciclos. Assim, o programa principal consome um total 12+35+4=51 ciclos para executar. A subrotina imsh é chamada exatamente 8 vezes e ocupa as linhas 21-31 do código. Sua estrutura não possui laços, executando sequencialmente, exto por um código equivalente a um if-then-else. Existem duas possibilidas execução, penndo do valor do nibble mais significativo da palavra passada como parâmetro para a subrotina em $a1: (1-then) Se o nibble é um valor entre 0000 e 1001, as linhas não são executadas e a rotina completa sua função em 8 ciclos; (2-else) Se o nibble é um valor entre 1010 e 1111, apenas a linha 27 não é executada e a rotina completa sua função em 10 ciclos. Com o valor n fornecido, o caso then aconte 2 vezes e o caso else 6 vezes. Logo, gasta-se executando a subrotina 2*8+6*10=76 ciclos. Consequentemente, o programa como um todo executa então em 51+76= 127 ciclos relógio. b) Como a frequência é 600MHz, o período (ou o tempo um ciclo) é (1/(600*10 6 )) segundos, ou ~1,67 x10-9 s. Logo, o tempo execução do programa será 127*1,67 x10-9 s = ~2,12x10-7 s. c) O programa imprime o valor 32 bits armazenado em n como um número hexacimal, no formato 0Xzzzzzzzz, on os primeiros dois caracteres indicam uso da base 16 e os 8 caracteres z são os valores cada um dos nibbles n expressos como números hexacimais (0-9 e A-F). d) Sim, como mencionado nos itens anteriores, o programa possui uma subrotina, imsh, que ocupa as linhas 21-31 do código fornecido.