Programação em Assembly MIPS I

  1. Qual o código C que corresponde ao seguinte código assembly do MIPS? Considere que as variáveis f, g, h, i, e j e que o endereço base dos vetores A[ ] e B[ ] estão atribuídos aos registos $s0, $s1, $s2, $s3, $s4, $s6 e $s7, respetivamente. Considere ainda que os elementos dos vetores A[ ] e B[ ] ocupam 1 word (4 bytes).
    1.   add $s0, $s1, $s2
        add $s0, $s3, $s0
          
    2.   sll  $t0, $s0, 2
        add  $t0, $s6, $t0
        lw   $t1, 0($t0)
        lw   $t2, 4($t0)   
        add  $t0, $t1, $t2 
        sll  $t1, $s1, 2   
        add  $t1, $s7, $t1 
        sw   $t0, 0($t1)   
          
    3.         li   $t2, 100
              move $t1, $s6
              li   $s3, 0
        loop: lw   $t0, 0($t1)
              add  $s0, $s0, $t0
              addi $t1, $t1, 4
              addi $s3, $s3, 1
              blt  $s3, $t2, loop
          
  2. Qual o código assembly do MIPS que corresponde ao seguinte código C? Considere que as variáveis f, g, h, i, e j e que o endereço base dos vetores A[ ] e B[ ] estão atribuídos aos registos $s0, $s1, $s2, $s3, $s4, $s6 e $s7, respetivamente. Considere ainda que os elementos dos vetores A[ ] e B[ ] ocupam 1 word (4 bytes).
    1.   h = A[0] << 4;
          
    2.   B[8] = A[i − j];
          
    3.   B[8] = A[i] + A[j];
          
    4.   f = A[B[g] + 1];
          
  3. Qual o valor do registo $t2 no final das seguintes sequências de instruções assembly do MIPS?
    1.   li   $t0, 0xAAAAAAAA
        li   $t1, 0x12345678
        sll  $t0, $t0, 4
        or   $t2, $t0, $t1
          
    2.   li   $t0, 0xAAAAAAAA
        sll  $t1, $t0, 4
        andi $t2, $t1, -1
          
    3.   li   $t0, 0xAAAAAAAA
        srl  $t1, $t0, 3
        andi $t2, $t1, 0xFFEF
          
    4.   li   $t0, 0x10010000
        li   $t1, 0x11223344  
        sw   $t1, 0($t0)
        lbu  $t2, 0($t0)
          
  4. Indique um conjunto mínimo de instruções que podem ser utilizadas para implementar as seguintes pseudo-instruções do assembly do MIPS.
    1.   not $t1, $t2   # bitwise inversion
          
    2.   bge $t1, $t2, label   # branch if greater or equal