Vous êtes sur la page 1sur 22

Arquitetura e Organizao de

Computadores
LABORATRIO - MIPS

Reviso
1. Instrues de Load e Store.
2. Operaes com registradores.

3. Syscall
4. Loops
5. Recurso

Arquitetura MIPS
Tipos de Dados:
Instrues esto formatadas em 32 bits.
Byte(8 bits), meia palavra (2 bytes), palavra (4 bytes)

Um caractere necessita de 1 byte de memria.


Um inteiro necessita de 1 palavra de memria (4 bytes).
Ex: .word (endereos de memria e inteiros)
.byte
.space xx

Carregando os registradores - MIPS


Para setar o valor constante a um registrador:
# load immediate value
li (registrador), (valor da constante)
Para setar o endereo de memria:
# load address from the memory
la (registrador), (rtulo da memria)

Carregando os registradores - MIPS


Para setar o valor de um byte a um registrador:
# load byte into a register from specified address
lb (registrador), (endereo da memria)
Para carregar uma palavra em um registrador:
# load word from into a register from the specified address
lw (registrador), (endereo da memria)

Para armazenar uma palavra em um registrador na memria:


# load word from into a register from the specified address
sw (registrador), (endereo da memria)

Exemplo Load e Store


C:

A[12] = h + A[8];

MIPS:

lw $t0, 32($s3)
add $t0, $s2, $t0
sw $t0, 48($s3)

#addr of A in reg s3
#h in reg s2

Admitimos $s3 como registrador base para o array A;


Admitimos $s2 como registrador base para varivel h;
$t0 nosso registrador temporrio para a soma de A[8] + h;
Lembrar sempre que as operaes aritmticas s podem ser sobre registradores e no memria.

No podemos fazer: add 48($s3), $s2, 32($s3)


e nem: lw 32(rotuloDaMemoria)

Uma dvida, por que 32 e 48 como offsets quando na verdade eu quero a 8 e 12 posio do array?

.asciiz
Lembra que fizemos:
msg1: .byte 'H','e','l','l','o',' ','W','o','r','l','d, !
MIPS proporciona um facilitador:
msg2: .asciiz Hello World!
Contudo, do ponto de vista de recursos computacionais, msg1 e msg2 so igual.
Array de bytes.

Registradores - MIPS

Syscall- MIPS
Servios do sistemas (Entrada/Sada) esto disponveis:
Servio
Imprime inteiro
Imprime float
Imprime double
Imprime String
L inteiro
L float
L double

$v0
Argumentos
Resultado
1 $a0 = Inteiro a imprimir
2 $f12 = float a imprimir
3 $f12 = double a imprimir
4 $a0 = Endereo da string
$v0 contem o valor inteiro lido
5
$f0 contem o valor float lido
6
$f0 contem o valor double lido
7

L string

Sair

10

$a0 = Endereo da string


$a1 = Nmero mximo de caracteres para ser lido.
Finaliza a execuo
Para mais servios: http://courses.missouristate.edu/kenvollmar/mars/help/syscallhelp.html

Operaes com registradores em MIPS


Laboratrio MIPS.
Exercitando operaes com Registradores

I/O em MIPS
Agora desenvolva um programa em MIPS.
1. O programa deve ter o seu nome armazenado na memria.
2. Voc deve escrever uma frase e ele deve retornar o seu nome.

Operaes aritmticas em MIPS


Desenvolva um programa em MIPS que realize os seguintes commandos em C:
Assuma que as variveis f, g, I esto atribuidas aos registradores $s0, $s1 e $s2
respectivamente. Assuma que o endereo base do array A e B esto no registrador $s6 e
$s7 respectivamente.

a) f = g + h + B[4]
b) f = g A[B[4]]

Arquitetura e Organizao de
Computadores
LOOPS - MIPS

Como realizar um FOR em MIPS


A realizao de um for em MIPS consiste em:
1. Utilizar instrues de desvio condicional para criao de um critrio de parada.
Ex:
bne $t0, $t1, Label
beq $t0, $t1, Label
2. Utilizar a instruo desvio incondicional:
Ex:
j Label
3. Criar um rtulo para continuar o fluxo de execuo.

Como realizar um FOR em MIPS

Como realizar um FOR em MIPS

Vamos verificar o que acontece no MARS.

Exerccio
Converta o seguinte fragmento em c equivalente em MIPS.
Assuma que as variveis a e b foram atribuidas aos registradores $s0 e $s1
respectivamente. Assuma que o endereo base do array D est no registrado $s2.
While(a < 10)
{
D[a] = b + a;
a += 1;
}

Arquitetura e Organizao de
Computadores
RECURSO- MIPS

Como realizar a Recurso em MIPS


Como precisaremos utilizar uma poro dinmica da memria e armazaner o resultado de
cada chamada iterativa, devemos utilizar a pilha:

Como realizar a Recurso em MIPS


Como precisaremos utilizar uma poro dinmica da memria e armazenar o resultado de
cada chamada iterativa, devemos utilizar a pilha:

Exerccio
Converta o seguinte fragmento em c equivalente em MIPS.
Assuma que as variveis a e b foram atribuidas aos registradores $s0 e $s1
respectivamente. Assuma que o endereo base do array D est no registrado $s2.
int factorial(int n)
{
if (n <= 1)
return 1;
return n * factorial(n - 1);
}

Leituras Recomendadas
Bsica
Referncia MIPS
http://courses.missouristate.edu/KenVollmar/MARS/Help/MarsHelpIntro.html
http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html

Recursos do MARS
http://courses.missouristate.edu/KenVollmar/MARS/features.htm

Vous aimerez peut-être aussi