Arquitectura de Computadores

Notas de estudo
Componente Teórico-Prática

Exercícios Propostos

Paulo Jorge Alves - 1999/2000



3  MIPS nativo

3.1  Assembly puro (sem pseudo-instruções)
 

1. Das seguintes instruções assembly do MIPS, distinga as instruções nativas das pseudo-instruções e para estas últimas indique uma  equivalência possível usando apenas instruções nativas.

    a)   li   $v0, 100
    b)   li   $v1, 100000
    c)   lw   $a0, -4($sp)
    d)   bgt  $s0, $s1, fim
    e)   addi $a0, $a1, 0xF1234
    f)   move $t3, $a0
    g)   b    ciclo
    h)   syscall
 

2. Considere os exemplos abaixo indicados e as instruções presentes na arquitectura i86.

 

  i86 MIPS MIPS nativo
Ex.1 push AX push  $t0 sw    $t0, 0($sp)
addi  $sp, $sp, -4
Ex.2 dec BYTE PTR [BX+50] decb  50($t0) lb    $at, 50($t0)
addi  $at, $at, -1
sb    $at, 50($t0)

         Notas:
               - AX, BX, CX, DX, SI, DI são registos do i86.
               - [AX+20] indica o valor da memória na posição indicada pelo registo AX + 20

Proponha pseudo-instruções equivalentes e a forma como vão ser implementadas (usando apenas instruções nativas do MIPS).  

   a) i86:   inc  WORD PTR [SI - 0x12FC]
   b) i86:   push [BX]
   c) i86:   move AX,[BX + SI + 100]
   d) i86:   jmp  [SP + BX + 100]
 

3.2  Codificação a baixo nível (código máquina)
 

3. Codifique usando apenas instruções nativas do MIPS (TAL) o seguinte extracto de código (MAL) sabendo que por defeito o segmento de código inicia no endereço de memória 0x00400020 e o de dados no endereço 0x10000000

            .data
    tabela: .space 400

            .text
            move  $t0, $0
            li    $t1, 50
            la    $t2, tabela
    ciclo:  lw    $t3, 0($t2)
            beq   $t3, $t0, fim
            add   $t0, $t3, $t0
            addi  $t2, $t2, 4
            b     ciclo
    fim:    jr    $ra
 
 

4. Codifique usando apenas instruções nativas do MIPS (TAL) o seguinte extracto de código (MAL)
 

            .data   0x1000FFF0
    livre:  .space  20
    total:  .word   0
    mens1:  .asciiz "Número: "
    mens2:  .asciiz "Chave: "
    valor:  .word   0

            .text   0x00408000
            la  $a0, mens1
            li  $v0, 4
            syscall
            li  $v0, 5
            syscall
            sw  $v0, valor($0)

            la  $a0, mens2
            li  $v0, 4
            syscall
            la  $a0, livre
            li  $a1, 20
            li  $v0, 8
            syscall