Você está na página 1de 2

Guia Básico de Referência do myMIPS e da Assembly, usando o número do registrador ($8) ou o Instruções de Deslocamento Lógico

Linguagem Assembly nome equivalente ($t0).


Instrução Descrição Exemplo
O myMIPS é um processador educacional, baseado # Nome Descrição
no processador MIPS. rd = rs <<
sll rd, rs, shamt sll $s0, $t1, 2
0 $zero Valor constante igual a zero shamt
Tipo de Dados e Formato das Instruções
1 $at Assembler temporário rd = rs >>
srl rd, rs, shamt srl $s0, $t1, 2
shamt
Todas as instruções da arquitetura myMIPS são de
2-3 $v0 - $v1 Retorno de função
32 bits, ou seja, uma palavra tem 4 bytes.
Instruções Lógicas
4-7 $a0 - $a3 Argumento de função
Instrução do tipo R
8 - 15 $t0 - $t7 Variáveis temporárias Instrução Descrição Exemplo
op (6 bits) - Operação (zero para o tipo R) 16 - 23 $s0 - $s7 Variáveis salvas por função and rd, rs, rt rd = rs & rt and $s0, $t1, $t2
rs (5 bits) - Registrado do 1º operando
rt (5 bits) - Registrador do 2º operando 24 - 25 $t8 - $t9 Variáveis temporárias andi rs, rt, imm rs = rt & imm andi $s0, $t1, 2
rd (5 bits) - Registrador de destino
26 - 27 $k0 - $k1 Temporárias para o SO or rd, rs, rt rd = rs | rt or $s0, $t1, $t2
shamt (5 bits) - Quantidade de deslocamento
funct (6 bits) - Função a ser executada 28 $gp Apontador global ori rs, rt, imm rs = rt | imm ori $s0, $t1, 2
Instrução do tipo I 29 $sp Apontador de pilha xor rd, rs, rt rd = rs ^ rt xor $s0, $t1, $t2
30 $fp Apontador de quadro xori rs, rt, imm rs = rt ^ imm xori $s0, $t1, 2
op (6 bits) - Operação a ser executada
rs (5 bits) - Registrado do 1º operando 31 $ra Endereço de retorno
rt (5 bits) - Registrador do 2º operando Instruções de Salto
imm (16 bits) - Endereço de memória/constante Instruções Aritméticas
Instrução Descrição Exemplo
Instrução do tipo J
Instrução Descrição Exemplo Se rs = rt
beq rs, rt, imm beq $t1, $t2, label
$pc += addr
op (6 bits) - Operação a ser executada add rd, rs, rt rd = rs + rt add $s0, $t1, $t2
addr (26 bits) - Endereço de memória Se rs != rt
addi rs, rt, imm rs = rt + imm addi $s0, $t1, 5 bne rs, rt, imm bne $t1, $t2, label
$pc += addr
Registradores sub rd, rs, rt rd = rs - rt sub $s0, $t1, $t2 j addr $pc = addr j label

No processador myMIPS existem 32 (trinta e dois) mul rd, rs, rt rd = rs * rt mul $s0, $t1, $t2 $ra = $pc+4
registradores de uso geral. Todos os registradores jal addr jar label
$pc = addr
div rd, rs, rt rd = rs / rt div $s0, $t1, $t2
precedem o símbolo $ nas instruções de linguagem
jr rs $pc = rs jr $t1
Instruções Condicionais Comandos de Repetição em Assembly
Linguagem C If/Else em Assembly

Instrução Descrição Exemplo int main() { main: Linguagem C While em Assembly


int a = 0; add $s0, $zero, $zero
slt rd, rs, rt rd = (rs < rt)?1:0 sll $s0, $t1, $t2 int b = 5; addi $s1 $zero, 5 int main() { main: addi $s0, $zero, 1
if (a == b) bne $s0, $s1, else int pow = 1; add $s1, $zero, $zero
slti rs, rt, imm rs=(rt<imm)?1:0 srl $s0, $t1, 2 a = b; add $s0, $s1, $zero int x = 0; addi $t0, $zero, 128
else j exit while (pow!=128) { while: beq $s0, $t0, exit
a = a + b; else: pow = pow * 2; sll $s0, $s0, 1
Instruções de Transferência de Dados return 0; add $s0, $s0, $s1 x += 1; addi $s1, $s1, 1
} exit: } j while
return 0; exit:
Instrução Descrição Exemplo
}
Linguagem C If/Else/If em Assembly
lw rs, imm(rt) rs = M(rt+imm) lw $s0, -100($t1)
int main() { main: Linguagem C For em Assembly
sw rs, imm(rt) M[rt+imm] = rs sw $s0, -100($t1)
int a = 20; addi $s0, $zero, 20
if (a == 20) addi $t0, $zero, 20 int main() { main:
Operações Aritmética em Assembly fee = 2; bne $s0, $t0, elseif50 int sum = 0; add $s0, $zero, $zero
else if (a == 50) addi $s1, $zero, 2 int I; add $s1, $zero, $zero
fee = 5; j exit for (i=0; i != 10; i++) { addi $t0, $zero, 10
Linguagem C Linguagem Assembly else elseif50: sum = sum + i; for: beq $s1, $t0, exit
fee = 0 addi $t0, $zero, 50 } add $s0, $s0, $s1
int main() { main: return 0; bne $s0, $t0, else return 0; addi $s1, $s1, 1
int a = 0; int b = 5; add $s0, $zero, $zero } addi $s1, $zero, 5 } j for
a = a + (b - a); addi $s1 $zero, 5 j exit exit:
return 0; sub $t0, $s1, $s0 else:
} add $s0, $s0, $t0 add $s1, $zero, $zero
exit: exit: Operação com Pilha em Assembly

Comandos de Decisão em Assembly Linguagem C For em Assembly


Linguagem C Switch/Case emAssembly

int main() { main: int main() { main: addi $sp, $sp, -20
Linguagem C If em Assembly int i; add $s1, $zero, $zero
int a = 20; addi $s0, $zero, 20
switch (a) { addi $t0, $zero, 20 int array[5]; addi $t0, $zero, 5
int main() { main: for (i=0; i < 5; i++) { for: slt $t1, $s1, $t0
int a = 0; int b = 5; add $s0, $zero, $zero case 20: fee = 2; bne $s0, $t0, default
break; addi $s1, $zero, 2 array[i] = i; beq $t1, $zero, exit
if (a == b) addi $s1 $zero, 5 } sll $t2, $s1, 2
a = b; bne $s0, $s1, next default: fee = 0; j exit
} default: return 0; add $t2, $t2, $sp
a = a + b; add $s0, $s1, $zero } sw $s1, 0($t2)
return 0; next: return 0; add $s1, $zero, $zero
} exit: addi $s1, $s1, 1
} add $s0, $s0, $s1 j for
exit: exit:

Você também pode gostar