Buscar

Assembly MIPS Básico

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Introdução aos Sistemas 
Computacionais 
Disciplina: 113468 
 
Prof. Marcus Vinicius Lamar 
 
Assembly MIPS 
Básico 
UnB/CIC 113468– Introdução aos Sistemas Computacionais 
Assembly MIPS básico 
3 
if (i==j) 
 f=g+h; 
else 
 f=f-i; 
... 
# $s0=f, $s1=g, $s2=h, $s3=i, $s4=j 
 bne $s3,$s4,ELSE 
 add $s0,$s1,$s2 
 j DONE 
ELSE: sub $s0,$s0,$s3 
DONE: ... 
Código de alto nível Código Assembly MIPS 
Exemplo: Estrutura de decisão if-then-else 
LABEL: Endereço de 32 bits 
Alocação variável-registrador é feita pelo compilador 
UnB/CIC 113468– Introdução aos Sistemas Computacionais 
# $s0=amount, $s1=fee 
CASE20: addi $t0, $zero, 20 
 bne $s0, $t0, CASE50 
 addi $s1, $zero, 5 
 j DONE 
CASE50: addi $t0, $zero, 50 
 bne $s0, $t0, CASE100 
 addi $s1, $zero, 3 
 j DONE 
CASE100: addi $t0, $zero, 100 
 bne $s0, $t0, DEFAULT 
 addi $s1, $zero, 2 
 j DONE 
DEFAULT: addi $s1, $zero, 0 
DONE: ... 
Assembly MIPS básico 
4 
switch(amount) 
{ 
case 20: fee=5; 
 break; 
 
case 50: fee=3; 
 break; 
 
case 100: fee=2; 
 break; 
 
default: fee=0; 
} 
... 
Código de alto nível Código Assembly MIPS 
Exemplo: Estrutura de decisão switch - case 
UnB/CIC 113468– Introdução aos Sistemas Computacionais 
Assembly MIPS básico 
5 
int pow=1; 
int x=0; 
 
while(pow!=128) 
{ 
 pow=pow*2; 
 x=x+1; 
} 
... 
# $s0=pow, $s1=x 
 addi $s0,$zero,1 
 addi $s1,$zero,0 
 addi $t0,$zero,128 
WHILE: beq $s0,$t0,DONE 
 sll $s0,$s0,1 
 addi $s1,$s1,1 
 j WHILE 
DONE: ... 
Código de alto nível Código Assembly MIPS 
Exemplo: Estrutura de repetição while 
UnB/CIC 113468– Introdução aos Sistemas Computacionais 
Assembly MIPS básico 
6 
int sum=0; 
 
for(i=0;i<10;i++) 
{ 
 sum=sum+i; 
} 
... 
# $s0=i, $s1=sum 
 add $s1,$zero,$zero 
 addi $s0,$zero,0 
FOR: slti $t0,$s0,10 
 beq $t0,$zero,DONE 
 add $s1,$s1,$s0 
 addi $s0,$s0,1 
 j FOR 
DONE: ... 
Código de alto nível Código Assembly MIPS 
Exemplo: Estrutura de repetição for 
UnB/CIC 113468– Introdução aos Sistemas Computacionais 
Assembly MIPS básico 
Exemplos de códigos utilizando arrays 
 
7 
int array[5]; 
 
array[0]=array[0]*8; 
array[1]=array[1]*8; 
... 
# $s0= endereço base do array 
 lui $s0,0x1000 
 ori $s0,$s0,0x7000 
 lw $t1,0($s0) 
 sll $t1,$t1,3 
 sw $t1,0($s0) 
 lw $t1,4($s0) 
 sll $t1,$t1,3 
 sw $t1,4($s0) 
 ... 
UnB/CIC 113468– Introdução aos Sistemas Computacionais 
Assembly MIPS básico 
Exemplos de códigos utilizando arrays 
8 
int i; 
int array[1000]; 
 
for(i=0;i<1000;i++) 
 array[i]=array[i]*8; 
 
... 
# $s0= endereço base do array 
# $s1=i 
 lui $s0,0x23B8 
 ori $s0,$s0,0xF000 
 add $s1,$zero,$zero 
 addi $t2,$zero,1000 
 
LOOP: slt $t0,$s1,$t2 
 beq $t0,$zero,DONE 
 sll $t0,$s1,2 
 add $t0,$s0,$t0 
 lw $t1,0($t0) 
 sll $t1,$t1,3 
 sw $t1,0($t0) 
 addi $s1,$s1,1 
 j LOOP 
DONE: ... 
UnB/CIC 113468– Introdução aos Sistemas Computacionais 
Assembly MIPS básico 
Chamada de Procedimentos 
Registrador $ra: Endereço de Retorno 
9 
Convenção: 
Registradores $a0,$a1,$a2,$a3 Argumentos das funções 
Registradores $v0,$v1 Retorno dos valores 
int main() { 
 ... 
 simple(); 
 ... 
} 
 
void simple() { 
 return; 
} 
main: ... 
 jal simple 
 ... 
 
simple: jr $ra 
UnB/CIC 113468– Introdução aos Sistemas Computacionais 
Assembly MIPS básico 
Chamada de Procedimentos 
 
10 
E se tiver mais argumentos ou mas valores de retorno? RAM 
int main() { 
 int y; 
 ... 
 y=diffofsums(2,3,4,5); 
 ... 
} 
 
