Sie sind auf Seite 1von 4

Comandos ou Instrues MIPS

Declarao: Nome: storage_type value(s) Exemplo1: .byte a, b Exemplo2: .space 69

Adicionar Add imediato Add unsigned imediato Add unsigned And And imediato Branch se igual Branch se maior ou igual Branch se maior Branch se mdulo maior Branch se maior que zero Branch se menor ou igual Branch se menor Branch se diferente Break Clear Quociente da diviso Jump Jump and link Jump register Load Address Load double word Load Immediate Load Upper Immediate Load word Move Mult(primeiros 32 bits) Nop Nor Ou Ou imediato Resto da diviso

add $s1, $s2, $s3 addi $s1, $s2, C addiu $s1, $2s, C addu $s1, $s2, $s3 and $s1, $s2, $s3 andi $s1, $s2, C beq $s1, $s2, L bge $rs,$rt,Label bgt $rs,$rt,Label bgtu $rs,$rt,Label bgtz $rs,$rt,Label ble $rs,$rt,Label blt $rs,$rt,Label bne $s1, $s2, L break clear $rt div $d, $s, $t j 2500 jal C jr $s1 la $at, LabelAddr ld $t,C($s) li $at, IMMED[31:0] lui $s1, 100 lw $s1, 100($s2) move $rt,$rs mul $d, $s, $t nop nor $s1, $s2, $s3 or $s1, $s2, $s3 ori $s1, $s2, C rem $d, $s, $t

$s1 = $s2 + $s3 $s1 = $s2 + C $s1 = $s2 + C $s1 = $s2 + $s3 $s1 = $s2 and $s3 $s1 = $s2 and C if($s1 == $s2) go to L if($rs>=$rt) PC=Label if($rs>$rt) PC=Label if(|$rs|>=|$rt|) PC=Label if($rs>0) PC=Label if($rs<=$rt) PC=Label if($rs<$rt) PC=Label if($s1 != $s2) go to L usado para debugar $rt=0 $d = $s / $t Desvia para 10000 usado para chamar sub-rotina Desvia para $s1 $at = Label Address $t = Mem[C+$s] $at = 32 bit Immediate value $s1 = 100 * 2 $s1 = Mem[$s2+100] $rt = $rs $d = $s * $t interpretado como sll $0, $0, 0 $s1 = $s2 nor $s3 $s1 = $s2 or $s3 $s1 = $s2 or C $d = $s % St

Shift left logical Set on less than Set less than immediate Shift right logical Subtrair Subtrair unsigned Store word Syscall Xor

sll $t, $s, C slt $s1, $s2, $s3 slti $s1, $s2, 100 srl $t, $s, C sub $s1, $s2, $s3 subu $s1, $s2, $s3 sw $s1, 100($s2) syscall xor $s1, $s2, $s3

$t = $s << C if($s2 < $s3) $s=1; else $s1=0 if($s2 < 100) $s=1; else $s1=0 $t = $s >> C $s1 = $s2 $s3 $s1 = $s2 $s3 Mem[$s2+100] = $s1 chama sistema operacional $s1 = $s2 xor $s3

Tabela de Registradores do MIPS, e suas funes:

Registrador Nmero 0 1 2-3 4-7 8-15 16-23 24-25 26-27 28 29 30 31 verso: 0.71

Nome Alternativo zero $at $v0 $v1 $a0 $a3 $t0 $t7 $s0 $s7 $t8 $t9 $k0 $k1 $gp $sp $s8/$fp $ra

Descrio Registrador sempre zerado Temporrio para o montador Para atribuies de expresses e resultados de funes Argumentos para subrotinas Temporrios Valores Temporrios Reservado para uso de interruptores Ponteiro global Ponteiro para pilha Ponteiro frame Endereo de Retorno

Instrues editadas por Andrei Costa. Contato: andrei529@msn.com

Entrada/sada de dados por chamadas ao sistema operativo O SPIM disponibiliza um conjunto de servios semelhantes aos do SO atravs da utilizao da instruo syscall (chamada ao sistema):

cdigo do servio argumentos valor devolvido


Cdigo 1 2 3 4 5 6 7 8 9 10

$v0 $a0-$a3 ($f12 com reais) $v0 ($f0 com reais)


Argumentos $a0 = inteiro $f12 = float $f12 = double $a0 = string Resultado

Servio print_int print_float print_double print_string read_int read_float read_double read_string sbrk exit

inteiro em $v0 float em $f0 double em $f0 $a0 $a1 $a0 = buffer, = tamanho mximo = quantidade (n)

endereo em $v0

Descrio dos servios


print_int, print_float, print_double escreve no ecr o valor presente no registo adequado ao tipo de servio print_string escreve no ecr a cadeia de caracteres terminada pelo caracter '\0' read_int, print_float, print_double l um nmero do teclado e guarda-o no registo adequado ao tipo de servio read_string tem a funcionalidade da funo fgets() do C (l at se atingir $a1-1 caracteres ou se encontrar o caracter \n) sbrk devolve o apontador para um bloco de memria com n bytes livres exit suspende a execuo do programa

Exemplo: imprimir a cadeia de caracteres A resposta e 5


.data str: .asciiz "A resposta e " # string terminada por \0 .text li $v0, 4 # identificao do servio print_str la $a0, str # endereo da cadeia de caracteres a # imprimir syscall # invocao do servio print_str li $v0, 1 # identificao do servio para print_int li $a0, 5 # valor a imprimir syscall # invocao do servio print_int

Entrada/sada de dados por sondagem directa no SPIM O SPIM simula um perifrico: um terminal mapeado em memria. Isto impede que se use simultaneamente entradas/sadas mapeadas em memria Para se poder usar entradas/sadas mapeadas em memria, o simulador dever ser reiniciado com a opo -mapped_io O terminal consiste em duas unidades independentes: um emissor (que escreve no ecr) e um receptor (que l do teclado) O terminal controlado pelos programas atravs de 4 registos mapeados em memria

Das könnte Ihnen auch gefallen