Faculdade de Ciências Aplicadas e
Sociais de Petrolina – FACAPE
Objetivos
Para um dado problema:
mostrar um programa C.
mostrar um programa MIPS equivalente.
Exemplo MIPS
Usar um simulador MIPS para:
montar e executar o programa MIPS.
ver resultado.
verificar as modificações nos registradores.
verificar as modificações na memória.
Prof. Sérgio
Organização de Computadores
1
2
Programa C
Problema
#include <stdio.h>
void parImpar(int []);
Resolver o seguinte problema:
Criar um programa MIPS que peça ao
usuário cinco números inteiros positivos
quaisquer, guarde-os em vetor e, por meio
de função, informe quais deles são pares e
quais são ímpares.
Organização de Computadores
Organização de Computadores
3
void main(void){
int i, dados[5];
for(i = 0; i < 5; i++){
printf(“Digite um numero: ”);
scanf(“%d”, &dados[i]);
}
parImpar(dados);
}
void parImpar(int dados[]){
int i, x;
for(i = 0; i < 5; i++){
x = dados[i];
if((x % 2) == 0)
printf(“%d eh um numero par\n”, x);
else
printf(“%d eh um numero impar\n”, x);
}
} Organização de Computadores
4
parImpar:
li
$t0,
li
$t3,
loop2:
add
$s1,
lw
$t1,
div
$t1,
mfhi $t2
bne
$t2,
li
$v0,
move $a0,
syscall
li
$v0,
la
$a0,
syscall
addi $t0,
blt
$t0,
jr
$ra
impar:
li
$v0,
move $a0,
syscall
li
$v0,
la
$a0,
syscall
addi $t0,
blt
$t0,
jr
$ra
Programa MIPS
.data
dados:
print1:
print2:
print3:
.space
20
.asciiz
.asciiz
.asciiz
.text
main:
la
$s0,
la
$a0,
li
$t0,
loop:
li
$v0,
syscall
li
$v0,
syscall
add
$s1,
sw
$v0,
addi $t0,
blt
$t0,
dados
print1
0
# reserva 20 bytes de memória para o vetor
"\nDigite um numero: "
" eh um numero par\n"
" eh um numero impar\n"
#
#
#
#
carrega endereço inicial do vetor dados
carrega endereço inicial de print1
incrementador do vetor
abaixo: instruções para carregar o vetor
4
# imprime mensagem solicitando numero
5
$s0, $t0
($s1)
$t0, 4
20, loop
jal
parImpar
li
$v0, 10
syscall
#
#
#
#
#
lê um numero e guarda em $v0
aponta para um endereço do vetor
guarda o numero no vetor
pula para o proximo indice do vetor (+4 bytes)
se nao chegou no final do vetor, fica no loop
# chama a função parImpar
# finaliza programa
Organização de Computadores
5
MIPS
MÃOS À OBRA AGORA!!
Organização de Computadores
7
0
2
# incrementador do vetor
# divisor para a instrução div
$s0, $t0
($s1)
$t3
#
#
#
#
#
0, impar
1
$t1
obtem endereço de um indice do vetor
copia um numero do vetor para o registrador $t1
divide o numero por 2 (quociente: LO, resto: HI)
copia o resto para o registrador $t2
se o resto ≠ 0, então é um numero impar
# imprime o numero
4
print2
$t0, 4
20, loop2
#
#
#
#
imprime mensagem par
incrementa posição do vetor
se nao chegar no final do vetor, fica no loop
finaliza função e retorna para o main
1
$t1
# imprime o numero
4
print3
$t0, 4
20, loop2
Organização de Computadores
#
#
#
#
imprime mensagem impar
incrementa posição do vetor
se nao chegar no final do vetor, fica no loop
finaliza função e retorna para o main
6