int diffofsums(int f, int g, 
 int h, int i) 
{ 
 int result; 
 
 result=(f+g)-(h+i); 
 return result; 
} 
 
# $s0= y 
main: ... 
 addi $a0,$zero,2 
 addi $a1,$zero,3 
 addi $a2,$zero,4 
 addi $a3,$zero,5 
 jal diffofsums 
 add $s0,$v0,$zero 
 ... 
 
diffofsums: 
 add $t0,$a0,$a1 
 add $t1,$a2,$a3 
 sub $v0,$t0,$t1 
 jr $ra 
UnB/CIC 113468– Introdução aos Sistemas Computacionais 
11 
Processador MIPS 
MEMÓRIA RAM 
$0 
: 
$31 
ALU int Mul/Div 
Lo Hi 
CPU principal 
REGISTRADORES 
$0 
: 
$31 
FPU (Coprocessador 1) 
REGISTRADORES 
BadVAddr 
Status 
Cause 
EPC 
Coprocessador 0 (Interrupções e MMU) 
ALU FP 
flags 
UnB/CIC 113468– Introdução aos Sistemas Computacionais 
12 
Ponto Flutuante no MIPS32 : Coprocessador1 
 Aritmética usando padrão IEEE754 
 
 32 Registradores de precisão simples: $f0,$f1,...,$f30,$f31 
ou 
 16 Registradores de precisão dupla: $f0,$f2,$f4,...,$f30 
 $f0={$f0,$f1} $f2={$f2,$f3} etc 
 
 
 Operações com precisão simples(.s) ou precisão dupla(.d) 
 Adição: add.s e add.d 
 Ex.: add.s $f0,$f1,$f2 # $f0=$f1+$f2 
 Subtração: sub.s e sub.d 
 Ex.: sub.d $f0,$f2,$f4 # $f0=$f2-$f4 
 Multiplicação: mul.s e mul.d 
 Ex.: mul.s $f0,$f1,$f2 # $f0=$f1*$f2 
 Divisão: div.s e div.d 
 Ex.: div.d $f0,$f4,$f8 # $f0=$f4/$f8 
UnB/CIC 113468– Introdução aos Sistemas Computacionais 
13 
Ponto Flutuante no MIPS32 : Coprocessador1 
 Comparação e decisão em Ponto Flutuante 
 O Coprocessador 1 do MIPS possui 8 flags para comparação 
 
 Instruções de Comparação: c.x.s e c.x.d 
 onde x pode ser eq (igual), lt (menor que) ou le (menor ou igual) 
 Ex.: c.eq.s 0,$f1,$f2 # Seta o flag 0 como 1 se $f1==$f2 
 c.lt.d 4,$f2,$f4 # Seta o flag 4 como 1 se $f2<$f4 
 
 Desvio Condicional: bc1t e bc1f 
 Ex.: bc1t 0, LABEL # Desvia para LABEL se o flag 0 for 1 
 bc1f 4, LABEL # Desvia para LABEL se o flag 4 for 0 
UnB/CIC 113468– Introdução aos Sistemas Computacionais 
14 
Ponto Flutuante no MIPS32 : Coprocessador1 
 Instruções de Transferências de Dados 
 
 Para memória: loads e stores 
 Ex.: Precisão Simples 
 lwc1 $f0,Imm($t0) # $f0=Memoria[$t0+Imm] 
 swc1 $f0,Imm($t0) # Memoria[$t0+Imm]=$f0 
 Ex.: Precisão Dupla 
 ldc1 $f4,Imm($t1) # $f4=Memoria[$t1+Imm] 
 sdc1 $f4,Imm($t1) # Memoria[$t1+Imm]=$f4 
 
 Para o processador principal: 
Ex.: mfc1 $t0,$f1 # $t0 = $f1 
 mtc1 $t0,$f1 # $f1 = $t0 
Cópia simples dos bits. Sem conversão! 
UnB/CIC 113468– Introdução aos Sistemas Computacionais 
15 
Ponto Flutuante no MIPS32 : Coprocessador1 
 Conversões de tipos de dados: cvt.x.y converte de y para x 
 
 Inteiro(w) 
 
Precisão Simples(s) Precisão Dupla(d) 
 
Ex.: cvt.s.w $f0,$f1 # $f0 = converte inteiro $f1 para P.S. 
 cvt.d.s $f0,$f3 # $f0 = converte P.S. em $f3 para P.D. 
 
 
 Arredondamento para inteiro 
 ceil : arredonda sempre para cima ex.: 1.1 -> 2 
 floor: arredonda sempre para baixo ex.: 1.9 -> 1 
 round: arredonda para o mais próximo ex.: 1.55 ->2 1.45->1 
 trunc : trunca para inteiro 32 bits 
UnB/CIC 113468– Introdução aos Sistemas Computacionais 
16 
Exemplo: 
float exemplo (float a, float b) 
{ 
 if (a>b) 
 return (a-b/a); 
 else 
 return (b+a*b); 
} 
 Considerando os argumentos de entrada em $f12 e $f13 e saída em $f0. 
 
exemplo: c.lt.s 1,$f13,$f12 
 bc1t 1,PULA 
 mul.s $f0,$f12,$f13 
 add.s $f0,$f13,$f0 
 j SAI 
PULA: div.s $f0,$f13,$f12 
 sub.s $f0,$f12,$f0 
SAI: jr $ra

Outros materiais