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).