############################################################################################### # Exemplo de programa em linguagem de montagem do MIPS : Manipulando vetores # Autor: Ney Calazans # Função: Este programa soma o valor de uma constante (const) a cada elemento do vetor array ############################################################################################### .text # Diretiva para o montador - adiciona o que vem abaixo # à memória de programa do processador .globl main # Declare o rótulo main Como sendo global # É o ponto a partir de onde se inicia a execução main: la $t0,array # o registrador $t0 contém o endereço do próximo elemento do vetor array # no início aponta para o primeiro elemento de array (0x12) la $t1,size # obtém o endereço da posição da memória de dados onde se guarda # o tamanho do vetor lw $t1,0($t1)# o registrador $t1 contém o tamanho do vetor, ou melhor o número de elementos de array que falta processar la $t2,const # obtém o endereço da constante const lw $t2,0($t2)# o registrador $t2 contém a constante a somar (0x100) loop: blez $t1,end # se/quando o número de elementos de array que falta processar chega a 0, fim do processamento... lw $t3,0($t0)# senão, busca na memória o próximo elemento do vetor addu $t3,$t3,$t2# soma o elemento lido com a constante sw $t3,0($t0)# atualiza o valor do elemnto de array na memória addiu $t0,$t0,4 # faz o apontador do elemento de array apontar para o próximo elemento # lembre que 1 palavra no MIPS (32 bits) ocupa 4 endereços consecutivos de memória addiu $t1,$t1,-1# decrementa o número de elementos de array que falta tratar j loop # volta para executar novamente o teste de permanência no laço (linha com rótulo loop) # Ao final do laço, volta-se para o SO end: li $v0,10 # prepara chamada do sistema para finalizar programa syscall # fim do programa .data # Diretiva para o montador - adiciona o que vem abaixo # à memória de dados do processador array: .word 0x12 0xff 0x3 0x14 0x878 0x31 0x62 0x10 0x5 0x16 0x20 # o vetor de dados, de nome array # A diretiva .word reserva 4 bytes para cada inteiros, # em posições successivas da memória de dados size: .word 11 # Variável que armazena o tamanho do vetor const: .word 0x100# Constante a somar a cada elemento do vetor