Exemplo 1 - Trabalhando com registradores

 

Abra o notepad.exe (ou outro editor se preferir). Executaremos o exemplo apresentado a seguir, cujo objetivo é realizar a operação f = (g + h) - ( i + j).

Detalhe importante: Para ques os programas possam ser executados no SPIM, deverá sempre ser definido onde o programa deverá ser iniciado. Isto é feito através da declaração do símbolo main, da seguinte maneira:

.text # indica que as linhas seguintes contém instruções
.globl main # define o símbolo main como sendo global
main: # indica o início do programa

Agora podemos entrar com as instruções do programa. De início, precisamos atribuir valores para as variáveis g, h, i e j (registradores $s1, $s2, $s3 e $s4 respectivamente). Para isso entraremos com o seguinte código:

li $s1,15 # registrador $s1 contém o valor imediato 15
li $s2,36 # registrador $s2 contém o valor imediato 36
addi $s3, $zero, 12 # registrador $s3 contém o valor imediato 12
addi $s4, $zero, 19 # registrador $s4 contém o valor imediato 19

O uso das instruções li e addi foi proposital para demonstrar essas duas formas de carga de valores imediatos em registradores. Agora vamos executar a operação colocando o resultado em $s0.

add $t0,$s1,$s2 # registrador $t0 contém g + h
add $t1,$s3,$s4 # registrador $t1 contém i + j
sub $s0,$t0,$t1 # registrador $s0 contém (g + h) - (i + j)

Salve o arquivo com o nome de "exercicio1.s" e abra-o no SPIM através do menu File, Open. Abra a janela dos Registradores no menu Window, Registers. Observe que os registradores estão todos zerados. Agora clique no menu Simulator, Go e em seguida em OK. Isto irá executar o código. Observe agora a mudança no estado dos registradores.

O $s0 contém o resultado da nossa operação: 14h (os valores dos registradores estão todos em hexadecimal). Conferindo: (15+36) = 51; (12+19) = 31; (51-31) = 20 = (14h).