Beruflich Dokumente
Kultur Dokumente
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
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
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):
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
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
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