Prova P4/PS Disciplina: Organização de Computadores-EC Professor: Ney Laert Vilar Calazans Aluno: 25/novembro/2015 1. [3 pontos] Dado o trecho de programa em linguagem de montagem do MIPS abaixo, gere código objeto para as linhas 5, 6 e 9 dele. Come computando os endereços iniciais das instruções nestas linhas e anotando na coluna correspondente (quarta coluna da tabela). Note que o endereço inicial da linha 1 em hexadecimal é 0x00400054. Cuidado com os pressupostos de geração de código para deslocamentos em cada instrução. Número de Linha Rótulo Instrução Endereço inicial do código objeto 1 la $s2,v3 0x00400054 2 la $t2,comuns 3 lw $t2,0($t2) 4 loop3: blez $t2,endl3 5 lw $t1,0($s2) 6 beq $t0,$t1, flag 7 addiu $s2,$s2, 4 8 addiu $t2,$t2, -1 9 j loop3 10 flag: li $t9,0 Código objeto 2. (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 pontos. a) ( ) O prossador AT32UC3A0512 da Atmel é o mais poderoso da família de microcontroladores AVR de 32 bits. Ele possui 512 Kbytes de memória flash e 64 Kbytes de M, ambas endereçadas a byte. Logo estas memórias nessitam respectivamente de barramentos de endereços de 20 e 17 bits. b) ( ) O modo de endereçamento relativo, conforme usado no MIPS, obtém o operando de 32 bits (a somar com o registrador PC) acresntando 2 bits em 0 à direita dos bits 15 a 0 da instrução que o emprega, e agregando à esquerda 16 vezes o bit 15 da mesma instrução (extensão de sinal). c) ( ) As instruções do MIPS addi e addiu diferenciam-se por realizar somas com e sem sinal, respectivamente. A primeira usa extensão de sinal e a segunda extensão de zero para gerar o dado imediato da soma. d) ( ) Suponha que se executa a instrução xori $t0,$t0,0xffff. Assuma que antes de executar esta instrução, $t0 contém 0xAAADF003. Após executar a instrução, $t0 conterá 0xAAAD0FFC. e) ( ) O modo de endereçamento base-deslocamento no MIPS é usado em instruções de asso à memória e também em instruções aritméticas. f) ( ) O código objeto 0x18400024 corresponde a uma instrução blez que quando saltar, o faz nessariamente para uma linha do programa posterior à linha onde há o blez. g) ( ) A instrução lui $t1,0x5555 seguida da instrução ori $t1, $t1,0xaaaa, seguida da instrução xori $t1,$t1, 0xFFFF termina por deixar em $t1 uma palavra de 32 bits composta por 16 bits em 0 e 16 bits em 1, bits estes que se alternam: todo 0 é seguido e predido por um 1 e vi-versa. h) ( ) A memória do MIPS é endereçada a byte, e é possível escrever nela apenas dados de 8 ou 16 ou 32 bits usando uma única instrução do prossador. i) ( ) O texto de um artigo científico de 6 páginas é composto por 31.985 caracteres ASCII. No MIPS, este texto ocuparia 7.997 palavras em memória.
j) ( ) Se o código objeto 0x0C10003A estiver armazenado em memória a partir do endereço 0x00400058, ele corresponde a um salto para subrotina e esta inicia nessariamente em uma posição de memória anterior à posição onde se encontra a instrução de salto. 3. (4,0 pontos) Considere a organização do bloco de dados multiciclo abaixo, que acomoda a execução de um subconjunto da arquitetura do conjunto de instruções do prossador MIPS. Em seguida, responda às questões que seguem a figura. dtpc M1 D rpc Q uins.wpc 4 + pc=i_address address de Instruções incpc RNPC instruction RIR ir=ir_out RIN 25..21 RD 20..16 M3 AdRs op1 R1 M6 R1 20..16 A AdRt RS 15..11 REGS L 20..16 M4 AdRd U 11111 op2 R2 R2 RT M7 wreg M7 25..0 ads add 0-extend s-extend s-extend*4 0000 & IR[25:0] & 00 M2 uins.wreg M5 cte_im RIM IMED C o m p outalu salta LU uins.walu LU=d_address address de Dados uins. uins.bw M8 LU uins. mdr_int x 000000 & [7:0] RMDR uins.wmdr a) (1,0 pontos) Marcar no desenho acima e/ou descrever todos os caminhos do bloco de dados efetivamente usados pela instrução JALR Rd, Rs. Isto significa marcar e/ou descrever em texto todos os caminhos por onde passa informação útil relevante à execução da instrução, ou seja, os dados e/ou endereços que esta realmente nessita manipular. b) (1,0 pontos) Gere o código objeto da instrução JALR $gp, $s0. c) (1,0 pontos) Diga qual operação é executada pela unidade lógica-aritmética (ALU) no teriro ciclo de relógio de uma instrução JALR Rd, Rs, justificando sua resposta. d) (1,0 pontos) Para cada um dos sinais de controle diferente de, diga se e em que ciclo da instrução JALR $gp, $s0 ele é ativado e, caso se aplique, diga qual o seu valor em binário. MDR M9 Lista de associação de números e mnemônicos para os registradores do MIPS Número (Decimal) Nome Número (Decimal) Nome 0 $zero 16 $s0 1 $at 17 $s1 2 $v0 18 $s2 3 $v1 19 $s3 4 $a0 20 $s4 5 $a1 21 $s5 6 $a2 22 $s6 7 $a3 23 $s7 8 $t0 24 $t8 9 $t1 25 $t9 10 $t2 26 $k0 11 $t3 27 $k1 12 $t4 28 $gp 13 $t5 29 $sp 14 $t6 30 $fp 15 $t7 31 $ra
Prova P4/PS Aluno: Disciplina: Organização de Computadores-EC Professor: Ney Laert Vilar Calazans 25/novembro/2015 Gabarito 1. [3 pontos] Dado o trecho de programa em linguagem de montagem do MIPS abaixo, gere código objeto para as linhas 5, 6 e 7 dele. Come computando os endereços iniciais das instruções nestas linhas e anotando na coluna correspondente. Note que o endereço inicial da linha 1 em hexadecimal é 0x004000E8. Cuidado com os pressupostos de geração de código para deslocamentos em cada instrução. Número de Linha Rótulo Instrução Endereço inicial do código objeto Código objeto 1 la $s2,v3 0x00400054 2 la $t2,comuns 0x0040005C 3 lw $t2,0($t2) 0x00400064 4 loop3: blez $t2,endl3 0x00400068 5 lw $t1,0($s2) 0x0040006C 0x8E490000 6 beq $t0,$t1, flag 0x00400070 0x11090003 7 addiu $s2,$s2, 4 0x00400074 8 addiu $t2,$t2, -1 0x00400078 9 j loop3 0x0040007C 0x0810001A 10 flag: li $t9,0 0x00400080 Solução da Questão 1 a) (1,0 pontos) Linha 5: lw $t1, 0($s2). O formato da instrução lw é: lw rt, offset(rs) 0x23 rs rt offset Número de bits/campo: 6 5 5 16 O código objeto é então: 100011 (0x23 em seis bits) concatenado com o endereço do Rs no banco ($s2=18 ou 10010 em binário), concatenado com o endereço do Rt no banco, 01001 ($t1=9), concatenado com o offset (0x0000). Juntando os 32 bits (100011 10010 01001 0000 0000 0000 0000) e traduzindo-os de 4 em 4 em valores hexadecimais, obtém-se 0x8E490000, no endereço da memória de instruções 0x0040006C. b) (1,0 pontos) Linha 6: beq $t0,$t1, flag. O formato da instrução beq é: beq rs, rt, rótulo 4 rs rt offset Número de bits/campo: 6 5 5 16 O código objeto é então: 000100 (4 em seis bits) concatenado com o endereço do Rs no banco ($t0=8 ou 01000 em binário), concatenado com o endereço do Rt no banco, 01001 ($t1=9), concatenado com o offset. Segundo a definição da arquitetura, este é o valor de 16 bits que corresponde à distância, em instruções, da linha abaixo do beq até a linha do rótulo flag ou seja, 3, ou em binário 0000 0000 0000 0011. Juntando os 32 bits (000100 01000 01001 0000 0000 0000 0011) e traduzindo-os de 4 em 4 em valores hexadecimais, obtém-se 0x11090003, no endereço da memória de instruções 0x00400070. c) (1,0 pontos) Linha 7: j loop3. O formato da instrução j é: j label 2 address Número de bits/campo: 6 26 O código objeto é então: 000010 (2 em seis bits) concatenado com o pseudo-endereço. Para obter este, parte-se do endereço de memória associado ao rótulo loop3 (0x00400068), e extrai-se os quatro bits mais significativos e os dois bits menos significativos. O que sobra são os 26 bits do que constituem o pseudo-endereço. Juntando estes 32 bits (0000 1000 0001 0000 0000 0000 0001
1010) e traduzindo-os de 4 em 4 em valores hexadecimais, obtém-se 0x0810001A, no endereço da memória de instruções 0x0040007C. Fim da Solução da Questão 1 2. (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 pontos. a) (F) O prossador AT32UC3A0512 da Atmel é o mais poderoso da família de microcontroladores AVR de 32 bits. Ele possui 512 Kbytes de memória flash e 64 Kbytes de M, ambas endereçadas a byte. Logo estas memórias nessitam respectivamente de barramentos de endereços de 20 e 17 bits. b) (F) O modo de endereçamento relativo, conforme usado no MIPS, obtém o operando de 32 bits (a somar com o registrador PC) acresntando 2 bits em 0 à direita dos bits 15 a 0 da instrução que o emprega, e agregando à esquerda 16 vezes o bit 15 da mesma instrução (extensão de sinal). c) (F) As instruções do MIPS addi e addiu diferenciam-se por realizar somas com e sem sinal, respectivamente. A primeira usa extensão de sinal e a segunda extensão de zero para gerar o dado imediato da soma. d) (V) Suponha que se executa a instrução xori $t0,$t0,0xffff. Assuma que antes de executar esta instrução, $t0 contém 0xAAADF003. Após executar a instrução, $t0 conterá 0xAAAD0FFC. e) (F) O modo de endereçamento base-deslocamento no MIPS é usado em instruções de asso à memória e também em instruções aritméticas. f) (V) O código objeto 0x18400024 corresponde a uma instrução blez que quando saltar, o faz nessariamente para uma linha do programa posterior à linha onde há o blez. g) (V) A instrução lui $t1,0x5555 seguida da instrução ori $t1, $t1,0xaaaa, seguida da instrução xori $t1,$t1, 0xFFFF termina por deixar em $t1 uma palavra de 32 bits composta por 16 bits em 0 e 16 bits em 1, bits estes que se alternam: todo 0 é seguido e predido por um 1 e vi-versa. h) (V) A memória do MIPS é endereçada a byte, e é possível escrever nela apenas dados de 8 ou 16 ou 32 bits usando uma única instrução do prossador. i) (V) O texto de um artigo científico de 6 páginas é composto por 31.985 caracteres ASCII. No MIPS, este texto ocuparia 7.997 palavras em memória. j) (F) Se o código objeto 0x0C10003A estiver armazenado em memória a partir do endereço 0x00400058, ele corresponde a um salto para subrotina e esta inicia nessariamente em uma posição de memória anterior à posição onde se encontra a instrução de salto. Solução da Questão 2 a) (F) 512Kbytes e endereçamento a byte implicam a nessidade de log 2 (512K) linhas de endereço. Como 512=2 9, e 1K=2 10, o logaritmo de 512K é 19. O mesmo raciocínio conduz a computar log 2 (64K)=16. Logo a afirmativa é FALSA. b) (F) Ao aplicar o prodimento descrito neste item produz-se um valor de 34 bits e não 32 (bits 15-0 + 00 + 16 bits de extensão). Logo a afirmativa só pode ser FALSA. c) (F) Há dois erros nesta questão. Primeiro, as instruções não fazem somas de forma diferenciada, pois a representação em complemento de 2 garante que soma com e sem sinal não operam de forma distinta. O segundo erro é que ambas usam extensão de sinal para gerar a constante de 32 bits. Logo a afirmativa é FALSA. d) (V) A instrução xori usa extensão de 0. Logo o valor a ser operado na ULA com o conteúdo do registrador $t0 é 0x0000FFFF. Ora, dada a natureza da operação lógica XOR, este valor vai manter os 16 bits mais significativos de $t0 inalterados ( xoreados com 0) e vai inverter os 16 bits menos significativos de $t0 ( xoreados com 1), o que produzirá em $t0 o novo valor, que será: 0xAAADF00C, pois 0x0 invertido dá 0xF, 0xF invertido dá 0x0 e 0x3 invertido dá 0xC. Logo a afirmativa é VERDADEI. e) (F) O modo base deslocamento somente é usado para instruções de asso à memória. Logo a afirmativa é FALSA. f) (V) Os seis primeiros bits de 0x18400024 são 000110 ou 6 em decimal, o que segundo a Tabela A.10.2 do Apêndi A identifica a instrução blez. Logo esta parte do item está rta.
Esta instrução usa modo de endereçamento relativo e o endereço de salto será o ado de adicionar o PC ao offset da instrução (bits 15-0 do código objeto) com sinal estendido e multiplicado por 4, para gerar um valor constante de 32 bits. Como os bits 15-0 da instrução são 0x0024, a extensão produzirá 0x00000024, que multiplicado por 4 fica 0x00000090. Como este valor é positivo, somado aos valores normais do PC (em torno de 0x00400000) rtamente gera um endereço de memória maior que aquele contido no PC ao iniciar a execução da instrução. Logo o salto é para a frente, para linha do programa posterior à linha da instrução blez. Logo a afirmativa é VERDADEI. g) (V) lui gera em $t1 o valor 0x55550000. A ori deixa em $t1 0x5555AAAA. Finalmente o xori inverte os 16 bits menos significativos de $t1, gerando 0x55555555, pois o inverso de 0xA (1010 em binário) é 0x5 (0101 em binário). O padrão de 8 valores 0x5 corresponde ao valor binário de 32 bits 0101 0101 0101 0101 0101 0101 0101 0101. Logo a afirmativa é VERDADEI. h) (V) As instruções sb, sh e sw permitem escrever 1 byte, 2 bytes e 4 bytes na memória, respectivamente. Logo a afirmativa é VERDADEI. i) (V) Cada caractere ASCII ocupa exatamente 1 byte e no MIPS cada 4 bytes correspondem a uma palavra. Tomando o valor múltiplo de 4 mais próximo do tamanho do arquivo, têm-se 31.988, que dividido por 4 forne 7.997. Logo a afirmativa é VERDADEI. j) (F) Os seis primeiros bits de 0x0C10003A são 000011 ou 3 em decimal, o que segundo a Tabela A.10.2 do Apêndi A identifica a instrução jal. Logo esta parte da afirmativa é correta, pois trata-se de um salto para subrotina. O endereço onde a subrotina inicia é obtido tomando-se os 26 bits menos significativos do código objeto acresntando-se dois bits em 0 à direita destes e colocando à esquerda deste os quatro bits mais significativos do valor do PC no momento da execução da instrução. O valor do PC no momento da execução será 0x00400058 + 4, ou seja, 0x0040005C. Assim o endereço da subrotina para onde se deve saltar é 0000 & 00 0001 0000 0000 0000 0011 1010 & 00, ou seja 0x004000E8, que é posterior ao jal. Logo a afirmativa é FALSA. Fim da Solução da Questão 2 3. (4,0 pontos) Considere a organização do bloco de dados multiciclo abaixo, que acomoda a execução de um subconjunto da arquitetura do conjunto de instruções do prossador MIPS. Em seguida, responda às questões que seguem a figura. dtpc M1 D PC Q uins.wpc 4 + pc=i_address address de Instruções incpc RNPC instruction IR ir=ir_out RIN 25..21 RD 20..16 M3 AdRs op1 R1 M6 R1 D 20..16 AdRt RS A 15..11 REGS L 20..16 M4 AdRd U 11111 op2 R2 R2 RT M7 wreg M7 25..0 d ads add 0-extend s-extend s-extend*4 0000 & IR[25:0] & 00 M2 uins.wreg M5 cte_im IMED IMED C o m p outalu salta LU uins.walu LU=d_address address de Dados uins. uins.bw M8 LU uins. x 0000 00 & [7:0] mdr_int RMDR uins.wmdr a) (1,0 pontos) Marcar no desenho acima e/ou descrever todos os caminhos do bloco de dados efetivamente usados pela instrução JALR Rd, Rs. Isto significa marcar e/ou descrever em texto todos os caminhos por onde passa informação útil relevante à execução da instrução, ou seja, os dados e/ou endereços que esta realmente nessita manipular. b) (1,0 pontos) Gere o código objeto da instrução JALR $gp, $s0. MDR M9
c) (1,0 pontos) Diga qual operação é executada pela unidade lógica-aritmética (ALU) no teriro ciclo de relógio de uma instrução JALR Rd, Rs, justificando sua resposta. d) (1,0 pontos) Para cada um dos sinais de controle diferente de, diga se e em que ciclo da instrução JALR $gp, $s0 ele é ativado e, caso se aplique, diga qual o seu valor em binário. Solução da Questão 3 a) (1,0 pontos). Ver desenho. b) (1,0 pontos). JALR $gp, $s0 Formato R: seis campos de 6, 5, 5, 5, 5, 5 e 6 bits, com valores respectivos (em hexa): 0 10 0 1C 0 9. Isto convertido em binário dá: 000000 10000 00000 11100 00000 001001. Em hexadecimal o código objeto fica: 0x0200E009. c) (1,0 pontos). A operação executada na ALU é passar o que está na entrada op1 para a saída da ALU outalu. Este é o valor do registrador Rs, que contém o endereço a ser carregado em LU, e que posteriormente (no próximo ciclo) será transferido para o PC (o endereço de início da subrotina para onde JALR salta). d) (1,0 pontos). Observando os sinais da palavra de microinstrução produzida no Bloco de Controle, nota-se que existem 11 sinais além do sinal. Os sinais, se eles são ou não ativados, e o valor binário deles quando ativados são: 1. - Ativado (em 1 ) no primeiro ciclo 2. - Ativado (em 1 ) no segundo ciclo 3. uins.walu - Ativado (em 1 ) no teriro ciclo 4. uins.wmdr - Não ativado (fica em 0 ) ao longo de toda a instrução 5. uins.wpc - Ativado (em 1 ) no quarto ciclo 6. uins.wreg - Ativado (em 1 ) no quarto ciclo 7. uins.whilo - Não ativado (fica em 0 ) ao longo de toda a instrução 8. uins. - Não ativado (fica em 0 ) ao longo de toda a instrução 9. - Irrelevante, mas não ativado (fica em 1 ) ao longo de toda a instrução 10. uins.bw - Irrelevante, mas não ativado (fica em 1 ) ao longo de toda a instrução 11. uins._md - Não ativado (fica em 0 ) ao longo de toda a instrução Fim da Solução da Questão 3 Lista de associação de números e mnemônicos para os registradores do MIPS Número (Decimal) Nome Número (Decimal) Nome 0 $zero 16 $s0 1 $at 17 $s1 2 $v0 18 $s2 3 $v1 19 $s3 4 $a0 20 $s4 5 $a1 21 $s5 6 $a2 22 $s6 7 $a3 23 $s7 8 $t0 24 $t8 9 $t1 25 $t9 10 $t2 26 $k0 11 $t3 27 $k1 12 $t4 28 $gp 13 $t5 29 $sp 14 $t6 30 $fp 15 $t7 31 $ra