Arquitectura de Computadores
Notas de estudo
Componente Teórico-Prática
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