Buscar

Programação Assembly MIPS

Prévia do material em texto

1	
  
Programação	
  Assembly	
  MIPS	
  
	
  
Este	
  documento	
  apresenta	
  a	
  descrição	
  de	
  um	
  procedimento	
  para	
  converter	
  um	
  código	
  
fonte	
  em	
  alguma	
  linguagem	
  de	
  programação	
  para	
  a	
  linguagem	
  Assembly	
  do	
  MIPS.	
  
	
  
A	
  Figura	
  1	
  apresenta	
  um	
  código	
  em	
  Java	
  para	
  ordenar	
  um	
  vetor	
  de	
  inteiros	
  usando	
  o	
  
algoritmo	
  de	
  ordenação	
  Bubblesort,	
  sem	
  nenhuma	
  otimização.	
  
	
  
	
  
Figura	
  1:	
  Algoritmo	
  de	
  ordenação	
  BubbleSort	
  em	
  Java.	
  
A	
   partir	
   deste	
   algoritmo,	
   pode-­‐se	
   criar	
   um	
   pseudocódigo	
   como	
   passo	
   intermediário	
  
antes	
  de	
  escrever	
  o	
  código	
  Assembly	
  do	
  MIPS.	
  
O	
  objetivo	
  desse	
  pseudocódigo	
  é	
  eliminar	
  o	
  uso	
  de	
  comandos	
  de	
  repetição	
  (como	
  while	
  
e	
   for),	
   substituindo-­‐os	
  por	
   rótulos	
   e	
   comandos	
   ‘if	
   ...	
   goto’.	
  O	
  pseudocódigo	
   também	
  
elimina	
  o	
  de	
  expressões	
  aritméticas	
  dentro	
  de	
  outros	
  comandos	
  ou	
  como	
   índices	
  de	
  
vetores.	
  
A	
  Figura	
  2	
  e	
  a	
  Figura	
  3	
  apresentam	
  um	
  pseudocódigo	
  que	
  corresponde	
  ao	
  código	
  Java	
  
acima.	
  
 
Figura	
  2:	
  Pseudocódigo	
  para	
  o	
  algoritmo	
  BubbleSort,	
  parte	
  1. 
	
   	
  
class BubbleSort { 
 public static void main(String[] args) { 
 
 int vetor[] = {10,9,8,7,6,5,4,3,2,1}; 
 boolean troca = true; 
 int aux; 
 while (troca) { 
 troca = false; 
 for (int i = 0; i < vetor.length - 1; i++) { 
 if (vetor[i] > vetor[i + 1]) { 
 aux = vetor[i]; 
 vetor[i] = vetor[i + 1]; 
 vetor[i + 1] = aux; 
 troca = true; 
 } 
 } 
 } 
 } 
} 
	
  
 // Variáveis na memória 
 int vetor[] = {10,9,8,7,6,5,4,3,2,1}; 
 int tam = 10; 
 
 // Variáveis locais 
 int troca; 
 int s; 
 int i0, i1; 
 int v0, v1; 
	
   2	
  
	
  
Figura	
  3:	
  Pseudocódigo	
  para	
  o	
  algoritmo	
  BubbleSort,	
  parte	
  2. 
Construído	
  desta	
  forma,	
  cada	
  comando	
  do	
  pseudocódigo	
  corresponde	
  a	
  uma	
  instrução	
  
do	
  MIPS.	
  As	
  variáveis	
  na	
  memória	
  ficarão	
  no	
  segmento	
  de	
  dados	
  do	
  código	
  Assembly	
  e	
  
o	
   endereço	
   do	
   vetor	
   e	
   as	
   variáveis	
   locais	
   serão	
  mapeadas	
   para	
   os	
   registradores	
   de	
  
propósito	
  geral	
  do	
  MIPS,	
  como	
  está	
  representado	
  na	
  Tabela	
  1.	
  
Dado	
   Registrador	
  
Endereço	
  de	
  vetor	
   $t0 
s $t1 
troca $t2 
i0 $t3 
v0 $t5 
i1 $t6 
v1 $t7 
Tabela	
  1:	
  Mapeamento	
  dos	
  dados	
  do	
  pseudocódigo	
  para	
  registradores	
  MIPS.	
  
Usando	
  essa	
  convenção,	
  o	
  código	
  Assembly	
  do	
  MIPS	
  correspondente	
  é	
  apresentado	
  na	
  
Figura	
  4.	
  
Cada	
   elemento	
   do	
   vetor	
   ocupa	
   4	
   bytes.	
   Por	
   isso,	
   o	
   incremento	
   do	
   índice	
   foi	
   feito	
  
somando	
   4	
   no	
   código	
   Assembly,	
   diferente	
   do	
   pseudocódigo,	
   onde	
   foi	
   usado	
   o	
  
incremento	
  unitário.	
  	
  
	
  
 troca = 1; 
 s = tam-1; 
 loop0: if (troca == 0) goto end_loop0; 
 troca = 0; 
 i0 = 0; 
 loop1: if (i0>=s) goto end_loop1; 
 if0: i1 = i0+1; 
 v0 = vetor[i0]; 
 v1 = vetor[i1]; 
 if (v0<=v1) goto end_if0; 
 vetor[i0] = v1; 
 vetor[i1] = v0; 
 troca=1; 
 end_if0: i0=i0+1; 
 goto loop1; 
 end_loop1: goto loop0; 
 end_loop0: // FIM 
	
  
	
   3	
  
	
  
Figura	
  4:	
  Código	
  Assembly	
  do	
  MIPS	
  para	
  o	
  algoritmo	
  de	
  ordenação	
  Bubblesort.

Continue navegando